- 我在本機網路上有一台電腦(我們稱之為 A),沒有可從外部存取的靜態 IP 位址。 (SSH 連接埠
AAAAA
) - A 有一個網頁伺服器,我希望能夠從外部存取它
- 我有一個可透過網路存取的伺服器 (B),它還運行一個網路伺服器(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 的 Web 瀏覽器上,
manual proxy configuration SOCKS host: localhost, port 9001, SOCKS v5
這確實很好用,但是每次都必須在 C 上啟動 SSH 命令並更改 Web 瀏覽器中的設置,這非常繁瑣...
所以我和某人討論了這個問題,他告訴我,我可以透過在機器 C 上完成的部分直接在伺服器 B 上完成,並在 B 的網路伺服器上的 nginx 中進行一些網路設定來簡化設定。所以現在,我嘗試了這個:
- 在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; } [...] }
據我了解,從連接到互聯網的計算機上的網絡瀏覽器,請求http://B.B.B.B/A
應該隧道到127.0.0.1:9000
我的計算機 A 的轉發端口,從而使我可以訪問 A 上的網絡伺服器。
不過,此設定有問題,因為當我嘗試連線時,http://B.B.B.B/A
載入時間很長(大約一分鐘),然後是一個空白頁面,上面寫有以下錯誤訊息:
SSH-2.0-OpenSSH_6.7p1 Raspbian-5+deb8u3 Protocol mismatch.
我用谷歌搜尋了一下這個錯誤,發現了一些具有相對相似問題的帖子,但老實說,由於我在這類事情上的(非常)有限的技能,當我試圖將他們的修復項目投射到我的用例時,我迷失了方向...有人可以幫我嗎?