Logo address

ネットワーク

2005/05/13

TCP トンネリング

ホスト環境

この話の中で登場するホスト

目標

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.
と述べられている。