Linux 网络配置与故障排查
大约 12 分钟约 3586 字
Linux 网络配置与故障排查
简介
Linux 网络管理是运维工作的核心技能之一,涵盖网络接口配置、连接状态监控、数据包捕获、路由管理、防火墙规则以及 DNS 解析等多个方面。掌握这些工具和方法,能够快速定位并解决网络故障,保障服务的稳定运行。
特点
网络接口配置
使用 ip 命令管理网络接口
# 查看所有网络接口
ip addr show
# 查看指定接口(如 eth0)
ip addr show eth0
# 为接口添加 IP 地址
ip addr add 192.168.1.100/24 dev eth0
# 删除接口的 IP 地址
ip addr del 192.168.1.100/24 dev eth0
# 启用/禁用网络接口
ip link set eth0 up
ip link set eth0 down路由管理
# 查看路由表
ip route show
# 添加默认网关
ip route add default via 192.168.1.1
# 添加静态路由
ip route add 10.0.0.0/24 via 192.168.1.254 dev eth0
# 删除路由
ip route del 10.0.0.0/24
# 查看到达某目标的路径
ip route get 8.8.8.8网络连接状态监控
使用 ss 替代 netstat
# 查看所有 TCP 连接
ss -t -a
# 查看所有 UDP 连接
ss -u -a
# 查看监听端口及对应进程
ss -tlnp
# 查看已建立的连接统计
ss -s
# 按状态筛选(如 TIME_WAIT)
ss -t state time-wait
# 查看连接到指定端口的进程
ss -tnp | grep :8080使用 netstat(传统工具)
# 查看所有监听端口
netstat -tlnp
# 查看所有 TCP 连接
netstat -ant
# 查看路由表
netstat -rn
# 统计各状态的连接数
netstat -ant | awk '{print $6}' | sort | uniq -c | sort -rn数据包捕获与分析
tcpdump 抓包实战
# 捕获指定接口的所有数据包
tcpdump -i eth0
# 捕获指定主机的数据包
tcpdump -i eth0 host 192.168.1.100
# 捕获指定端口的数据包
tcpdump -i eth0 port 80
# 捕获 TCP SYN 包(新建连接)
tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn) != 0'
# 保存抓包结果到文件(用 Wireshark 分析)
tcpdump -i eth0 -w /tmp/capture.pcap -c 1000
# 读取抓包文件
tcpdump -r /tmp/capture.pcap
# 捕获完整的 HTTP 请求内容
tcpdump -i eth0 -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'网络连通性测试
ping 与 traceroute
# 基本 ping 测试
ping -c 4 8.8.8.8
# 指定间隔和包大小
ping -i 0.5 -s 1024 192.168.1.1
# 持续 ping 并记录时间戳
ping 192.168.1.1 | while read line; do echo "$(date '+%Y-%m-%d %H:%M:%S') $line"; done
# traceroute 追踪路由路径
traceroute 8.8.8.8
# 使用 TCP SYN 替代 UDP(适用于防火墙场景)
traceroute -T -p 80 8.8.8.8
# 使用 mtr(结合 ping 和 traceroute)
mtr --report 8.8.8.8防火墙管理
firewalld 操作
# 查看防火墙状态
systemctl status firewalld
# 查看当前开放的端口和服务
firewall-cmd --list-all
# 永久开放端口
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
# 开放服务
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
# 限制特定 IP 访问
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" accept'
# 查看富规则
firewall-cmd --list-rich-rulesiptables 操作
# 查看当前规则
iptables -L -n -v --line-numbers
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 开放指定端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 限制 SSH 连接频率(防暴力破解)
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
# 保存规则
iptables-save > /etc/iptables/rules.v4DNS 解析与排查
DNS 故障排查
# 使用 dig 查询域名解析
dig example.com
# 查询指定 DNS 服务器
dig @8.8.8.8 example.com
# 反向 DNS 查询
dig -x 8.8.8.8
# 使用 nslookup 查询
nslookup example.com
# 使用 host 查询
host example.com
# 追踪 DNS 解析过程
dig +trace example.com
# 查看 DNS 解析路径
host -t NS example.com修改 DNS 配置
# 查看当前 DNS 配置
cat /etc/resolv.conf
# 临时修改 DNS(重启失效)
echo "nameserver 8.8.8.8" > /etc/resolv.conf
echo "nameserver 8.8.4.4" >> /etc/resolv.conf
# 查看 /etc/hosts 文件
cat /etc/hosts
# 刷新 DNS 缓存(systemd-resolved)
systemd-resolve --flush-caches
resolvectl flush-caches网络配置文件
CentOS/RHEL 网络配置
# 查看网络配置文件
cat /etc/sysconfig/network-scripts/ifcfg-eth0
# 静态 IP 配置示例
# /etc/sysconfig/network-scripts/ifcfg-eth0
# TYPE=Ethernet
# BOOTPROTO=static
# NAME=eth0
# DEVICE=eth0
# ONBOOT=yes
# IPADDR=192.168.1.100
# NETMASK=255.255.255.0
# GATEWAY=192.168.1.1
# DNS1=8.8.8.8
# DNS2=8.8.4.4
# 重启网络服务
systemctl restart network
nmcli connection reload
nmcli connection up eth0Ubuntu 网络配置(Netplan)
# /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
eth0:
dhcp4: no
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4# 应用 Netplan 配置
netplan apply
# 查看配置详情
netplan get网络性能监控
使用 nload 和 iftop 实时监控
# nload:简单的实时带宽监控
nload
# 显示每个网卡的实时流入/流出速率
# 支持交互操作:
# 按 n 切换网卡
# 按 q 退出
# iftop:按连接显示流量(需要 root)
iftop -i eth0
# 显示每个连接的源IP、目标IP和实时流量
# 常用参数:
iftop -i eth0 -n # 不解析主机名,显示 IP(加快速度)
iftop -i eth0 -P # 显示端口号
iftop -i eth0 -N # 不解析端口对应的服务名
iftop -i eth0 -B # 以字节为单位显示(默认为比特)
# nethogs:按进程显示网络带宽占用(需要 root)
nethogs eth0
# 可以看到哪个进程在使用网络带宽
# 常用于排查哪个程序占用了大量带宽
# 按 m 切换单位,按 r 按流量排序,按 q 退出使用 sar 进行历史性能分析
# sar 是 sysstat 包中的工具,可以收集和报告系统活动数据
# 安装 sysstat
yum install -y sysstat # CentOS/RHEL
apt install -y sysstat # Ubuntu/Debian
# 确保数据收集已启用
vi /etc/default/sysstat
# ENABLED="true"
# 查看网络历史数据
sar -n DEV 1 5 # 每秒采集一次,共采集 5 次网卡数据
sar -n DEV -f /var/log/sa/sa01 # 查看某天的历史数据
# 查看网络错误统计
sar -n EDEV 1 5 # 网卡错误:丢包、溢出等
sar -n SOCK 1 5 # Socket 统计:已用、已创建、已删除
# 查看 TCP 连接统计
sar -n TCP 1 5 # TCP 连接状态分布
# 关键指标解读
# rxpck/s — 每秒接收的数据包数
# txpck/s — 每秒发送的数据包数
# rxkB/s — 每秒接收的 KB 数
# txkB/s — 每秒发送的 KB 数
# %ifutil — 网卡利用率(接收+发送占带宽的百分比)
# rxerr/s — 每秒接收错误包数
# txerr/s — 每秒发送错误包数
# rxdrop/s — 每秒接收丢包数(可能因为缓冲区不足)网络故障排查方法论
分层排查思路
网络故障排查七层模型(从下到上):
1. 物理层(Layer 1)
- 网线是否插好,网线是否损坏
- 网卡指示灯是否正常
- ethtool eth0 查看链路状态
2. 数据链路层(Layer 2)
- MAC 地址是否正确
- ARP 表是否正常
- VLAN 配置是否正确
- ip link show eth0 查看状态
3. 网络层(Layer 3)
- IP 地址配置是否正确
- 路由表是否正确
- 防火墙是否放行
- ping 目标 IP 是否可达
4. 传输层(Layer 4)
- 端口是否监听
- 防火墙端口是否放行
- TCP 连接是否正常建立
- ss -tlnp 检查端口监听
5. 会话层/表示层(Layer 5-6)
- SSL/TLS 证书是否有效
- 编码格式是否一致
6. 应用层(Layer 7)
- 服务进程是否运行
- 应用配置是否正确
- curl 测试 HTTP 响应常见故障场景排查
# 场景 1:服务器无法访问外网
# 排查步骤:
ping 8.8.8.8 # 测试网络层连通性
ping google.com # 测试 DNS 解析
ip route show # 检查路由表
cat /etc/resolv.conf # 检查 DNS 配置
traceroute -n 8.8.8.8 # 追踪路由路径,定位断点
iptables -L -n | grep DROP # 检查防火墙规则
# 场景 2:服务端口无法访问
# 排查步骤:
ss -tlnp | grep :8080 # 检查端口是否在监听
curl -v http://localhost:8080 # 本地访问测试
curl -v http://服务器IP:8080 # 远程访问测试
iptables -L -n | grep 8080 # 检查防火墙
# 如果是云服务器,检查安全组规则
# 场景 3:网络延迟高
# 排查步骤:
ping -c 100 8.8.8.8 | tail -5 # 查看平均延迟和丢包率
mtr --report 8.8.8.8 # 逐跳查看延迟
sar -n DEV 1 10 # 查看网卡利用率是否过高
ethtool -S eth0 | grep -i error # 查看网卡硬件错误统计
dmesg | grep -i eth0 # 查看网卡驱动日志
# 场景 4:大量 TIME_WAIT 连接
# 排查步骤:
ss -s # 查看连接统计摘要
ss -t state time-wait | wc -l # 统计 TIME_WAIT 数量
# 解决方案:
# 1. 启用 socket 复用
sysctl -w net.ipv4.tcp_tw_reuse=1
# 2. 缩短 TIME_WAIT 超时时间
sysctl -w net.ipv4.tcp_fin_timeout=15
# 3. 增加 TCP 最大连接队列
sysctl -w net.core.somaxconn=65535
# 4. 开启 TCP Fast Open
sysctl -w net.ipv4.tcp_fastopen=3
# 永久生效:写入 /etc/sysctl.conf
echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_fin_timeout = 15" >> /etc/sysctl.conf
sysctl -p
# 场景 5:DNS 解析慢
# 排查步骤:
time dig example.com # 测量 DNS 解析耗时
time nslookup example.com # 对比解析速度
dig +trace example.com # 追踪完整解析过程
# 优化方案:
# 1. 使用更快的 DNS 服务器(如 114.114.114.114 或 223.5.5.5)
# 2. 本地搭建 DNS 缓存(dnsmasq 或 systemd-resolved)
# 3. 增加 /etc/hosts 静态解析高频域名ethtool 网卡诊断
# 查看网卡基本信息
ethtool eth0
# 输出关键信息:
# Speed: 1000Mb/s — 链路速率
# Duplex: Full — 全双工
# Link detected: yes — 链路是否连接
# 查看网卡详细统计信息
ethtool -S eth0
# 输出关键指标:
# rx_packets / tx_packets — 收发数据包总数
# rx_bytes / tx_bytes — 收发字节数
# rx_errors / tx_errors — 收发错误数(非零需要关注)
# rx_dropped / tx_dropped — 丢弃数(缓冲区不足或硬件问题)
# rx_missed_errors — 接收侧 FIFO 溢出丢包
# 查看网卡驱动信息
ethtool -i eth0
# driver: e1000e — 驱动名称
# version: 3.2.6-k — 驱动版本
# firmware-version: 0.5-4 — 固件版本
# 查看和修改网卡 Ring Buffer
ethtool -g eth0 # 查看当前值
ethtool -G eth0 rx 4096 tx 4096 # 增大 Ring Buffer(减少丢包)
# 修改网卡 Offload 设置(部分场景需要关闭 GRO/LRO)
ethtool -K eth0 gro off # 关闭 Generic Receive Offload
ethtool -K eth0 lro off # 关闭 Large Receive Offload
# 在 tcpdump 抓不到包时,可能需要关闭这些 Offload优点
缺点
总结
Linux 网络配置与故障排查是运维工程师的必备技能。通过 ip 命令管理网络接口与路由,使用 ss 监控连接状态,利用 tcpdump 深度分析数据包,结合防火墙规则保障网络安全,以及通过 DNS 排查工具快速定位域名解析问题,能够高效应对各类网络故障。建议在实际工作中多加练习,形成系统的排查思路,从物理层到应用层逐层定位问题。
关键知识点
- DevOps 主题的核心是让交付更快、更稳、更可审计。
- 自动化不是把命令脚本化,而是把失败、回滚、权限和观测一起设计进去。
- 生产链路必须明确制品、环境、凭据、配置和责任边界。
- 部署主题通常要同时看镜像、容器、卷、网络和宿主机资源。
项目落地视角
- 把流水线拆成构建、测试、制品、部署、验证和回滚几个阶段。
- 为关键步骤补齐日志、指标、通知和人工兜底点。
- 定期演练扩容、回滚、故障注入和灾备切换。
- 固定镜像标签,记录端口、挂载目录、环境变量和自启动策略。
常见误区
- 只关注部署成功,不关注失败恢复和审计追踪。
- 把环境差异藏在临时脚本或人工操作里。
- 上线频率高了以后,没有标准化制品和配置管理。
- 使用 latest 导致结果不可复现。
进阶路线
- 继续补齐 GitOps、可观测性、平台工程和成本治理。
- 把主题和应用架构、安全、权限、备份恢复联动起来理解。
- 形成团队级平台能力,而不是每个项目重复造轮子。
- 继续补齐 Compose 编排、镜像瘦身、安全扫描和镜像仓库治理。
适用场景
- 当你准备把《Linux 网络配置与故障排查》真正落到项目里时,最适合先在一个独立模块或最小样例里验证关键路径。
- 适合构建自动化交付、基础设施治理、监控告警和生产发布体系。
- 当团队规模扩大、发布频率提升或环境变多时,这类主题会显著影响交付效率。
落地建议
- 所有自动化流程尽量做到幂等、可审计、可回滚。
- 把制品、变量、凭据和执行权限分层管理。
- 定期演练扩容、回滚、密钥轮换和灾备恢复。
排错清单
- 先定位失败发生在代码、构建、制品、环境还是权限层。
- 检查流水线变量、凭据、镜像标签和目标环境配置是否一致。
- 如果问题偶发,重点看并发发布、资源争抢和外部依赖抖动。
复盘问题
- 如果把《Linux 网络配置与故障排查》放进你的当前项目,最先要验证的输入、输出和失败路径分别是什么?
- 《Linux 网络配置与故障排查》最容易在什么规模、什么边界条件下暴露问题?你会用什么指标或日志去确认?
- 相比默认实现或替代方案,采用《Linux 网络配置与故障排查》最大的收益和代价分别是什么?
