今日はsshのport forwarding周りとtsocksについて調べてみた。そのメモ。
ssh port forwards
http://www.turbolinux.co.jp/products/server/11s/user_guide/x9016.htmlらへんが分かりやすかった。簡単に言うと「ある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との違いはhttp://old.typemiss.net/blog/kounoike/20061019-100辺りが参考になりました。設定とかはhttp://yk55.com/blog/2010/10/11/openssh_ssh_over_socks_prox/らへんが参考になりました。
実際に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経由で通信してくれます。
http://tomcat.tokcs.com/wiki/en/SSH%E3%81%A7SOCKS%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7らへんに書いてある設定を使って、
tsocks ping 8.8.8.8
とかすると、socks proxy経由でpingを打ってくれます。便利。
実際にこれをどうやっているのかなと思ったらLD_PRELOADという環境変数でtsocksのプログラムを共有ライブラリとしてpreloadしてるんですね。