You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过WAN远程SSH连接Linux服务器(端口已开放且服务器可访问)

无法通过WAN远程SSH连接Linux服务器(端口已开放且服务器可访问)

老哥,我看了你遇到的问题,确实挺闹心的——局域网内SSH完全正常,外网明明端口检测显示开放,却连不上还超时,结合你给出的所有信息,我整理几个针对性的排查方向和解决办法,你可以一个个试:

1. 解决IPv4/IPv6监听不匹配的问题

从你给出的netstat输出看,sshd只在IPv6端口(tcp6 :::FORWARDEDPORTNUMBER)上监听了你设置的转发端口,但你用SSH连接的是路由器的公网IPv4地址,这可能导致数据包无法正确匹配到sshd的监听端口。

操作步骤:

  • 编辑SSH配置文件:sudo nano /etc/ssh/sshd_config
  • 添加一行监听规则:ListenAddress 0.0.0.0:FORWARDEDPORTNUMBER(把FORWARDEDPORTNUMBER换成你实际用的端口)
  • 重启sshd服务:sudo systemctl restart sshd
  • 用netstat -tunlp确认,应该能看到tcp 0 0 0.0.0.0:FORWARDEDPORTNUMBER的监听记录,之后再试WAN端SSH连接。

2. 关闭SSH的DNS反向解析(大概率能解决超时问题)

很多时候SSH外网连接超时,都是因为sshd默认开启了DNS反向解析——它会尝试查询客户端IP对应的域名,如果ISP的DNS服务慢或者无法解析,就会卡住整个连接流程。

操作步骤:

  • 编辑SSH配置文件:sudo nano /etc/ssh/sshd_config
  • 找到UseDNS选项(没有的话就自己加一行),设置为UseDNS no
  • 重启sshd服务:sudo systemctl restart sshd
  • 再从手机热点的笔记本发起SSH连接试试。

3. 排查ISP的端口限制或动态过滤

虽然你用端口检测工具显示端口开放,但部分ISP会对非标准端口做动态过滤,或者屏蔽某些端口段。你可以换一个更冷门的5位端口(比如12345)试试:

  • 修改路由器的端口转发规则,把公网端口和内网端口都换成新的5位端口
  • 修改/etc/ssh/sshd_config里的Port为新端口,重启sshd
  • 用新端口重新测试SSH连接。

4. 确认服务器内网IP是静态的

如果你的服务器是通过DHCP自动获取内网IP,有可能IP地址发生了变化,导致路由器的端口转发指向了错误的设备。你可以:

  • 用ip a命令查看USB以太网接口的内网IP(比如enxxxxx开头的接口)
  • 登录路由器后台,检查端口转发规则里的内网目标IP是不是和服务器当前的IP一致
  • 最好把服务器的IP设置为静态IP,避免后续再出现这个问题。

5. 抓包验证数据包是否到达服务器

如果上面的方法都没用,你可以在服务器上抓包,确认外网的SSH请求到底有没有到达服务器:

  • 先找到USB以太网接口的名称:ip a(比如enx001122334455)
  • 运行抓包命令:sudo tcpdump -i 你的接口名 port FORWARDEDPORTNUMBER
  • 同时从手机热点的笔记本发起SSH连接
    • 如果服务器端抓到了数据包,说明问题在服务器内部(比如sshd配置、其他进程干扰)
    • 如果没抓到数据包,说明问题在路由器转发或者ISP的网络层面。

备注:内容来源于stack exchange,提问作者Jules Raschilas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 11:38:04