Linux双网卡同网段使用策略路由控制流量哪张网卡进就哪张网卡出

文章描述了一种在CentOS7系统中,由于设置arp_ignore参数导致双网卡在同一网段内通信受阻的情况。通过解释arp_ignore参数的作用,指出设置为1时,流量会按照进入的网卡出口,导致一张网卡无法ping通。为解决此问题,文章提出了使用策略路由的方法,通过创建和配置不同的路由表,确保流量按来源正确分流,从而实现两张网卡的互通。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:

双网卡同网段:

ens33:192.168.172.109

ens37:192.168.172.119

Centos7操作系统

net.ipv4.conf.all.arp_ignore=1

net.ipv4.conf.ens33.arp_ignore=1

net.ipv4.conf.ens34.arp_ignore=1

net.ipv4.conf.all.rp_filter = 1

net.ipv4.conf.ens33.rp_filter = 1

net.ipv4.conf.ens34.rp_filter = 1

实验背景

在一台宿主机上用VMware创建一台虚拟机,添加两张网卡,都是桥接模式,然后在上面的环境下,虚拟机的其中一张网卡是宿主机ping不通的,另一张可以通,详情见下,现在是要求使用策略路由来使它们能够互通。

在环境下ping不通原因

 

在这个环境下,宿主机只能ping通其中一个网卡的ip,另一个是不通的。

这是因为arp_ignore的参数设置,详细看下:

arp_ignore参数的作用是控制系统在收到外部的arp请求时,是否要返回arp响应。

arp_ignore参数常用的取值主要有0,1,2,3~8较少用到:

0:响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。

1:只响应目的IP地址为接收网卡上的本地地址的arp请求。

2:只响应目的IP地址为接收网卡上的本地地址的arp请求,并且arp请求的源IP必须和接收网卡同网段。

3:如果ARP请求数据包所请求的IP地址对应的本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包。

4~7:保留未使用

8:不回应所有的arp请求

所以这里我们设置了arp_ignore=1, 简单理解就是规定你流量从哪个网卡进就从哪个网卡出,如果走错了,那它就会把你丢了。

图中可以看到进来的是ens33网卡,出去也是ens33网卡,,所以我们把arp_ignore设置为1时,它ens37网卡ping不通了,所以这里我们就要使用策略路由来让它们分流,规定它流量从哪里来就哪里出。

策略路由

模板:

 实验实例:

我们在/etc/iproute2/rt_tables文件插入两张路由表(Linux最大可支持255张路由表,包括table id、table name)。

我们在这两张路由表上添加规则和路由进去:

[root@localhost ~]# ip rule add from 192.168.172.109 table ens33
#代表源地址为192.168.172.109的流量
[root@localhost ~]# ip rule add from 192.168.172.119 table ens37
#代表源地址为192.168.172.119的流量
[root@localhost ~]# ip route add default via 192.168.172.239 dev ens33 table ens33
#行为为下一跳192.168.172.239并从网卡ens33出去
[root@localhost ~]# ip route add default via 192.168.172.239 dev ens37 table ens37
#行为为下一跳192.168.172.239并从网卡ens37出去

 配置完成后,我们就可以ping通两张网卡了

策略路由持久化配置

#接上面内容
#用ip a命令查看系统网卡名,如有两张网卡名为ens33和ens37

cd /etc/sysconfig/network-scripts/       #进入网络配置文件目录,可以看到有ifcfg-ens33和ifcfg-ens37配置文件

#创建策略路由和规则文件,命名方式为:路由为 route-"相应网卡名",规则为 rule-"相应网卡名"

vi route-ens33           #持久化添加策略路由,内容如下:
default via 192.168.172.239 dev ens33 table ens33


vi route-ens37           #持久化添加策略路由,内容如下:
default via 192.168.172.239 dev ens37 table ens37


vi rule-ens33            #持久化添加规则,内容如下
from 192.168.172.109 table ens33


vi rule-ens37            #持久化添加规则,内容如下
from 192.168.172.119 table ens37

保存后重启网络即可,如果前面有手动加的规则,ip rule show查看还有,这里持久化配置文件保存后重启网络生效,会重复添加进去,需先清除之前配置的临时规则,然后再配置持久化规则配置,重启network服务后自动生成ip rule

PS:
rule-网卡名的配置文件内容,ip rule show查看的持久化规则配置默认优先级高低取决于配置的规则在rule-网卡名文件里的位置行高低,内容从上到下的规则行,往下的行规则优先级会越高。也可以手动在规则后面加pref参数定义优先级高低。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值