はじめに
こんにちは。南の住人 A こと wacky です。吉田キャンパスより南に生息している為、こう呼ばれることもあります。
この記事は KMCアドベントカレンダー2013 の 14 日目の記事です。昨日の記事は nojima さんの authorized_keys でした。また、この記事は KMCアドベントカレンダー2013 のサブプロジェクトである SSHアドベントカレンダー2013 の記事でもあります。
今日は、 ssh の -D
オプションと、 tsocks について書きたいと思います。なお、以下の記事は何らかの Unix をクライアントとして使っていることを想定しています。
-D
オプションについて
みなさん、 ssh -L
でトンネルを掘っていてこう思ったことはありませんか?
「いちいちポートを指定してトンネルを掘るのは面倒臭い」
僕はあります。面倒臭いですね。何か良い方法はないものか、と思い ssh の man を読んでみると、魅力的なオプションが見つかります。
-D ポート番号
ローカルホスト側における、アプリケーションレベルの "動的な" ポート転送を指定します。(略)
なんと魅力的なのでしょう。いちいちポートを指定しなくても、自動的にうまいことやってくれるそうです。 man の続きを読むと、「 ssh は SOCKS サーバのようにふるまいます」と書いてあります。ちょうと京都大学が SSH ポートフォワードサービスを提供しているので、ここで試してみましょう。
$ ssh -fND 1080 hogehoge@forward.kuins.kyoto-u.ac.jp
これで、 localhost の 1080 番ポートに SOCKS サーバが立ったことになります。確認してみましょう。
$ ss -l | grep socks
tcp LISTEN 0 128 127.0.0.1:socks *:*
tcp LISTEN 0 128 ::1:socks :::*
確かに SOCKS サーバが立っていますね。では、次はこの SOCKS サーバを利用してみましょう。 Firefox であれば、以下のようにすれば利用することができます。
この状態で、確認くんにアクセスしてみましょう。
確かに、トンネルを通ってアクセスできていることが分かりますね。
-L
と -D
を比較した時の利点・欠点
さて、 -L
と -D
を比較した時の利点・欠点は何でしょう。 -L
で似たようなことをするとどうなるか考えてみましょう。
$ ssh -fNL 8080:kmc.gr.jp:80 hogehoge@forward.kuins.kyoto-u.ac.jp
このように ssh したあと、ブラウザで http://localhost:8080/ にアクセスすると、確かに KMC のホームページを見ることができます。しかし、この方法では、いちいち相手のポートと自分のポートを指定しなければならず、また、自分のアクセスする URL も変わってしまうので、不便です。
一方、 -D
の場合は、アプリケーションが SOCKS プロキシに対応してさえいれば、トンネルを通らない場合と同じ URL でアクセスすることができます。しかし、もしアプリケーションが SOCKS プロキシに対応していなければ、この方法は使えません。
tsocks と組み合わせる
tsocks というツールを組み合わせて使うことで、SOCKS プロキシに対応していないアプリケーションでも、 SOCKS プロキシを通すことができます。 apt-get や pacman で tsocks をインストールした後、 /etc/tsocks.conf
に
server = localhost
server_type = 5
server_port = 1080
と書き、
$ tsocks firefox
としてアプリケーションを起動してやることで、アプリケーション側で設定をいじらなくても、 SOCKS プロキシを通すことができます。
実際の使用例
IRC を普段から利用している方であれば、普段から tiarra などの IRC プロキシを使っておられる方が多いと思います。大学から IRC をしたい時も、当然自分の立てている tiarra に繋ぎにいくのですが、あいにく大学の無線 LAN では、特定のポート以外にはアクセスすることができません。
しかし、そんな場合でも、
$ ssh -fND 1080 somewhere
$ tsocks weechat # weechatは端末上で動くIRCクライアント
としてやれば、IRC クライアントの設定を一切変えることなく、目的の IRC プロキシに繋ぐことができます。便利ですね。ちなみに、 weechat は端末上で動くんだから、 ssh 先のホストで動かせばいいじゃないか、というツッコミは無しでお願いします。
おわりに
以上、 ssh -D
と tsocks を組み合わせて使うお話でした。 tsocks は、GUI・CUI 関係なく使えるツールなので、使えるようにしておくとものすごく便利です。
明日はのな君が sshfs の使い方を解説してくれる予定です。