Firefoxではに接続できますgoogle.com:80
。
$ ssh -L 9000:google.com:80 testme@localhost
Firefoxでは、次に接続してhttp://localhost:9000/
から
- これは間違いです。
要求されたURL /がこのサーバーに見つかりません。それは私たちが知っているすべてです。
なぜそのような違いがありますか?ありがとうございます。
答え1
接続は正しく設定されているが、ブラウザがGoogleサーバーが処理するように構成されていないホストとURL( 'localhost:9000'の '/')を要求しています。
curl -v
少なくとも、次を使用してリクエストを表示できます。
GET / HTTP/1.1
Host: localhost:9000
「Host」行は、要求される仮想ホストを決定するために使用されます(これは、1.0と比較されるHTTP 1.1の新機能の1つです)。 Googleサーバーには、「localhost:9000」用に設定された仮想ホストがないため、要求されたリソースが見つからず、404状態で応答できません。
ほとんどの場合、Web検索の問題を解決し、SSHトンネルの使用を検討している場合は、プロキシを使用する必要があります。場合によっては、必要に応じてSSHトンネルを使用してプロキシの受信ポートを転送することもできますが、通常はWebサーバーの受信ポートを転送するためにSSHトンネルを使用しません。
ただし、ここで何が起こっているのかを理解し、Webブラウザでトンネルを使用できるようにするには(上記は無視)、localhostがターゲットが期待するものと同じホストとポートで応答することを確認するか、それを指定する必要があります。 「ホスト」ヘッダーを使用する必要がありますcurl
。
curl -H "Host: google.com" http://localhost:9000/
たとえば、Webブラウザを使用すると、トンネルを作成するときにホスト名の代わりにIPアドレスを指定できます。
ssh -L 9000:216.58.213.142:443 testme@localhost
その後、追加
127.0.0.1 google.com www.google.com
ブラウザからファイルにアクセスする前に/etc/hosts
。https://google.com:9000