このページは、httptunnel 3.0.5を対象にしています。
オフィシャルサイトから、必要なファイルを持ってきます。
ソースからビルドする場合は、autoconfに対応しているので非常に簡単です。
% tar zxf httptunnel.tar.gz % cd httptunnel % ./configure % make % sudo make install
コマンドは/usr/local/binに入るhts(サーバ)とhtc(クライアント)です。ちゃんとmanページもあります。
想定環境のHTTP proxyは、CONNECTメソッドこそ443番ポートしか通しませんが、その他のメソッドでは任意のポート番号が使えます。そこで今回は暗号化については考えず、サーバ側に8888番(httptunnelのデフォルト)のhtsを常駐させ、それにsshdへの転送をさせます。
まず、serverでhtsを起動します。特にバックグラウンド実行を指示しなくても、勝手にdaemon化するようです。8888番ポートを使うので、一般ユーザで実行できます。
server% hts -F localhost:22
client側ではhtcを起動します。これも勝手にdaemon化するようです。-PオプションでHTTP proxyの情報を与えます。
client# htc -P proxy:8080 -F 10022 server
それではsshを使ってみましょう。
client% ssh -p 10022 localhost Last login: Fri Oct 18 09:17:40 2002 from server server% _
なお、hts、htcを終了させる時は、普通にkillします。反応しなくなることが少なくないので、筆者はわりと頻繁にkillをする羽目になりました。
Zebedeeで穴掘りのマルチターゲットを使わずに、httptunnelで実現してみましょう。serverにはZebedeeで乗り込んで、server2へのトンネルをhtsに掘らせます。
server% hts -F server2:22
client側は変わりません。これでserver2への接続手段が手に入りました。
最初からserver2でhtsを起動しておけばいいのですが、client直接乗り込める環境でないと、反応しなくなったhtsをkillするといった作業ができません。このように、別の手段でloginできるserverにserver2へのトンネルを用意することで、このような問題を回避しました。
なお、実際にserver2にloginするために、筆者は以下のようなスクリプトを書いて使っています。httptunnelの信頼性では、常時起動しておくのは心もとないので、必要なときにだけ実行するためです。なお、途中にはさまっているsleepは、htsとhtcのaccept準備が整うのを待つために入れたウェイトです。
#!/bin/sh ssh server hts -F server2:22 & htc -P proxy:8080 -F 2200 server sleep 1 ssh -p 2200 server2 killall htc ssh server killall hts
http://www.nocrew.org/software/httptunnel.html : オフィシャルサイト