什么有效
我有以下设置:
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 情况却可以呢?
答案1
您应该先启动服务器,然后启动远程端口转发。反之则不然。
我不确定这是为什么,但显然它解决了问题。