読者です 読者をやめる 読者になる 読者になる

マダカレークッテナイデショー

お仕事SE、趣味ドラム

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とか書いてた)。