最近在调试一台多网卡设备时遇到了一个典型的网络故障:设备物理连接正常,IP地址配置正确,但就是无法访问互联网。经过排查发现,问题出在默认路由的配置上。这种情况在服务器、工控机或容器环境中特别常见——当设备存在多个网络接口时,系统可能不会自动选择正确的出口路径。
先来看下这台设备的基本情况:
关键现象:能ping通同网段设备,但无法访问外部网络,典型的路由选择问题。
在Linux系统中,查看当前网关配置有几种常用方法,各有适用场景:
bash复制ip route
输出示例:
code复制default via 192.168.11.1 dev wlp4s0 proto dhcp metric 600
192.168.11.0/24 dev wlp4s0 proto kernel scope link src 192.168.11.105 metric 600
bash复制ip r | grep default
bash复制route -n
输出示例:
code复制Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.11.1 0.0.0.0 UG 600 0 0 wlp4s0
bash复制nmcli device show eth0 | grep IP4.GATEWAY
当系统需要发送数据包时,内核会按照以下顺序决策:
在多网卡环境中,常见问题包括:
查看问题设备的路由表:
bash复制ip route
输出关键信息:
code复制default via 192.168.2.1 dev eth0 proto static
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.100
192.168.11.0/24 dev eth1 proto kernel scope link src 192.168.11.20
网络接口状态:
bash复制ping -c 4 192.168.11.5
bash复制ip route del default
ip route add default via 192.168.11.5 dev eth1
验证修改结果:
bash复制ip route | grep default
预期输出:
code复制default via 192.168.11.5 dev eth1
bash复制ping -c 4 8.8.8.8 # 测试基础IP连通性
ping -c 4 baidu.com # 测试DNS解析
常见问题现象及对策:
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 能ping通IP但不通域名 | DNS配置错误 | 检查/etc/resolv.conf |
| 间歇性连通 | 路由震荡 | 检查接口metric值 |
| 完全不通 | 网关未开启NAT | 检查路由器配置 |
根据容器网络模式不同,配置方法各异:
bash复制docker run --network=bridge --dns=223.5.5.5 ...
bash复制docker network create -d macvlan \
--subnet=192.168.11.0/24 \
--gateway=192.168.11.5 \
-o parent=eth1 mynet
docker run --network=mynet ...
需直接在宿主机配置:
bash复制nmcli connection modify eth1 ipv4.gateway 192.168.11.5
nmcli connection up eth1
yaml复制# /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
eth1:
addresses: [192.168.11.20/24]
routes:
- to: 0.0.0.0/0
via: 192.168.11.5
nameservers:
addresses: [223.5.5.5, 8.8.8.8]
bash复制# /etc/sysconfig/network-scripts/ifcfg-eth1
GATEWAY=192.168.11.5
DEFROUTE=yes
bash复制traceroute -n 8.8.8.8
mtr -n 8.8.8.8
bash复制ip netns add debug
ip link set eth1 netns debug
ip netns exec debug bash
当需要更复杂的路由策略时:
bash复制ip rule add from 192.168.11.20 lookup 100
ip route add default via 192.168.11.5 dev eth1 table 100
多网卡配置黄金法则:
ip route get 8.8.8.8验证实际路由路径容器网络特别注意事项:
典型故障模式:
推荐诊断工具链:
bash复制# 基础检查
ip -c -br link # 接口状态
ss -tulnp # 端口监听
journalctl -u NetworkManager --since "1 hour ago" # 服务日志
# 高级诊断
tcpdump -i eth1 -nnv 'icmp or port 53'
conntrack -L # 查看NAT会话
在实际运维中,遇到网络不通的问题时,建议按照以下流程排查:
修改路由配置后,建议执行完整回归测试:
bash复制# 连通性测试矩阵
ping_matrix=(
"192.168.11.5" # 网关
"8.8.8.8" # 外网IP
"www.baidu.com" # 域名解析
"portquiz.net:80" # 端口测试
)
for target in "${ping_matrix[@]}"; do
if [[ $target == *:* ]]; then
nc -zvw3 ${target%:*} ${target#*:} && echo "$target OK" || echo "$target FAIL"
else
ping -c 2 -W 1 "$target" &>/dev/null && echo "$target OK" || echo "$target FAIL"
fi
done