2.4.2 默认网关与多网卡路由策略
默认网关与多网卡路由策略#
默认网关用于将非本地网段的流量转发到上级路由器。在多网卡主机上,若多个默认路由并存,系统会按优先级(metric)或策略路由规则选择出口。配置不当会导致回程不对称、访问失败或安全风险。
原理草图(单默认网关与多网卡分流)#
默认网关的作用与查看#
- 作用:当目标地址不在直连网段时,将流量转发到上级路由器
- 查看路由表:
ip route
route -n
命令说明:ip route 显示内核路由表;default via 行即默认网关。
临时与永久配置(以 RHEL/CentOS 为例)#
临时生效(重启失效)
# 添加默认网关
ip route add default via 192.168.1.1 dev eth0 metric 100
# 验证路由选择
ip route get 8.8.8.8
永久生效
# /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
METRIC=100
# 使配置生效
nmcli connection reload
nmcli connection up eth0
预期效果:ip route 中出现 default via 192.168.1.1 dev eth0 metric 100
多网卡路由优先级(metric)#
- metric 值越小优先级越高
- 典型主备出口示例:
# 主出口
ip route add default via 10.0.0.1 dev eth0 metric 100
# 备出口
ip route add default via 172.16.0.1 dev eth1 metric 200
验证
ip route | grep default
策略路由(Policy Routing)示例:按源地址分流#
场景:管理网 10.0.0.0/24 走 eth0,业务网 172.16.0.0/24 走 eth1
1)定义路由表
# /etc/iproute2/rt_tables
100 mgmt
200 biz
2)为表添加默认路由
ip route add default via 10.0.0.1 dev eth0 table mgmt
ip route add default via 172.16.0.1 dev eth1 table biz
3)按源地址匹配规则
ip rule add from 10.0.0.0/24 table mgmt
ip rule add from 172.16.0.0/24 table biz
4)验证
ip rule show
ip route show table mgmt
ip route show table biz
预期效果:从不同源网段发起连接时,ip route get <目标> from <源IP> 显示不同出口
端口级分流(iptables + mark)#
场景:80/443 走 eth0,其它走 eth1
# 标记 HTTP/HTTPS 流量
iptables -t mangle -A OUTPUT -p tcp -m multiport --dports 80,443 -j MARK --set-mark 0x1
# 创建策略规则:打了标记的走表 100
ip rule add fwmark 0x1 table 100
ip route add default via 10.0.0.1 dev eth0 table 100
# 默认路由走 eth1
ip route add default via 172.16.0.1 dev eth1 metric 200
说明:MARK 用于匹配流量;fwmark 触发策略路由。
排错与验证清单(含明确命令解释)#
- 路由选择是否正确:
ip route get 8.8.8.8
ip route get 8.8.8.8 from 10.0.0.10
解释:显示内核最终选择的出口接口与下一跳。
- 策略规则是否生效:
ip rule show
解释:从上到下匹配规则,优先级越小越先匹配。
- 链路与对端可达:
ping -I eth0 10.0.0.1
traceroute -i eth1 8.8.8.8
解释:-I/-i 指定出口接口,验证真实路径。
- 回程不对称检查:
tcpdump -ni eth0 host 8.8.8.8
tcpdump -ni eth1 host 8.8.8.8
解释:观察请求与响应是否走同一接口。
常见问题与修复#
- 问题1:默认网关冲突
现象:连接间歇失败、回程走错接口
修复:仅保留一个默认路由或使用策略路由分流 - 问题2:策略路由未生效
现象:仍走主路由表
修复:检查ip rule show优先级;确保rt_tables表名正确 - 问题3:重启后丢失规则
修复:将ip rule/ip route写入系统启动脚本或 NetworkManager 脚本
练习(可直接操作)#
- 配置双网卡主备默认路由(metric 100/200),验证主链路断开后自动走备链路。
- 配置按源地址分流,使用
ip route get <dst> from <src>验证出口。 - 使用
iptables + mark实现 80/443 走 eth0,其余走 eth1,并用traceroute验证。 - 模拟错误:同时配置两个默认网关,观察
ping失败或回程不对称现象并修复。