ネットワーク
TCP トンネリング
ホスト環境
この話の中で登場するホスト- vpc
コマンドを実行している Plan 9 端末 (192.168.1.101)
- pc
もう一つの Plan 9 端末 (192.168.1.2)
- mac
MacOSX (192.168.1.4)
目標
mac の sshd を利用して、vpc -> mac -> pc への通信チャネルを作る。pc へのアクセスは実際には mac を経由して行われるために、コマンドは vpc から打ち込んでいるにも関わらず、pc が見る IP パケットのアドレスは mac のものである。
従って、仮に pc が mac の IP アドレス以外を拒否する設定になっている場合にも vpc から pc にアクセスできる。
TCP トンネリングはファイアーウォールによって隠されているホストを中継するのに使用される。
ディレクトリ
この話の中で登場するディレクトリterm% ls /net ... /net/tcp /net/udp ... term% ls / ... /net /net.alt ... term% ls /net.alt term%
sshnet
term% sshnet -m /net.alt mac !Adding key: proto=pass server=mac service=ssh user=arisawa password: term% ls /net.alt /net.alt/cs /net.alt/tcpつまり /net.alt に cs と tcp が作られた事になる。これが vpc と mac との間に作られた通信チャネルである。
aux/stub
term% aux/stub -d /net/macnet term% ls -l /net/macnet ls: /net/macnet: permission denied term% ls -l /net d---------- M 41 stub stub 0 May 13 14:33 /net/macnet ... d-r-xr-xr-x I 0 network arisawa 0 Oct 19 2003 /net/tcp ... term% bind /net.alt/tcp /net/macnet term% ls -l /net ... d-r-xr-xr-x M 37 ssh ssh 0 May 13 14:30 /net/macnet ... d-r-xr-xr-x I 0 network arisawa 0 Oct 19 2003 /net/tcp ...stub の意図は分かりにくいがマニュアルによると
the intent is to provide a place to bind or mount other resources.と書いてある。実際 /net の中には通常の方法で、つまり touch や mkdir ではファイルやディレクトリは作れない。
他方 stub は普通のブィレクトリにもファイルを作る。
term% cd /tmp term% aux/stub aaaa term% ls -l ... ----------- M 47 stub stub 0 May 13 15:16 aaaa ... term%端末からは rm などで消す手段は無いが、この存在は見かけ上のもので、他のウィンドウからは見えない。ウィンドウを消せば aaaa の効果は消える。
通信実験
term% con macnet!pc!whoami term% con macnet!pc!whoami connected to macnet!pc!whoami on /net/macnet/0 i am 192.168.1.2 sysname pc you are 192.168.1.4 port 49637 term%確かに vpc から送られた IP パケットの送信元アドレスは mac のものである。
この使い方から分かるように macnet は新たに作成されたプロトコルの名称になっている。名前は自由に付けられるので sshmac とでもした方が良かったかも...
この新しいプロトコルは実際には TCP なので tcp でできる事は何でもできる。例えば 9fs によるマウント。
term% mntgen term% 9fs macnet!pc post... mounting as arisawa term% ls /srv ... /srv/macnet!pc ... term% ls /n/macnet!pc /n/macnet!pc/386 ... /n/macnet!pc/usr term%
取り消し
以上のコマンドを実行したウィンドウを消せば、TCP チャネルは消える。
Plan 9 ホストの sshd
Plan 9 では sshd ではなく sshserve となっている。sshserve は TCP tunnering をサポートしていない。その理由についてマニュアルではSshserve does not provide the TCP forwarding functionality used by sshnet, because many Unix clients present this capability in an insecure manner.と述べられている。