跳转到内容

网络故障排查

课程介绍

网络故障是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 forever

1.2 网络配置

Linux系统的网络配置包括IP地址、子网掩码、网关、DNS等。

查看网络配置

bash
# 查看IP地址
ip addr

# 查看路由表
ip route

# 查看DNS配置
cat /etc/resolv.conf

# 查看主机名
hostname

1.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/hosts

2. 网络诊断工具

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 ms

2.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 ms

2.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.3

2.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/nginx

2.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 -anp

3. 常见网络故障

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.com

3.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 -l

3.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.100

3.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/hosts

4. 网络配置修复

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.conf

4.2 修复网络配置文件

当网络配置文件错误时,需要重新配置。

Ubuntu/Debian系统

bash
# 编辑网络配置文件
vim /etc/netplan/00-installer-config.yaml

# 配置内容
network:
  ethernets:
    eth0:
      dhcp4: true
  version: 2

# 应用配置
netplan apply

CentOS/RHEL系统

bash
# 编辑网络配置文件
vim /etc/sysconfig/network-scripts/ifcfg-eth0

# 配置内容
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes

# 重启网络服务
systemctl restart network

5. 网络监控

5.1 实时监控网络流量

使用iftop命令实时监控网络流量。

bash
# 安装iftop
sudo apt-get install iftop

# 监控网络流量
sudo iftop -i eth0

5.2 监控网络连接

使用ss命令监控网络连接。

bash
# 查看所有TCP连接
ss -at

# 查看所有UDP连接
ss -au

# 查看监听端口
ss -tlnp

# 查看连接统计
ss -s

5.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(基础)

完成以下操作:

  1. 查看网络接口和IP地址
  2. 查看路由表
  3. 测试网络连通性(ping 8.8.8.8)
  4. 查看DNS配置

练习2(进阶)

假设系统无法连接网络,请描述排查步骤。

练习3(拓展)

假设端口80无法访问,请描述排查步骤。

评论区

专业的Linux技术学习平台,从入门到精通的完整学习路径