You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

SSH隧道端口转发后无法通过公网接口访问的问题排查

Hey,这个问题我之前排查过好几次,核心原因要么是SSH服务器的配置限制了端口绑定范围,要么是网络层面的防火墙/安全组拦了流量,咱们一步步来解决:

1. 先检查SSH服务器的GatewayPorts配置

OpenSSH默认会把反向隧道的端口绑定在服务器的127.0.0.1地址上,外部根本连不上——这是GatewayPorts选项默认设为no导致的。

操作步骤:

  • 登录到你的公网服务器(58.36.132.124),编辑sshd配置文件:
    sudo vi /etc/ssh/sshd_config
    
  • 找到GatewayPorts这一行(如果被注释了就去掉#),改成下面其中一种:
    • GatewayPorts yes:允许所有反向隧道绑定到服务器的所有网络接口
    • GatewayPorts clientspecified:允许客户端指定绑定地址(也就是你命令里的*能生效)
  • 重启sshd服务让配置生效:
    # 大多数现代Linux发行版用这个
    sudo systemctl restart sshd
    # 老版本Ubuntu/Debian可以用
    sudo service ssh restart
    
2. 确认端口是否真的绑定了所有地址

修改配置后,重新运行你的隧道命令:

ssh root@58.36.132.124 -N -R *:11222:127.0.0.1:11222

然后在公网服务器上执行这个命令,查看端口监听状态:

ss -tlnp | grep 11222
  • 如果输出里的Local Address0.0.0.0:11222或者:::11222,说明端口已经对外开放了,接下来查防火墙;
  • 如果还是127.0.0.1:11222,说明sshd配置没生效——再检查配置文件有没有写错,或者重启服务的时候有没有报错。
3. 检查防火墙和云安全组

即使端口绑定对了,外部流量也可能被拦:

系统防火墙

  • firewalld(CentOS/RHEL)
    # 临时开放端口
    sudo firewall-cmd --add-port=11222/tcp
    # 永久开放,重启防火墙生效
    sudo firewall-cmd --add-port=11222/tcp --permanent
    sudo firewall-cmd --reload
    
  • ufw(Ubuntu/Debian)
    sudo ufw allow 11222/tcp
    sudo ufw reload
    
  • iptables
    sudo iptables -A INPUT -p tcp --dport 11222 -j ACCEPT
    # 保存规则,不同系统命令不同,比如CentOS用:
    sudo service iptables save
    

云服务商安全组

如果你用的是阿里云、腾讯云、AWS这类云服务器,一定要去控制台的安全组里加一条规则:允许外部访问TCP 11222端口,来源地址可以设为0.0.0.0/0(允许所有IP)或者你需要的特定IP范围——这一步很容易忘!

4. 临时解决办法(不用改全局配置)

如果你不想修改服务器的sshd全局配置,也可以在建立隧道时加个参数临时生效:

ssh root@58.36.132.124 -N -R *:11222:127.0.0.1:11222 -o GatewayPorts=yes

最后别忘了确认你的本地服务确实在127.0.0.1:11222正常运行,没绑定其他地址哦。

内容的提问来源于stack exchange,提问作者George

火山引擎 最新活动