HTTP トンネリング

提供: ArchWiki
2020年10月29日 (木) 06:56時点におけるHiromi-mi (トーク | 投稿記録)による版 (リンク切れ修正)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

ネットワークにおいて、トンネリングとは上位の階層のプロトコル (この場合 HTTP) を使って低位の階層のプロトコル (この場合 TCP) を転送することです。

トンネルの作成

corkscrew と HTTP CONNECT を使う

SSH デーモンが動いているサーバーに接続をするために、HTTP CONNECT メソッドを使うことで HTTP CONNECT リクエストを HTTP プロキシに送信することによりプロキシを通してクライアントをサーバーに接続することができます。

ノート: プロキシが HTTP CONNECT メソッドをサポートしていない場合、下の他の方法を見て下さい。

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:$portSOCKS プロキシを作成します:

$ 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 へ接続するとき Fingerprint が認識されず警告が表示されます。

これで localhost:8888SOCKS プロキシとして使うことができます。

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 プロキシを使う を見て下さい。