Linux多网卡路由应使用策略路由而非多默认网关:先为每网卡配置独立IP,再通过/etc/iproute2/rt_tables定义自定义路由表,用ip route添加各表路由、ip rule绑定源IP与表,最后持久化至systemd或Netplan。
Linux多网卡路由配置,核心不是“加多条默认网关”,而是让不同流量按需走指定路径。直接在main表里硬塞多个default路由会冲突,系统只认一条;真正可靠的方式是用策略路由(Policy Routing),基于源IP、目标地址等条件选择对应路由表。
IP确保每张网卡有独立、无重叠的IP和子网。例如:
临时配置用:ip addr add 192.168.1.100/24 dev eth0 && ip link set eth0 up;永久配置则写入对应发行版文件(如Ubuntu的/etc/netplan/*.yaml或CentOS的/etc/sysconfig/network-scripts/ifcfg-eth0)。
编辑/etc/iproute2/rt_tables,追加两行(数字为优先级,越小越靠前):
200 table_intranet
201 table_internet
注意:不要改动已有的local、main、default三行。这个操作只需做一次,系统重启后仍保留。
以eth0走内网、eth1走外网为例,执行以下命令:
ip route flush table table_intranet && ip route add 192.168.1.0/24 dev eth0 src 192.168.1.100 table table_intranet && ip route add default via 192.168.1.1 dev eth0 table table_intranet
ip route flush table table_internet && ip route add 10.0.0.0/24 dev eth1 src 10.0.0.100 table table_internet && ip route add default via 10.0.0.1 dev eth1 table table_internet
ip rule add from 192.168.1.100/32 table table_intranet && ip rule add from 10.0.0.100/32 table table_internet
这样,从192.168.1.100发出的包自动查table_intranet,从10.0.0.100发出的包查table_internet,互不干扰。
上述命令重启即失效,需持久化:
sleep 5等网卡就绪延迟)ip rule show看规则,ip route show table table_intranet查具体路由策略路由不是“高级可选项”,而是多网卡场景下的标准解法。只要IP不冲突、路由表不漏、rule匹配准确,内外网分流自然稳定。