proxytunnelでプロキシを越える
あるクライアントA(のプログラム)からプロキシBを超えて外部のサーバC(hogehoge.com:1234)に通信したいとする。 プロキシに阻まれて通信できないとき、proxytunnelというツールでプロキシを越える。 いろいろ調べてみても、英語ばっかり、かつ書いてある情報は「ssh接続するためには?」的な情報が多くて迷ったのでまとめておく。
まず、必要なこと。
proxytunnelの導入
以下からダウンロードする。
http://proxytunnel.sourceforge.net/download.php
windowsではcygwinビルドが必要らしい。ビルド済みのものが入手できるのでそれを利用。
クライアントAの適当な箇所に配置。
proxytunnnelの設定
コマンドラインから、以下のように起動する。
proxytunnel.exe -a 10000 -p your.proxy.co.jp:8080 -d hogehoge.com:1234 -P username:password
-a はproxytunnnelで使うポート
-p はプロキシ
-d は接続先(サーバCのURI)
-P はプロキシの認証情報
クライアントA(のプログラム)の設定
上記の通りproxytunnelを起動させておき、hogehoge.com:1234ではなく、localhost:10000につなぐようにしておく。
サーバ側の設定
特に不要。クライアントからの通信ができるようにはしておく。
以下、気になったこと
サーバ側の設定は不要なの?
80とか443のポートで通信を待ち受けて、それを通信したいポートに流すリバースプロキシ的な設定がいると想像していた。HTTP CONNECTという任意のポートと接続を確立するメソッドを使っているらしく、そういう設定は不要。
つまり、proxytunnnelがやってくれてることは
- プロキシ認証(とその情報の保持)
- もともとの通信をHTTP CONNECTメソッドにラップして通信を代理
ということだろうか。
proxytunnnelのページにも書いてあったが、プロキシ自体がCONNECTメソッドを制限(それ自体を禁止しているか、ポートを絞っている)と使えないらしく、環境による。
proxytunnnel以外のツールも調べてみると、リバースプロキシっぽい設定も書いてあったので、ツールによってこのあたりの方法は違うのかもしれない。 それにしても、このネットワーク周りの話は疎いので、いざというときいろいろ困る。
そのほかのオプション
リモートプロキシの設定がうんたらかんたらとか書いてあったが、この場合でのローカルプロキシとリモートプロキシの違いが不明。 2段階でプロキシを越える場合?それともリバースプロキシがある場合の設定?よくわからない。
使うことについて
そもそもプロキシでアクセスを制限しているのは、セキュリティやらなんやらその組織の都合によるもののはず。 こういったツールを利用すること自体が、組織のルールに沿っているものかは確認しておいた方がよさそう。
追記
入手先のページのヘルプと、実際のproxytunnel.exeのヘルプが違っていたので修正。 認証情報の引数は-P(入手先のページは、-sとか-uとか書いてた)。