You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

无法通过远程网络SSH连接Ubuntu 22.04主机,仅局域网可正常连接

无法通过远程网络SSH连接Ubuntu 22.04主机,仅局域网可正常连接

嘿,我来帮你一步步排查这个问题,毕竟外网连不上但局域网正常的情况,大多是网络转发或运营商层面的小坑,咱们挨个捋:

1. 先把路由器端口转发的坑踩完

你说已经设了端口转发,但这环节最容易出错:

  • 先确认转发的内部IP是静态的:Ubuntu主机的局域网IP得是固定的,别用DHCP自动分配的,不然重启后IP变了,转发就白搭了
  • 检查路由器的端口映射规则:别把「外部端口」和「内部端口」搞混,内部端口就填22,外部端口可以试试换个非标准的(比如2222)——很多运营商会默认屏蔽22端口,这是高频坑!
  • 有些路由器有「DMZ主机」功能,你可以临时把Ubuntu设为DMZ主机试试,如果能连上,说明是端口转发的配置有问题

2. 验证DDNS是否真的指向你的公网IP

你在Ubuntu上跑个curl ifconfig.me(或者wget -qO- ifconfig.me),拿到当前的公网IP,然后在外网设备上ping你的DDNS域名,看看返回的IP和这个公网IP是不是一致。如果不一样,说明DDNS服务没同步更新,得检查DDNS的配置或者重启下DDNS客户端。

3. 排查运营商是否拦截了SSH流量

家用宽带运营商封22端口是常规操作,你可以做个简单测试:

  • 在Ubuntu上用nc -l 2222监听2222端口
  • 路由器上把外网2222端口转发到Ubuntu的2222端口
  • 在外网设备上执行telnet 你的DDNS域名 2222,如果能连上(哪怕是空白界面),说明22端口被封了,换个非标准端口就行;如果连不上,那可能还是路由器或网络的问题

4. 再确认SSH服务的配置有没有限制

虽然局域网能连,但还是得排除服务本身的限制:

  • 编辑/etc/ssh/sshd_config,看看有没有ListenAddress选项,如果设成了局域网IP(比如192.168.1.xx),那SSH只会监听局域网接口,外网自然连不上,把这行注释掉或者改成0.0.0.0监听所有接口
  • 检查AllowUsersAllowGroups,是不是只加了局域网的用户或IP段,把限制放开试试
  • 改完后重启SSH服务:sudo systemctl restart sshd

5. 清理iptables的残留规则

从你给出的iptables-save输出看,虽然INPUT链设成了ACCEPT,但还有ufw的残留链(比如ufw-after-forward),虽然你关了ufw,但这些残留链可能会有隐性影响,你可以重置下iptables:

sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

重置完再试试外网连接。

要是这些步骤都试过还不行,你可以在外网设备上用ssh -v 你的DDNS域名 -p 你的端口拿到更详细的调试日志,贴出来咱们再接着分析~

备注:内容来源于stack exchange,提问作者antonym-splash

火山引擎 最新活动