反向 SSH 隧道適用於 SSH,但不適用於 HTTP
什麼有效
我有以下設置:
server <-NAT-> VPS <-> client
我已經通過反向隧道和以下設置將 ssh 設置到我的伺服器:
- 在 VPS 上,
GatewayPorts yes
- 在伺服器上:
autossh -f -M 57575 -N -R <VPS ip>:9991:localhost:<server ssh port> vps
通過此設置,我可以簡單地
ssh -p 9991 <server user>@<VPS ip>
從客戶端登錄到我的伺服器。什麼不
- 在 VPS 上,
GatewayPorts yes
, 否則設置與 SSH 案例相同
- 在伺服器上:
autossh -f -M 57576 -N -R <VPS ip>:9992:localhost:8988 vps
python -m http.server 8988
啟動 http 伺服器。我可以確認它已綁定0.0.0.0
並且我可以在本地機器上訪問它。但是,當我嘗試通過
http://<VPS ip>:9992
ERR_EMPTY_RESPONSE 訪問該網站時。查看 netstat,這兩種情況似乎相同。在 VPS 上:
tcp 0 0 0.0.0.0:9992 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:9991 0.0.0.0:* LISTEN -
在伺服器上:
tcp 0 0 0.0.0.0:8988 0.0.0.0:* LISTEN 21003/python
tcp 0 0 0.0.0.0:<ssh port> 0.0.0.0:* LISTEN 550/sshd
tcpdump
顯示與 VPS 上的 9992 埠建立了連接,但沒有任何東西到達 8988 上的埠server
。連接FIN
立即在 VPS 上建立。當完全類似的 SSH 情況發生時,為什麼這不起作用?
您應該先啟動伺服器,然後再啟動遠端埠轉發。不是反過來。
我不知道為什麼會這樣,但顯然它解決了這個問題。