2.4.5 常见路由与DNS故障排查
本节聚焦路由与DNS解析中的高频故障场景与排查思路,覆盖链路连通性、路由选择、DNS解析、缓存与安全策略等维度,结合可执行命令、完整示例与练习,帮助快速定位“能通IP不通域名、部分网段不可达、间歇性解析失败”等问题。
原理草图:路由与DNS排查路径#
常见路由故障与排查#
现象:无法访问特定网段#
排查步骤与命令解释
# 1) 查看路由表,确认目标网段路由是否存在
ip route
# 预期:出现类似 "10.10.20.0/24 via 192.168.1.1 dev eth0"
# 2) 查看默认路由
ip route show default
# 预期:默认路由仅一条且网关正确
# 3) 验证网关可达性
ping -c 3 192.168.1.1
# 4) 追踪路径确认中间跳点
traceroute 10.10.20.10
修复示例(临时添加静态路由)
# 添加到 10.10.20.0/24 的静态路由
ip route add 10.10.20.0/24 via 192.168.1.1 dev eth0
# 验证路由是否生效
ip route get 10.10.20.10
# 预期:显示 via 192.168.1.1 dev eth0
持久化示例(以 CentOS/RHEL 为例)
# /etc/sysconfig/network-scripts/route-eth0
10.10.20.0/24 via 192.168.1.1 dev eth0
现象:多网卡环境访问走错出口#
排查与定位
# 查看策略路由规则
ip rule
# 查看所有路由表
ip route show table all
# 验证到目标的实际出口
ip route get 8.8.8.8
修复示例(策略路由按源地址走不同出口)
# 假设 eth0: 192.168.1.10/24 走网关 192.168.1.1
# 假设 eth1: 10.0.0.10/24 走网关 10.0.0.1
# 创建路由表
echo "100 out_eth0" >> /etc/iproute2/rt_tables
echo "200 out_eth1" >> /etc/iproute2/rt_tables
# 添加策略规则
ip rule add from 192.168.1.10 table out_eth0
ip rule add from 10.0.0.10 table out_eth1
# 添加各表默认路由
ip route add default via 192.168.1.1 dev eth0 table out_eth0
ip route add default via 10.0.0.1 dev eth1 table out_eth1
# 验证
ip route get 1.1.1.1 from 192.168.1.10
现象:间歇性丢包/高延迟#
链路质量检测
# 连续ping 100次统计丢包
ping -c 100 10.10.20.10
# MTR综合链路分析
mtr -rw 10.10.20.10
检查带宽与拥塞
# 查看网卡统计
ip -s link show dev eth0
# 查看队列/限速策略
tc qdisc show dev eth0
防火墙排查
# iptables查看
iptables -L -n
# firewalld查看
firewall-cmd --list-all
现象:内外网访问冲突(NAT/路由不对称)#
NAT 规则检查
iptables -t nat -L -n -v
排查提示
- 连接建立后回包从不同出口返回,易触发丢包。
- 结合 tcpdump 抓回包路径验证。
抓包示例
# 在出口网卡抓包查看是否有回包
tcpdump -i eth0 host 10.10.20.10 and tcp
常见DNS故障与排查#
现象:域名解析失败(NXDOMAIN/超时)#
检查配置与解析顺序
# 查看DNS服务器
cat /etc/resolv.conf
# 查看解析顺序
cat /etc/nsswitch.conf | grep hosts
# 预期:hosts: files dns
验证解析
dig example.com
nslookup example.com
host example.com
systemd-resolved 检查
systemctl status systemd-resolved
resolvectl status
现象:能解析但访问异常(错误IP)#
检查hosts覆盖与缓存
# hosts覆盖检查
cat /etc/hosts
# systemd-resolved 缓存统计
resolvectl statistics
对比权威DNS
# 对比公共DNS
dig @8.8.8.8 example.com
dig @1.1.1.1 example.com
现象:解析慢或偶发超时#
DNS服务器可达性
ping -c 3 114.114.114.114
traceroute 114.114.114.114
优化 resolv.conf 超时与重试
# /etc/resolv.conf
options timeout:1 attempts:2 rotate
nameserver 114.114.114.114
nameserver 8.8.8.8
DNS端口连通性
# UDP 53
nc -uvz 114.114.114.114 53
# TCP 53
nc -vz 114.114.114.114 53
现象:内网域名无法解析#
检查搜索域与分区解析
# /etc/resolv.conf
search corp.local
nameserver 10.0.0.53
验证内网权威解析
dig @10.0.0.53 app.corp.local
快速定位方法#
分层验证步骤(含命令解释)#
# 1) 验证IP层连通
ping -c 3 10.10.20.10
# 2) 验证路由路径
traceroute 10.10.20.10
# 3) 验证DNS解析
dig example.com
# 4) 验证端口连通
nc -vz 10.10.20.10 80
典型故障场景总结(带对照命令)#
- 能ping通IP但打不开域名
- 检查
/etc/resolv.conf、/etc/nsswitch.conf、systemd-resolved状态 - 命令:
dig 域名、resolvectl status - 能解析但访问异常
- 检查 hosts 覆盖与 DNS 缓存污染
- 命令:
cat /etc/hosts、dig @8.8.8.8 域名 - 部分网段不可达
- 缺少静态路由或策略路由错误
- 命令:
ip route、ip rule、ip route get 目标IP - 多网卡出口混乱
- 默认路由多条或 metric 不合理
- 命令:
ip route show default、ip route get 8.8.8.8
处理建议#
- 变更前备份路由与DNS配置
cp /etc/resolv.conf /etc/resolv.conf.bakip route > /root/route.bak- 统一DNS策略与解析顺序
- 多网卡场景使用策略路由与明确源地址规则
- 排查遵循“先网络后DNS、先链路后应用”的顺序
安装与工具准备(必备排查工具)#
# Debian/Ubuntu
apt-get update
apt-get install -y traceroute mtr-tiny dnsutils iproute2 tcpdump netcat-openbsd
# CentOS/RHEL
yum install -y traceroute mtr bind-utils iproute tcpdump nc
练习(可操作)#
-
路由故障模拟与修复
- 删除目标路由:ip route del 10.10.20.0/24
- 验证不可达:ping -c 3 10.10.20.10
- 恢复路由:ip route add 10.10.20.0/24 via 192.168.1.1 -
DNS故障模拟与修复
- 修改/etc/resolv.conf为无效 DNS
- 验证解析失败:dig example.com
- 还原 DNS 并验证:dig example.com -
多网卡出口验证
- 配置两张网卡两条默认路由
- 使用ip route get 8.8.8.8验证出口
- 通过ip rule配置策略路由修正出口