「HTTP トンネリング」の版間の差分
細 (リンク切れ修正) |
Kusanaginoturugi (トーク | 投稿記録) |
||
1行目: | 1行目: | ||
[[Category:ネットワーク]] |
[[Category:ネットワーク]] |
||
− | [[Category: |
+ | [[Category:セキュアシェル]] |
[[en:HTTP tunneling]] |
[[en:HTTP tunneling]] |
||
ネットワークにおいて、トンネリングとは上位の階層のプロトコル (この場合 HTTP) を使って低位の階層のプロトコル (この場合 TCP) を転送することです。 |
ネットワークにおいて、トンネリングとは上位の階層のプロトコル (この場合 HTTP) を使って低位の階層のプロトコル (この場合 TCP) を転送することです。 |
2024年8月16日 (金) 18:36時点における最新版
ネットワークにおいて、トンネリングとは上位の階層のプロトコル (この場合 HTTP) を使って低位の階層のプロトコル (この場合 TCP) を転送することです。
目次
トンネルの作成
corkscrew と HTTP CONNECT を使う
SSH デーモンが動いているサーバーに接続をするために、HTTP CONNECT メソッドを使うことで HTTP CONNECT リクエストを HTTP プロキシに送信することによりプロキシを通してクライアントをサーバーに接続することができます。
HTTP プロキシによる SSH のトンネリングを行うためのツールである corkscrew を使います。公式リポジトリの corkscrew パッケージでインストールできます。
SSH 接続を開くのはとても簡単です:
$ ssh user@server -o "ProxyCommand corkscrew $proxy_ip_or_domain_name $proxy_port $destination_ip_or_domain_name $destination_port"
必要なのはシェルを開くことだけでなく、SOCKS トンネルなので、以下のようにすることで localhost:$port
に SOCKS プロキシを作成します:
$ ssh -ND $port
user@server -o "ProxyCommand corkscrew $proxy_ip_or_domain_name $proxy_port $destination_ip_or_domain_name $destination_port"
Git のトンネリング
制限のきつい法人向けファイアウォールは Git の使用するポートを塞いでしまうことがあります。その場合でも、corkscrew などのユーティリティを利用して HTTP プロキシのトンネルを通してやることで Git を使うことができます。Git が GIT_PROXY_COMMAND
環境変数の設定を認識できるなら、$GIT_PROXY_COMMAND
でコマンドを実行してネットワークソケットの代わりにプログラムの標準入出力を使うようにします。
スクリプトファイル corkscrewtunnel.sh
を作成:
#!/bin/bash corkscrew proxyhost proxyport $*
GIT_PROXY_COMMAND
を設定:
$ export GIT_PROXY_COMMAND=path-to-corkscrewtunnel.sh
これで、HTTP プロキシを使って Git をトンネリングできるはずです。
httptunnel を使う
公式リポジトリの httptunnel でインストールすることができる httptunnel は HTTP リクエストでトンネル化した双方向性の仮想データ接続を作成します。HTTP リクエストは必要であれば HTTP プロキシを通して送信することが可能です。ファイアウォールに拘束されているユーザーはこれを上手く使うことができます。HTTP プロキシによる WWW アクセスが許可されていれば、httptunnel や telnet、または PPP を使ってファイアウォールの外にあるコンピュータに接続できます。
ウェブサーバーが既にポート 80 を listen している場合、バーチャルホストを作成することで hts サーバーにウェブサーバーからプロキシ要求させることが可能です。それについてはここでは触れません。
ウェブサーバーがポート 80 を listen していない場合:
- サーバー側:
$ hts --forward-port localhost:22 80
- クライアント側:
$ htc --forward-port 8888 example.net:80 $ ssh -ND user@localhost -p 8888
これで localhost:8888
を SOCKS プロキシとして使うことができます。
proxytunnel を使う
公式リポジトリから proxytunnel パッケージをインストールしてください。
$ ProxyCommand /usr/bin/proxytunnel -p some-proxy:8080 -d www.muppetzone.com:443
openbsd-netcat を使う
公式リポジトリから openbsd-netcat パッケージをインストールしてください。
openbsd の netcat を使って接続を開くには:
$ ssh user@final_server -o "ProxyCommand=nc -X connect -x some-proxy:$proxy_port %h %p"
トンネルを使う
プロキシ設定#SOCKS プロキシを使う を見て下さい。