无法通过远程网络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监听所有接口 - 检查
AllowUsers或AllowGroups,是不是只加了局域网的用户或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




