Linux内核的 反向路由检查机制rp_filter

在CentOS7系统中,存在双网卡ens18和ens19,当192.168.6.41访问192.168.2.111时遇到路由问题,因回包路径不一致导致通信异常。Linux内核的反向路由检测机制(RP_Filter)用于防止此类问题,它有严格和松散两种模式,可通过调整sysctl参数解决此问题。
摘要由CSDN通过智能技术生成

环境:centos7,双网卡
ens18: 192.168.6.51
ens19: 192.168.2.111

client:192.168.6.41访问192.168.6.51正常,
client:192.168.6.41访问192.168.2.111不正常,

路由如下:


[root@localhost ~]# route -n 
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.6.1     0.0.0.0         UG    102    0        0 ens18
192.168.2.0     0.0.0.0         255.255.255.0   U     101    0        0 ens19
192.168.6.0     0.0.0.0         255.255.255.0   U     102    0        0 ens18

服务器收到数据包之后,如果是自己的包,就会往上层协议栈转发处理,而如果不是自己的,就会根据路由表进行转发。
当服务器接收到来自192.168.6.41访问192.168.6.51的包后,查询路由表最优路径匹配到192.168.6.0,0表示匹配任意,Iface表示网卡,所以会从ens18网口进入,
回包,反向源地址和目的地址互换,目标地址变为192.168.6.41,查询路由表只能匹配到0.0.0.0,Iface表示网卡,所以会从ens18网口出去,
进口和出口都是ens18网卡,所以能正常转发。

当服务器接收到来自192.168.6.41访问192.168.2.111的包后,查询路由表最优路径匹配到192.168.2.0,0表示匹配任意,Iface表示网卡,所以会从ens19网口进入,
回包,反向源地址和目的地址互换,目标地址变为192.168.6.41,查询路由表只能匹配到0.0.0.0,Iface表示网卡,所以会从ens18网口出去,
回包会从ens18发出,这就导致了异步路由问题。

linux内核针对这个问题,有一个安全机制,反向路由检测机制。
Linux的反向路由检测机制,该机制的目的有多个:
– 避免出现意料之外的结果(从一个网卡进,从另一个网卡出),形成循环
– 安全考虑,避免出现IP单播数据包的欺骗
– 避免在较复杂的网络拓扑环境下,因为路由器错误的路径规划,造成反向路径过于复杂,降低网络性能。

rp_filter (Reverse Path Filtering)参数定义了网卡对接收到的数据包进行反向路由验证的规则。他有三个值,0、1、2,具体含意如下:

0:关闭反向路由校验
1:开启严格的反向路由校验。对每个进来的数据包,校验其反向路由是否是最佳路由。如果反向路由不是最佳路由,则直接丢弃该数据包。
2:开启松散的反向路由校验。对每个进来的数据包,校验其源地址是否可达,即反向路由是否能通(通过任意网口),如果反向路径不通,则直接丢弃该数据包。

修改方式如下:

sysctl -w net.ipv4.conf.all.rp_filter=1

参考:

Linux故障之内核反向路由检测_linux反向路由检查_余声不秃头的博客-CSDN博客

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值