$shibayu36->blog;

プログラミングの話や自分の考えを色々と書いています。特にperl、emacsや読んだ本の話が多いです。

ssh port forwardingsとtsocks

今日は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してるんですね。