- 外部からアクセス可能な静的 IP アドレスを持たないローカル ネットワーク上にコンピューター (A と呼びます) があります。(SSH ポート
AAAAA
) - Aには外部からアクセスできるようにしたいウェブサーバーがあります
- インターネットからアクセス可能なサーバー (B) があり、Web サーバーも実行しています (ssh ポート:
BBBBB
) - Web ブラウザを搭載した任意のコンピューターから、A 経由で B 上の Web サーバーにアクセスできるようにしたいと考えています。
私は次の設定で SSH リモート トンネリングを正常に使用しています。
マシンAの場合:
$> ssh -f -N -p BBBBB -R 0.0.0.0:9000:localhost:AAAAA [email protected]
マシンC:
$> ssh -f -p 9000 -D 9001 -N [email protected]
マシンCのウェブブラウザで、
manual proxy configuration SOCKS host: localhost, port 9001, SOCKS v5
これは本当にうまく機能しますが、毎回 C で SSH コマンドを起動し、Web ブラウザーで設定を変更する必要があるのは非常に面倒です...
そこで、このことを誰かに話したところ、マシン C で実行した部分をサーバー B で直接実行し、B の Web サーバー上の nginx でいくつかの Web 構成を実行することで、セットアップを簡素化できるだろうと言われました。そこで、次のことを試しました。
- Aについては前と同じ
Bについて:
$> ssh -f -p 9000 -D 9001 -N [email protected]
Bのnginx設定:
$> cat /etc/nginx/sites-available/default:
upstream tunnel { server 127.0.0.1:9000; } server { listen 80; [...] location /A { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://tunnel; } [...] } server { listen 443 ssl; [...] location /A { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://tunnel; } [...] }
私の理解では、インターネットに接続されたマシン上の Web ブラウザーから、マシン A の転送ポートhttp://B.B.B.B/A
にトンネリングしてリクエストを送信し、マシン A 上の Web サーバーにアクセスできるようになります。127.0.0.1:9000
しかし、この設定には何か問題があり、接続しようとすると、http://B.B.B.B/A
読み込みに長い時間 (約 1 分) がかかり、その後空白のページが表示され、次のエラー メッセージが表示されます。
SSH-2.0-OpenSSH_6.7p1 Raspbian-5+deb8u3 Protocol mismatch.
私はそのエラーを Google で少し検索し、比較的類似した問題に関する投稿をいくつか見つけましたが、正直なところ、この種のことに関する私の (非常に) 限られたスキルでは、その修正を自分のユースケースに適用しようとすると途方に暮れてしまいます... 誰か助けてくれませんか?