portフォワードというかTCPリレーというか(socat)

sshのポート転送をこよなく愛しているのだが、ログインするまでもなくポート転送したい時がある。

単純に、Aサーバのこのポートを、Bサーバのあのポートに接続するって場合。

socatってコマンドがあれば、なんとか出来る。

[bash]

$ socat TCP4-LISTEN:8443,fork TCP4:foo.example.com:443

[/bash]

自分の:8443ポートを、foo.example.com:443に繋ぐ。

forkを付けないと、1回の接続でコマンドが終了してしまう。

これで、自分の8443に接続が来ると、foo.example.com:443に接続されるっていうすぐれもの。

ただ、このsocatって一番困るのが、たぶん大体の環境で入ってない。

netcatのncコマンドなら、たぶん何処の環境でも入ってるので、力技でやると、

以下のような感じ。ただ、fifoを事前に作って上げる必要があります。

[bash]

$ mkfifo foo.fifo

$ nc -l 8443 < foo.fifo | nc foo.example.com 443 > foo.fifo

[/bash]

標準入出力をfifoで繋いであげる感じ。

この考えはとても素晴らしいのだが、仕様なのかなんなのか、そこそこの頻度でコマンドが終了する。

もー。ようわからんので、whileで回してやる。

[bash]

$ while /bin/true ; nc -l 8443 < foo.fifo | nc foo.example.com 443 > foo.fifo ; done

[/bash]

かなり強引。動作テスト程度には使えるが、本気運用は無理ですね。