配置多网关 / 多网卡
1.前期准备
1)两个网卡都需要正确设置,包括各自默认网关(注意,两个网卡都需要设定网关)网卡配置文件在 /etc/sysconfig/network-scripts/目录下,需要正确设置两个网卡的配置文件,然后重新启用新配置。2)两个网卡都已正确接入到两路线路,并且两路网络的服务供应商都已正常提供服务
2.双网关设置步骤
请严格按照下述步骤执行,需要 root 权限,并且把下述的网卡名称和 ip、网关 ip 换成实际环境中的数值
假设
网卡 1
名称:enp0s3
ip:10.10.10.132
网关:10.10.10.254
网卡 2
名称:enp0s8
ip:192.168.11.132
网关:192.168.0.1
ip route flush table Route101 #清空路由表 1ip route flush table Route102 #清空路由表 2echo "101 Route101" >> /etc/iproute2/rt_tables #增加路由表 1echo "102 Route102" >> /etc/iproute2/rt_tables #增加路由表 2ip route add default via 10.10.10.254 dev enp0s3 table Route101 #在路由表 1 中添加默认路由 ip route add 10.10.0.0/20 dev enp0s3 src 10.10.10.132 table Route101 #在路由表 1 中添加默认路由 ip route add default via 192.168.0.1 dev enp0s8 table Route102 #在路由表 2 中添加默认路由 ip route add 192.168.0.0/20 dev enp0s8 src 192.168.11.132 table Route102 #在路由表 2 中添加默认路由 ip rule delete from 10.10.10.132 table Route101 #删除路由规则(如果上次增加过)ip rule delete from 10.10.10.254 table Route101 #删除路由规则(如果上次增加过)ip rule delete from 192.168.11.132 table Route102 #删除路由规则(如果上次增加过)ip rule delete from 192.168.0.1 table Route102 #删除路由规则(如果上次增加过)ip rule add from 10.10.10.132 table Route101 #增加路由规则,根据来源端 IP 来决定数据包参考哪个路由表发送出去 ip rule add from 10.10.10.254 table Route101 #增加路由规则,根据来源端 IP 来决定数据包参考哪个路由表发送出去 ip rule add from 192.168.11.132 table Route102 #增加路由规则,根据来源端 IP 来决定数据包参考哪个路由表发送出去 ip rule add from 192.168.0.1 table Route102 #增加路由规则,根据来源端 IP 来决定数据包参考哪个路由表发送出去 ip route flush cache #清除路由 cacheecho 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #arp_ignore:控制系统在收到外部的 arp 请求时,是否要返回 arp 响应。1:只响应目的 IP 地址为接收网卡上的本地地址的 arp 请求。ip neigh flush dev enp0s3 #清除本地 ARP 缓存 ip neigh flush dev enp0s8 #清除本地 ARP 缓存
3.状态确认
一般情况下按照上述操作设置之后,就已实现双网关设置。两路网络互不干扰,可以各自发送和接收流量。在 RRS 中,只要选择相应网卡即可实现通过该路网络收发流。下面是验证网络设置是否正确。方法一:同时使用 2 路网络开启 RRS 流之后,运行下述两个命令观察流量是否从正确的网络走,如果结果的第一列中出现了另外一个网卡的 ip,那说明设置有问题,反之,则设置正确。iftop -i enp0s3 -niftop -i enp0s8 -n 方法二:验证从 10.10.10.132 以及 192.168.11.132 的包的路由选择 ip route get 8.8.8.8 from 10.10.10.132ip route get 8.8.8.8 from 192.168.11.132 结果应该类似于下面:8.8.8.8 from 10.10.10.100 via 10.10.10.254 dev enp0s38.8.8.8 from 192.168.11.132 via 192.168.0.1 dev enp0s8 方法三:ping 8.8.8.8 -I 10.10.10.132ping 8.8.8.8 -I 192.168.11.132
4.故障调查
如果设置不正确,请使用以下命令检查设置状态 1)检查 /etc/iproute2/rt_tables 文件内容,正确的设置应该大致如下所示(应当包含 101 102 路由表定义):255 local254 main253 default0 unspec## local##1 inr.ruhep101 Route101102 Route1022)检查路由表和路由规则命令:ip route show table Route101
ip route show table Route102 结果中应当包含类似于以下内容:default via 10.10.10.254 dev enp0s3default via 192.168.0.1 dev enp0s8
3)检查 2 个网卡设置四否正确,内网 ping 其他机器是否都 ok.
5.以上的路由设置会在系统或网络重启后被清理。因此需要将它保存下来
开机脚本制作(在以上各步骤都验证 ok 之后,再进行下述步骤。因为部分设置开机不会丢失,所以开机脚本只需要运行会丢失的部分)chmod +x /etc/rc.d/rc.local 编辑/etc/rc.d/rc.local,加入以下命令:(具体网卡的 ip 和网关需要修改为实际的你的 ip)
ip route flush table Route101
ip route flush table Route102
if grep -q "101 Route101" /etc/iproute2/rt_tables; thenecho ""elseecho "101 Route101" >> /etc/iproute2/rt_tablesfi
if grep -q "102 Route102" /etc/iproute2/rt_tables; thenecho ""elseecho "102 Route102" >> /etc/iproute2/rt_tablesfi
ip route add default via 10.10.10.254 dev enp0s3 table Route101
ip route add 10.10.0.0/20 dev enp0s3 src 10.10.10.132 table Route101
ip route add default via 192.168.0.1 dev enp0s8 table Route102
ip route add 192.168.0.0/20 dev enp0s8 src 192.168.11.132 table Route102
ip rule del from 10.10.10.132 table Route101ip rule del from 10.10.10.254 table Route101ip rule del from 192.168.11.132 table Route102ip rule del from 192.168.0.1 table Route102ip rule add from 10.10.10.132 table Route101ip rule add from 10.10.10.254 table Route101ip rule add from 192.168.11.132 table Route102ip rule add from 192.168.0.1 table Route102ip route flush cacheecho 1 > /proc/sys/net/ipv4/conf/all/arp_ignoreip neigh flush dev enp0s8ip neigh flush dev enp0s3
最后,特别需要注意的地方
1)网上很多文章介绍双网卡设置的文章提示说一台电脑拥有两个默认网关是不行的,需要禁用其中一个网卡的网关设置,和我们这个双网关的情况不同,那种情况是指同时可以访问内网和外网。我们这里要做的是同时可以访问两个外网线路,两个网卡都需要设置各自的网关,通过增加路由表来控制网络流量。系统默认只有 1 个主路由表,一个路由表只有一个默认网关。而我们这种情况下会有多个路由表,所以可以有多个默认网关。2) arp_ignore 标志必须设置为 1,否则会出现一个网卡的流量有时会串入另一个网卡。这点非常重要,否则表面上看 2 个网卡都正常工作,其实用 iftop 查看网卡流量会发现有时流量会在两个网卡之间互相串,并不能真正的做到流量分离。
版权声明: 本文为 InfoQ 作者【纵歌】的原创文章。
原文链接:【http://xie.infoq.cn/article/7caf81b70abc2aa0325e85baf】。
本文遵守【CC BY-NC】协议,转载请保留原文出处及本版权声明。
评论