主题
网络故障排查
课程介绍
网络故障是Linux运维中最常见的问题之一,直接影响业务的可用性。本课程将带你学习Linux网络基础知识、常见网络故障的排查方法以及网络诊断工具的使用,帮助你快速定位和解决网络问题。
1. Linux网络基础
1.1 网络接口
Linux系统中的网络接口是网络通信的基础。
查看网络接口:
bash
# 查看所有网络接口
ip addr
# 查看特定网络接口
ip addr show eth0
# 查看网络接口详细信息
ip -s link show eth0输出说明:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 00:0c:29:12:34:56 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe12:3456/64 scope link
valid_lft forever preferred_lft forever1.2 网络配置
Linux系统的网络配置包括IP地址、子网掩码、网关、DNS等。
查看网络配置:
bash
# 查看IP地址
ip addr
# 查看路由表
ip route
# 查看DNS配置
cat /etc/resolv.conf
# 查看主机名
hostname1.3 网络配置文件
Linux系统的网络配置文件存储在/etc目录下。
配置文件:
bash
# 网络配置文件(Ubuntu/Debian)
/etc/netplan/00-installer-config.yaml
# 网络配置文件(CentOS/RHEL)
/etc/sysconfig/network-scripts/ifcfg-eth0
# DNS配置文件
/etc/resolv.conf
# 主机名配置文件
/etc/hostname
# hosts文件
/etc/hosts2. 网络诊断工具
2.1 ping命令
ping命令用于测试网络连通性。
基本语法:
bash
ping [选项] 目标地址常用选项:
| 选项 | 说明 |
|---|---|
-c | 指定发送的包数量 |
-i | 指定发送间隔(秒) |
-s | 指定包大小 |
-W | 指定超时时间(秒) |
示例:
bash
# 测试网络连通性
ping 8.8.8.8
# 发送4个包
ping -c 4 8.8.8.8
# 指定包大小
ping -s 1024 8.8.8.8
# 指定超时时间
ping -W 2 8.8.8.8输出说明:
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=12.3 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=11.8 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=117 time=12.1 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=117 time=11.9 ms
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 11.8/12.0/12.3/0.2 ms2.2 traceroute命令
traceroute命令用于跟踪数据包的路由路径。
基本语法:
bash
traceroute [选项] 目标地址常用选项:
| 选项 | 说明 |
|---|---|
-n | 不解析主机名 |
-w | 指定超时时间(秒) |
-m | 指定最大跳数 |
示例:
bash
# 跟踪路由路径
traceroute www.baidu.com
# 不解析主机名
traceroute -n www.baidu.com
# 指定超时时间
traceroute -w 2 www.baidu.com
# 指定最大跳数
traceroute -m 20 www.baidu.com输出说明:
traceroute to www.baidu.com (110.242.68.4), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 1.234 ms 1.123 ms 1.012 ms
2 10.0.0.1 (10.0.0.1) 5.678 ms 5.567 ms 5.456 ms
3 * * *
4 110.242.68.4 (110.242.68.4) 12.345 ms 12.234 ms 12.123 ms2.3 nslookup命令
nslookup命令用于查询DNS记录。
基本语法:
bash
nslookup [选项] 域名示例:
bash
# 查询A记录
nslookup www.baidu.com
# 查询MX记录
nslookup -type=mx baidu.com
# 查询NS记录
nslookup -type=ns baidu.com
# 指定DNS服务器
nslookup www.baidu.com 8.8.8.8输出说明:
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: www.baidu.com
Address: 110.242.68.4
Name: www.baidu.com
Address: 110.242.68.32.4 netstat命令
netstat命令用于查看网络连接、路由表、接口统计等。
基本语法:
bash
netstat [选项]常用选项:
| 选项 | 说明 |
|---|---|
-a | 显示所有连接 |
-t | 显示TCP连接 |
-u | 显示UDP连接 |
-n | 不解析主机名和端口 |
-p | 显示进程ID和名称 |
-l | 显示监听状态的连接 |
示例:
bash
# 查看所有TCP连接
netstat -at
# 查看所有UDP连接
netstat -au
# 查看监听端口
netstat -tlnp
# 查看所有连接和进程
netstat -anp输出说明:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd
tcp 0 0 192.168.1.100:22 192.168.1.1:54321 ESTABLISHED 1234/sshd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 5678/nginx2.5 ss命令
ss命令是netstat的替代工具,功能更强大。
基本语法:
bash
ss [选项]常用选项:
| 选项 | 说明 |
|---|---|
-a | 显示所有连接 |
-t | 显示TCP连接 |
-u | 显示UDP连接 |
-n | 不解析主机名和端口 |
-p | 显示进程ID和名称 |
-l | 显示监听状态的连接 |
示例:
bash
# 查看所有TCP连接
ss -at
# 查看所有UDP连接
ss -au
# 查看监听端口
ss -tlnp
# 查看所有连接和进程
ss -anp3. 常见网络故障
3.1 无法连接网络
当系统无法连接网络时,需要逐步排查。
故障现象:
- ping不通网关
- ping不通外网
- 无法访问网站
排查步骤:
步骤1:检查网络接口
bash
# 查看网络接口
ip addr
# 检查网络接口状态
ip link show eth0
# 启动网络接口
ip link set eth0 up步骤2:检查IP地址
bash
# 查看IP地址
ip addr
# 检查是否有IP地址
ip addr show eth0
# 配置IP地址
ip addr add 192.168.1.100/24 dev eth0步骤3:检查路由表
bash
# 查看路由表
ip route
# 检查默认网关
ip route | grep default
# 添加默认网关
ip route add default via 192.168.1.1步骤4:检查DNS
bash
# 查看DNS配置
cat /etc/resolv.conf
# 测试DNS解析
nslookup www.baidu.com
# 配置DNS
echo "nameserver 8.8.8.8" > /etc/resolv.conf步骤5:测试网络连通性
bash
# 测试网关连通性
ping 192.168.1.1
# 测试外网连通性
ping 8.8.8.8
# 测试域名解析
ping www.baidu.com3.2 网络速度慢
当网络速度慢时,需要排查网络带宽、延迟等问题。
故障现象:
- 网络传输速度慢
- 网络延迟高
- 丢包率高
排查步骤:
步骤1:测试网络延迟
bash
# 测试网络延迟
ping -c 10 8.8.8.8
# 查看丢包率
ping -c 100 8.8.8.8步骤2:测试网络带宽
bash
# 使用iperf测试带宽
iperf -s # 服务器端
iperf -c 192.168.1.100 # 客户端
# 使用speedtest-cli测试带宽
speedtest-cli步骤3:检查网络接口统计
bash
# 查看网络接口统计
ip -s link show eth0
# 查看网络错误
ethtool -S eth0步骤4:检查网络拥塞
bash
# 查看网络连接数
ss -an | wc -l
# 查看TIME_WAIT连接数
ss -an | grep TIME_WAIT | wc -l3.3 端口无法访问
当端口无法访问时,需要排查防火墙、服务状态等问题。
故障现象:
- 无法访问Web服务
- 无法连接数据库
- 端口连接超时
排查步骤:
步骤1:检查服务状态
bash
# 检查服务状态
systemctl status nginx
# 查看监听端口
ss -tlnp | grep 80
# 查看进程
ps aux | grep nginx步骤2:检查防火墙
bash
# 查看防火墙状态
systemctl status firewalld
# 查看防火墙规则
firewall-cmd --list-all
# 开放端口
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload步骤3:检查SELinux
bash
# 查看SELinux状态
getenforce
# 临时关闭SELinux
setenforce 0
# 永久关闭SELinux
vim /etc/selinux/config
SELINUX=disabled步骤4:测试端口连通性
bash
# 使用telnet测试端口
telnet 192.168.1.100 80
# 使用nc测试端口
nc -zv 192.168.1.100 80
# 使用nmap扫描端口
nmap -p 80 192.168.1.1003.4 DNS解析失败
当DNS解析失败时,无法通过域名访问网站。
故障现象:
- 无法通过域名访问网站
- ping域名失败
- nslookup查询失败
排查步骤:
步骤1:检查DNS配置
bash
# 查看DNS配置
cat /etc/resolv.conf
# 测试DNS解析
nslookup www.baidu.com
# 测试DNS解析
dig www.baidu.com步骤2:测试DNS服务器
bash
# 测试DNS服务器连通性
ping 8.8.8.8
# 测试DNS解析
nslookup www.baidu.com 8.8.8.8
# 测试DNS解析
dig @8.8.8.8 www.baidu.com步骤3:配置DNS
bash
# 配置DNS
echo "nameserver 8.8.8.8" > /etc/resolv.conf
echo "nameserver 8.8.4.4" >> /etc/resolv.conf
# 测试DNS解析
nslookup www.baidu.com步骤4:检查hosts文件
bash
# 查看hosts文件
cat /etc/hosts
# 添加hosts记录
echo "192.168.1.100 www.example.com" >> /etc/hosts4. 网络配置修复
4.1 修复网络接口
当网络接口无法工作时,需要重新配置。
步骤1:停止网络接口
bash
# 停止网络接口
ip link set eth0 down步骤2:重新配置网络接口
bash
# 配置IP地址
ip addr add 192.168.1.100/24 dev eth0
# 启动网络接口
ip link set eth0 up步骤3:配置路由
bash
# 添加默认网关
ip route add default via 192.168.1.1步骤4:配置DNS
bash
# 配置DNS
echo "nameserver 8.8.8.8" > /etc/resolv.conf4.2 修复网络配置文件
当网络配置文件错误时,需要重新配置。
Ubuntu/Debian系统:
bash
# 编辑网络配置文件
vim /etc/netplan/00-installer-config.yaml
# 配置内容
network:
ethernets:
eth0:
dhcp4: true
version: 2
# 应用配置
netplan applyCentOS/RHEL系统:
bash
# 编辑网络配置文件
vim /etc/sysconfig/network-scripts/ifcfg-eth0
# 配置内容
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
# 重启网络服务
systemctl restart network5. 网络监控
5.1 实时监控网络流量
使用iftop命令实时监控网络流量。
bash
# 安装iftop
sudo apt-get install iftop
# 监控网络流量
sudo iftop -i eth05.2 监控网络连接
使用ss命令监控网络连接。
bash
# 查看所有TCP连接
ss -at
# 查看所有UDP连接
ss -au
# 查看监听端口
ss -tlnp
# 查看连接统计
ss -s5.3 监控网络错误
使用netstat命令监控网络错误。
bash
# 查看网络统计
netstat -i
# 查看网络接口统计
ip -s link show eth0课程总结
这节课我们学习了网络故障排查。
核心内容:
- Linux网络基础(网络接口、网络配置、配置文件)
- 网络诊断工具(ping、traceroute、nslookup、netstat、ss)
- 常见网络故障(无法连接网络、网络速度慢、端口无法访问、DNS解析失败)
- 网络配置修复
- 网络监控
重要命令:
ip addr:查看网络接口ip route:查看路由表ping:测试网络连通性traceroute:跟踪路由路径nslookup:查询DNS记录netstat:查看网络连接ss:查看网络连接systemctl status firewalld:查看防火墙状态
网络故障是Linux运维中最常见的问题之一,掌握这些排查方法和工具,可以帮助你快速定位和解决网络问题,保障业务可用性。
课后练习
练习1(基础)
完成以下操作:
- 查看网络接口和IP地址
- 查看路由表
- 测试网络连通性(ping 8.8.8.8)
- 查看DNS配置
练习2(进阶)
假设系统无法连接网络,请描述排查步骤。
练习3(拓展)
假设端口80无法访问,请描述排查步骤。