Ubuntu服务器端口转发失败求助:外部无法访问SSH端口22
外网SSH访问端口关闭问题排查方案
一、本地/局域网层面验证
- 确认SSH服务运行状态:在Ubuntu服务器执行
systemctl status sshd,确保输出显示active (running)。未启动则执行systemctl start sshd并设置开机自启systemctl enable sshd。 - 验证局域网SSH连通性:用局域网内另一台设备执行
ssh 你的用户名@192.168.0.101,确认能正常登录。若失败,检查/etc/ssh/sshd_config是否禁用密码登录(未配置密钥时)、是否限制登录IP段。 - 核对防火墙规则:执行
ufw status verbose(使用ufw时)或iptables -L -n(原生iptables时),确认存在允许tcp dpt:22的ALLOW规则。注意:若ufw处于禁用状态,需确保iptables无默认拒绝22端口的规则。
二、路由器端口转发配置校验
- 确认DDNS绑定IP一致:登录TP-LINK后台查看WAN口公网IP,对比NO-IP控制台显示的IP。若不一致,检查路由器DDNS设置是否开启自动更新,或在服务器/路由器上重启NO-IP客户端触发更新。
- 修正端口转发协议:SSH仅需TCP协议,在Virtual Server配置中,将协议改为
TCP(而非TCP/UDP),外部/内部端口设为22,映射目标为192.168.0.101,确保状态为启用。 - 排查路由器安全限制:确认未开启
AP隔离或局域网访问限制,这类规则可能阻断端口转发的流量通路。 - 尝试更换外部端口:部分ISP会封锁22这类常见端口,可将路由器外部端口改为非标准值(如2222),内部端口保留22,外网测试时用
ssh 你的用户名@你的NO-IP域名 -p 2222。
三、外网环境限制排查
- 检查是否有运营商级NAT:若路由器WAN口IP为10.x.x.x、172.16-31.x.x、192.168.x.x这类私有IP,说明无公网IP,端口转发无效,需联系ISP申请公网IP,或使用内网穿透工具。
- 换外网环境测试:用手机流量(避免连接家庭WiFi)直接尝试SSH连接,或执行
telnet 你的NO-IP域名 22验证连通性,排除测试网络自身防火墙的干扰。 - 确认域名解析正确性:执行
nslookup 你的NO-IP域名,检查返回IP是否与路由器WAN口公网IP一致,不一致则手动触发DDNS更新。
四、其他细节检查
- 服务器静态IP配置:执行
ip route确认默认网关指向路由器LAN IP(如192.168.0.1),DNS服务器配置正常。 - 路由器WAN防火墙:检查TP-LINK的WAN口防火墙规则,确保未将22端口(或替换后的端口)加入黑名单。
内容的提问来源于stack exchange,提问作者Trippy 741
相关产品推荐
相关产品推荐

