服务器多网卡路由配置文件是决定多网络接口流量走向的关键,通过策略路由和自定义路由表实现精准的流量控制。 当服务器拥有多张网卡分别连接内网、外网或专线时,默认路由表无法满足复杂需求,必须借助路由配置文件来定义规则,让不同流量走指定链路,避免混乱。参考2
Linux多网卡路由配置文件详解
路由表与策略路由:从默认到自定义
Linux内核默认维护三个路由表:local、main和default,多网卡环境下,只靠main表不够用,需要创建自定义路由表,策略路由(Policy Routing)允许根据源地址、目标地址、入口接口等多个条件选择路由表,这是实现多网卡灵活调度的基础。
核心配置文件路径:
/etc/iproute2/rt_tables:定义路由表ID和名称映射,格式如10 inner。/etc/sysconfig/network-scripts/route-ethX:RHEL/CentOS系为每个网卡配置静态路由。/etc/network/interfaces或/etc/netplan/:Debian/Ubuntu系持久化配置。- 临时配置使用
ip route和ip rule命令,重启后消失。
业内共识认为,在数据中心或企业服务器场景中,合理规划路由表ID和规则优先级是避免网络故障的第一步,建议将内网、外网、专线分别对应不同表,ID从10开始递增,避免与系统默认冲突。
双网卡内外网路由设置方法
这是一个最常见的场景:服务器有两张网卡,一张连接内网(如10.0.0.0/8),一张连接外网(如192.168.1.0/24,网关192.168.1.1),要求默认走外网,内网访问走内网接口,同时保证从内网发起的流量也能正确返回。参考2
具体操作步骤:
- 编辑
/etc/iproute2/rt_tables,添加两行:10 inner20 outer
- 配置内网路由表:
ip route add 10.0.0.0/8 dev eth0 table innerip route add default via 10.0.0.1 dev eth0 table inner(可选,用于内网网关)
- 配置外网路由表:
ip route add default via 192.168.1.1 dev eth1 table outer
- 添加策略规则:
ip rule add from 10.0.0.0/8 lookup inner priority 100ip rule add from all lookup outer priority 200
- 验证配置:
ip route show table innerip route show table outerip rule show
持久化技巧:RHEL/CentOS系列可以在/etc/sysconfig/network-scripts/route-eth0写入0.0.0/8 via 10.0.0.1 dev eth0,但策略规则需要额外脚本,推荐在/etc/rc.d/rc.local中加入上述ip rule命令,并确保rc-local服务启用,Debian/Ubuntu用户可在/etc/network/interfaces的post-up段添加规则。
多网卡策略路由配置步骤
多线接入负载均衡
当服务器接入多条外网线路时,可以通过等值路由或策略路由实现流量分担,一个常用做法是根据源IP段分配不同出口,例如视频流走带宽大的线路,普通业务走另一条。
配置文件调整:
- 在
rt_tables中增加30 isp1、40 isp2。 - 分别在两个表中添加默认路由指向不同网关。
- 规则根据源IP范围划分:
ip rule add from 192.168.10.0/24 lookup isp1,ip rule add from 192.168.20.0/24 lookup isp2。
注意点:必须确保回应流量也走相同线路,否则连接中断,这需要结合防火墙标记或连接跟踪,但更简单的方式是使用源地址策略。
配置文件语法与易错点
/etc/iproute2/rt_tables:每行一个映射,ID和名称之间用空格或Tab,ID范围0-255,但建议使用10以上。- 策略规则优先级:数字越小优先级越高,检查时用
ip rule show,priority字段显示。 - 路由表内的默认路由:如果某张表内没有默认路由,则匹配不到会跳回main表,可能导致意外行为,建议每个自定义表都明确添加默认路由。
- 重启后配置丢失:多数发行版不会自动加载自定义路由表和规则,必须通过脚本或网络服务分发的钩子执行。
配置验证与常见问题排查
路由冲突导致网络不通
典型表现:ping内网地址能通,但外网偶尔通或不通,或者从内网访问服务器时延高。
排查思路:
- 使用
ip route show查看main表是否被覆盖。 - 使用
ip rule show检查规则顺序,确保from规则优先于from all。 - 使用
tcpdump -i eth0 icmp抓包确认流量从哪张网卡发出。 - 对于双向通信,需要检查ARP响应,必要时设置
arp_ignore=1和arp_announce=2,写入/etc/sysctl.conf。
常见错误:在route-eth1文件中写入了内网路由,导致两张网卡都试图负责内网,造成路由表混乱。解决方案:每个网卡只配置与其直连网段相关的路由,其余通过策略路由控制。
重启后配置丢失与恢复
原因:路由规则和自定义表不是由网络服务自动管理的。改进方法:
- 使用
systemd-networkd:在/etc/systemd/network/中为每个网卡编写.network文件,在[Route]段指定表,在[RoutingPolicyRule]段添加规则。 - 使用
NetworkManager的nmcli:nmcli connection modify eth0 +ipv4.routing-rule "priority 100 from 10.0.0.0/8 table inner"。 - 传统脚本:在
/etc/rc.local或/etc/network/interfaces的post-up中执行命令,但需添加sleep 2等待网络就绪。
多网卡环境下ARP问题
当两张网卡在同一广播域时,服务器可能对同一IP发出多个ARP响应,被交换机视为攻击。内核参数调优:
net.ipv4.conf.all.arp_ignore=1:只回答目标IP为本地接口IP的ARP请求。net.ipv4.conf.all.arp_announce=2:对本地IP选择最佳接口发送ARP公告。- 在
/etc/sysctl.conf中设置,执行sysctl -p生效。
多网卡路由配置的性能与安全考量
策略路由对系统性能的影响
策略路由在数据包处理时增加规则匹配,但现代内核优化后,规则数量在几十条以内对性能影响微乎其微。注意事项:避免在iptables中使用过多-m policy模块,会加重CPU负担,对于高并发场景,建议将策略路由规则简化,并利用connmark实现连接跟踪。参考2
安全建议
- 限制策略规则的来源,不对外暴露路由表。
- 使用
iptables的INPUT链配合-i eth0等条件,只允许特定网络访问服务。 - 多网卡服务器常作为网关或LB,注意开启
ip_forward并配置防火墙规则,防止数据包绕过安全策略。
最佳实践:将管理接口与其他业务接口隔离开,管理流量走独立路由表,并通过防火墙限制来源IP。
服务器多网卡路由配置文件常见问题解答
问题1:服务器多网卡路由配置文件在哪个位置?
回答:位置取决于操作系统,CentOS/RHEL中,单网卡静态路由在/etc/sysconfig/network-scripts/route-ethX,路由表映射在/etc/iproute2/rt_tables,Debian/Ubuntu用/etc/network/interfaces或/etc/netplan/目录下的YAML文件,策略规则没有标准配置文件,需通过启动脚本或systemd服务持久化。
问题2:多网卡路由配置后为什么有时生效有时不生效?
回答:这种情况通常由规则优先级冲突或路由表未正确加载引起,检查ip rule show输出,确保内网规则优先级高于from all规则,如果使用了NetworkManager,它可能覆盖/etc/sysconfig/network-scripts/中的设置,建议关闭NetworkManager或使用nmcli统一管理。
问题3:多网卡策略路由和普通路由有什么本质区别?
回答:普通路由只根据目标地址选择路由,而策略路由可以根据源地址、接口、协议等多个条件选择不同的路由表,实现更细粒度的流量控制,多网卡环境下,若不使用策略路由,只能通过metric调整默认路由优先级,无法实现源地址分流,导致内外网流量互相干扰。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/527260.html



