Ubuntu 22.04 网络故障记录:可 Ping 不可 Telnet
问题描述
在 Ubuntu 22.04 系统中,目标主机可以通过 ping
命令正常连通,但使用 telnet
命令连接某个端口时失败。
现象举例
# ping 正常
ping 192.168.1.100
# telnet 失败(如连接 80 端口)
telnet 192.168.1.100 80
# 或报错:
# telnet: Unable to connect to remote host: Connection refused
排查思路
1. 网络连通性检查
ping 192.168.1.100
traceroute 192.168.1.100
说明 ICMP 协议通,网络无丢包,路由正常。
2. 检查目标端口监听状态
在目标主机(192.168.1.100)上执行:
sudo ss -tuln
确认是否存在监听端口,例如 80 端口是否由某服务(如 nginx、apache)监听:
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
若未监听,说明服务未启动或端口未开放。
3. 检查防火墙设置(ufw
)
在目标主机上运行:
sudo ufw status
可能输出:
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
如果目标端口(如 80)未被允许,需要放行:
sudo ufw allow 80
重新载入防火墙规则:
sudo ufw reload
4. 确认服务是否正常运行
例如目标主机为 Web 服务:
sudo systemctl status nginx
# 或 apache2,或其他服务
若服务未运行:
sudo systemctl start nginx
5. 检查目标服务是否绑定正确 IP
有些服务默认只绑定到 127.0.0.1,外部访问失败。
检查配置文件:
nginx:
/etc/nginx/sites-enabled/default
apache:
/etc/apache2/ports.conf
确保监听地址为 0.0.0.0
或服务器公网 IP。
6. SELinux/AppArmor(可选)
Ubuntu 默认使用 AppArmor,可能限制了某些服务的网络访问。
查看是否启用 AppArmor:
sudo aa-status
若相关服务被限制,可尝试临时或永久放宽策略(高级操作)。
7. Telnet 客户端是否安装
有些系统未默认安装 telnet
:
sudo apt install telnet
结论与解决方案总结
项目 | 检查项 | 结果 | 处理方式 |
---|---|---|---|
网络连通 | ping 成功 |
✅ 正常 | - |
服务监听 | ss -tuln 无 80 端口 |
❌ 异常 | 启动服务 |
防火墙规则 | ufw status 拒绝 80 |
❌ 异常 | ufw allow 80 |
服务状态 | nginx 未运行 |
❌ 异常 | systemctl start nginx |
IP 绑定 | 仅监听 127.0.0.1 | ❌ 异常 | 配置为 0.0.0.0 |
telnet 工具 | 未安装 | ❌ 异常 | apt install telnet |
附录
telnet 使用说明
telnet [IP] [PORT]
# 示例:
telnet 192.168.1.100 22
备注
ping 通并不代表 TCP 端口通,ping 使用 ICMP,而 telnet 使用 TCP。
建议使用
telnet
或更现代的工具如nc
、curl
、ss
进行端口测试。