「HTTP トンネリング」の版間の差分
(ページの作成:「Category:ネットワーク Category:Secure Shell en:HTTP tunneling ネットワークにおいて、トンネリングとは上位の階層のプロトコル...」) |
Kusanaginoturugi (トーク | 投稿記録) |
||
(2人の利用者による、間の3版が非表示) | |||
1行目: | 1行目: | ||
[[Category:ネットワーク]] |
[[Category:ネットワーク]] |
||
− | [[Category: |
+ | [[Category:セキュアシェル]] |
[[en:HTTP tunneling]] |
[[en:HTTP tunneling]] |
||
ネットワークにおいて、トンネリングとは上位の階層のプロトコル (この場合 HTTP) を使って低位の階層のプロトコル (この場合 TCP) を転送することです。 |
ネットワークにおいて、トンネリングとは上位の階層のプロトコル (この場合 HTTP) を使って低位の階層のプロトコル (この場合 TCP) を転送することです。 |
||
6行目: | 6行目: | ||
== トンネルの作成 == |
== トンネルの作成 == |
||
− | === |
+ | === corkscrew と HTTP CONNECT を使う === |
SSH デーモンが動いているサーバーに接続をするために、HTTP CONNECT メソッドを使うことで HTTP CONNECT リクエストを HTTP プロキシに送信することによりプロキシを通してクライアントをサーバーに接続することができます。 |
SSH デーモンが動いているサーバーに接続をするために、HTTP CONNECT メソッドを使うことで HTTP CONNECT リクエストを HTTP プロキシに送信することによりプロキシを通してクライアントをサーバーに接続することができます。 |
||
12行目: | 12行目: | ||
{{Note|プロキシが HTTP CONNECT メソッドをサポートしていない場合、下の他の方法を見て下さい。}} |
{{Note|プロキシが HTTP CONNECT メソッドをサポートしていない場合、下の他の方法を見て下さい。}} |
||
− | HTTP プロキシによる SSH のトンネリングを行うためのツールである [ |
+ | HTTP プロキシによる SSH のトンネリングを行うためのツールである [https://github.com/bryanpkc/corkscrew corkscrew] を使います。[[公式リポジトリ]]の {{Pkg|corkscrew}} パッケージでインストールできます。 |
SSH 接続を開くのはとても簡単です: |
SSH 接続を開くのはとても簡単です: |
||
38行目: | 38行目: | ||
=== httptunnel を使う === |
=== httptunnel を使う === |
||
− | [[公式リポジトリ]]の {{Pkg|httptunnel}} でインストールすることができる [ |
+ | [[公式リポジトリ]]の {{Pkg|httptunnel}} でインストールすることができる [https://github.com/larsbrinkhoff/httptunnel httptunnel] は HTTP リクエストでトンネル化した双方向性の仮想データ接続を作成します。HTTP リクエストは必要であれば HTTP プロキシを通して送信することが可能です。ファイアウォールに拘束されているユーザーはこれを上手く使うことができます。HTTP プロキシによる WWW アクセスが許可されていれば、httptunnel や telnet、または PPP を使ってファイアウォールの外にあるコンピュータに接続できます。 |
ウェブサーバーが既にポート 80 を listen している場合、バーチャルホストを作成することで hts サーバーにウェブサーバーからプロキシ要求させることが可能です。それについてはここでは触れません。 |
ウェブサーバーが既にポート 80 を listen している場合、バーチャルホストを作成することで hts サーバーにウェブサーバーからプロキシ要求させることが可能です。それについてはここでは触れません。 |
||
48行目: | 48行目: | ||
$ htc --forward-port 8888 example.net:80 |
$ htc --forward-port 8888 example.net:80 |
||
$ ssh -ND user@localhost -p 8888 |
$ ssh -ND user@localhost -p 8888 |
||
+ | {{Note|localhost へ接続するとき Fingerprint が認識されず警告が表示されます。}} |
||
− | {{Note|As SSH thinks it is connecting to localhost it will not recognize the fingerprint and display a warning.}} |
||
これで {{Ic|localhost:8888}} を [http://ja.wikipedia.org/wiki/SOCKS SOCKS] プロキシとして使うことができます。 |
これで {{Ic|localhost:8888}} を [http://ja.wikipedia.org/wiki/SOCKS SOCKS] プロキシとして使うことができます。 |
||
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 プロキシを使う を見て下さい。