Windows 11反向SSH隧道映射IIS服务至VPS后无法访问的问题求助
Windows 11反向SSH隧道映射IIS服务至VPS后无法访问的问题求助
看起来你的问题主要出在反向SSH隧道的绑定范围和IIS的主机头配置两个关键点上,咱们一步步来排查解决:
1. 反向隧道默认仅绑定VPS回环地址,外部无法访问
从你提供的netstat -tlnp结果能看到,VPS上的80端口只监听127.0.0.1:80和::1:80,这意味着只有VPS本地能访问这个隧道,外部互联网请求根本发不到这个端口上。
虽然你已经在sshd_config里开启了GatewayPorts,但默认的ssh -R 80:localhost:80命令只会把隧道绑定到VPS的回环地址。你需要修改命令,明确指定让隧道绑定VPS的所有网卡:
ssh -R 0.0.0.0:80:localhost:80 root@139.162.19.185
或者用*代替0.0.0.0,效果相同:
ssh -R *:80:localhost:80 root@139.162.19.185
执行完这个命令后,再跑一遍netstat -tlnp,你应该能看到0.0.0.0:80和:::80处于监听状态,这时候外部就能访问VPS的80端口了。
2. IIS的主机头限制导致400错误
你用curl http://127.0.0.1:80返回“Invalid Hostname”,这是因为IIS默认绑定的是localhost或者特定的主机头,当请求的Host是127.0.0.1时,IIS识别不了这个主机名,所以返回400错误。
解决这个问题有两种方式:
- 修改IIS绑定设置:
打开Windows的IIS管理器,找到你的默认站点,右键选择「编辑绑定」,在HTTP绑定的窗口里,把「主机名」留空(或者添加一条绑定到127.0.0.1的记录),这样IIS就会接受任意Host头的请求。 - 临时测试验证:
如果你只是想快速验证隧道是否正常,可以给curl加上Host头:
正常情况下应该能返回IIS的默认首页。curl -H "Host: localhost" http://127.0.0.1:80
3. 最后确认VPS的SSHD配置
虽然你说已经开启了GatewayPorts和AllowTcpForwarding,还是建议再检查一下/etc/ssh/sshd_config的具体值:
GatewayPorts建议设置为yes(允许隧道绑定所有地址)或者clientspecified(允许客户端指定绑定地址),如果是no的话会限制只能绑定回环;AllowTcpForwarding必须设置为yes;
修改配置后记得重启SSHD服务:
systemctl restart sshd
另外,你提到VPS上装Apache能正常跑80端口,说明Linode这边的防火墙和端口封禁都没问题,不用再排查这部分了。
备注:内容来源于stack exchange,提问作者Sugumaran Veejakumaran




