网络不通怎么排查?Linux网络命令入门
服务器连不上了,是网络问题还是服务问题?
新手遇到这种情况经常一脸懵。今天教几个实用的网络排查命令,关键时刻能救急。
第一招:ping测试连通性
最基础的命令,测试能不能通:
ping192.168.1.1如果能ping通,说明网络是通的。ping不通就要往下查了。
常见输出解读:
64 bytes from...正常,能通Request timeout超时,可能被防火墙拦了Destination Host Unreachable目标不可达,检查路由
指定次数:
ping-c4192.168.1.1# 只ping 4次就停第二招:telnet测试端口
ping通了但服务连不上?可能是端口没开。
telnet192.168.1.180能连上会显示Connected,连不上就是端口问题。
没装telnet也可以用nc:
nc-zv192.168.1.180-z表示只测试,-v显示详情。
第三招:看本机端口
服务启动了但外面连不上,先看端口开没开:
ss -tlnp- t:TCP
- l:监听状态
- n:显示端口号
- p:显示进程
输出类似:
State Local Address:Port Process LISTEN 0.0.0.0:8080 java LISTEN 0.0.0.0:22 sshd如果这里没有你的端口,说明服务没起来或者监听地址不对。
看谁占了某个端口:
ss -tlnp|grep8080# 或者lsof-i :8080第四招:查防火墙
端口开了但外面还是连不上,可能是防火墙拦了。
查看防火墙状态:
# CentOS 7+systemctl status firewalld# 查看开放的端口firewall-cmd --list-ports临时开放端口测试:
firewall-cmd --add-port=8080/tcp或者直接关防火墙测试(找到问题后记得开回来):
systemctl stop firewalld第五招:追踪路由
网络不稳定,想知道卡在哪一跳:
traceroute8.8.8.8或者用更好用的mtr:
mtr8.8.8.8mtr会实时显示每一跳的延迟和丢包率,能看出问题出在哪个节点。
第六招:DNS排查
域名解析不了,先测DNS:
# 简单查询nslookupexample.com# 更详细的digexample.com# 指定DNS服务器测试dig@8.8.8.8 example.com如果指定8.8.8.8能解析,本地不行,说明是本地DNS配置问题。
查看DNS配置:
cat/etc/resolv.conf第七招:抓包分析
上面都查不出问题,就得抓包了:
# 抓取80端口的包tcpdump -i eth0 port80# 抓取特定IP的包tcpdump -i eth0host192.168.1.1# 保存到文件,用Wireshark分析tcpdump -i eth0 -w capture.pcap抓包能看到具体的网络通信过程,哪里卡住了一目了然。
实战案例
问题:服务器的8080端口外面访问不了
排查过程:
# 1. 检查服务是否启动ss -tlnp|grep8080# 显示有监听,服务启动了# 2. 本地测试curllocalhost:8080# 能访问,服务正常# 3. 检查防火墙firewall-cmd --list-ports# 没有8080# 4. 开放端口firewall-cmd --add-port=8080/tcp --permanent firewall-cmd --reload搞定,就是防火墙没开端口。
常用命令速查
| 场景 | 命令 |
|---|---|
| 测试网络通不通 | ping IP |
| 测试端口通不通 | telnet IP 端口或nc -zv IP 端口 |
| 查看本机监听端口 | ss -tlnp |
| 查看防火墙状态 | firewall-cmd --list-ports |
| 追踪路由 | mtr 目标IP |
| DNS测试 | dig 域名 |
| 抓包 | tcpdump -i eth0 port 端口 |
远程排查小技巧
有时候服务器在机房或者内网,需要远程上去排查。
我管理的服务器比较分散,有的在公司,有的在家里。用星空组网把它们都组到一个虚拟网络里,不管人在哪都能直接SSH上去,tcpdump抓包、mtr测延迟都很方便。比让同事帮忙操作效率高多了。
网络问题排查就是按顺序一层层查:能不能ping通→端口开没开→防火墙拦没拦→DNS对不对。多练几次就熟了。
有问题评论区交流~