今日はsshのport forwarding周りとtsocksについて調べてみた。そのメモ。
ssh port forwards
らへんが分かりやすかった。簡単に言うと「あるhost:portへのアクセスを、別のhost:portへ転送する」という感じでしょうか。
sshで以下のような感じにすると転送できる。
# localhostの1080番をhost.mydomainの22(SSH)に飛ばせる ssh -L 1080:host.mydomain:22 host.mydomain
実際にlocalhostの1080番にsshでアクセスすると、host.mydomainのsshdにつながります。
ssh -p 1080 localhost
ssh dynamic port forwardings
これはsshをsocks proxy serverとして動作させるみたいなやつです。ssh port forwardingsとの違いはSSH のダイナミック転送ってすごいんですよ | Typemiss.net辺りが参考になりました。設定とかはOpenSSH -SOCKSプロキシ経由でSSH接続 – Yoichi Kawasaki's Webらへんが参考になりました。
実際にdynamic port forwardingsをするには以下のコマンドでOK。
ssh -D 1080 -l shibayu36 host.mydomain
これを経由してsshするには以下のコマンド。sshがsocks proxyに対応しているので、こんな感じに出来る。
ssh -l shibayu36 -o 'ProxyCommand nc -x localhost:1080 %h %p' host.mydomain
tsocks
ssh dynamic port forwardingsを使うと、いろんな接続を踏み台越しにするというメリットが有るんですが、socks proxyに対応していないapplicationは使えないという問題点があります。そこでtsocksを使うと、いい感じにsocks proxy経由で通信してくれます。
SSHでSOCKSプロキシ - JAMWikiらへんに書いてある設定を使って、
tsocks ping 8.8.8.8
とかすると、socks proxy経由でpingを打ってくれます。便利。
実際にこれをどうやっているのかなと思ったらLD_PRELOADという環境変数でtsocksのプログラムを共有ライブラリとしてpreloadしてるんですね。