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.confsystemd-resolved 状态
  • 命令:dig 域名resolvectl status
  • 能解析但访问异常
  • 检查 hosts 覆盖与 DNS 缓存污染
  • 命令:cat /etc/hostsdig @8.8.8.8 域名
  • 部分网段不可达
  • 缺少静态路由或策略路由错误
  • 命令:ip routeip ruleip route get 目标IP
  • 多网卡出口混乱
  • 默认路由多条或 metric 不合理
  • 命令:ip route show defaultip route get 8.8.8.8

处理建议#

  • 变更前备份路由与DNS配置
  • cp /etc/resolv.conf /etc/resolv.conf.bak
  • ip 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

练习(可操作)#

  1. 路由故障模拟与修复
    - 删除目标路由: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

  2. DNS故障模拟与修复
    - 修改 /etc/resolv.conf 为无效 DNS
    - 验证解析失败:dig example.com
    - 还原 DNS 并验证:dig example.com

  3. 多网卡出口验证
    - 配置两张网卡两条默认路由
    - 使用 ip route get 8.8.8.8 验证出口
    - 通过 ip rule 配置策略路由修正出口