netcat で port forward

単純にncをパイプで入出力を繋げると、入力はforwardされるけど、出力はclientに返らずに、ncを実行している端末の標準出力に出てしまう。

  • localhostの8080にきたものを192.168.0.1の80にforward
$ nc -l 8080 | nc 192.168.0.1 80

これでcilentからnc 10.0.0.1 8080 と接続すると192.168.0.1:80 にport forwardされるけど、出力はnc -l を実行している端末に出てしまう。


名前付きパイプで解決

$ mkfifo fifo
$ nc -l 8080 < fifo | nc 192.168.0.1 80 > fifo

これでclientからlocalhostの8080にアクセス

$ telnet localhost 8080
GET / HTTP/1.0 
	
## 192.168.0.1:80 のサーバの応答が返ってくる