You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

双同子网IP虚拟机静态路由回复源IP不一致问题求助

双同子网IP虚拟机静态路由回复源IP不一致问题求助

兄弟,你遇到的这个问题其实是Linux默认选路机制导致的——系统默认是按目的地址来选出口网卡和源IP的,不管数据包是从哪个网卡进来的,所以才会出现回复源IP串了的情况。下面给你一步步解决的方案,亲测有效:

核心思路:用策略路由实现「入站接口/源IP对应出站路由」

我们需要给每个网卡单独配置专属的路由表,再通过规则指定:从哪个网卡进来的包,就用对应网卡的路由表来回复,这样就能保证回复的源IP和接收的IP一致。


步骤1:给每个网卡创建专属路由表

首先得给ens192和ens256各分配一个独立的路由表,编辑路由表配置文件:

vi /etc/iproute2/rt_tables

在文件末尾添加两行(数字只要不冲突就行):

10    ens192_table
20    ens256_table

保存退出后,系统就识别这两个自定义路由表了。

步骤2:给每个路由表添加路由规则

接下来要给每个自定义路由表配置子网路由和默认路由,确保每个表只对应自己的网卡:

给ens192的路由表配置:

# 添加子网内路由,确保同网段的包走ens192
ip route add 10.10.10.0/24 dev ens192 src 10.10.10.142 table ens192_table
# 添加默认网关,对外的包通过ens192走网关10.10.10.129
ip route add default via 10.10.10.129 dev ens192 src 10.10.10.142 table ens192_table

给ens256的路由表配置:

ip route add 10.10.10.0/24 dev ens256 src 10.10.10.143 table ens256_table
ip route add default via 10.10.10.129 dev ens256 src 10.10.10.143 table ens256_table

步骤3:添加策略路由规则(关键!)

现在要告诉系统:从哪个源IP进来的包,就用对应的路由表回复(按源IP匹配比按入站接口更准确,适合同子网场景):

# 来自10.10.10.142的流量,用ens192_table路由
ip rule add from 10.10.10.142 table ens192_table priority 100
# 来自10.10.10.143的流量,用ens256_table路由
ip rule add from 10.10.10.143 table ens256_table priority 200

如果想按入站接口匹配,就换成这两条:

ip rule add iif ens192 table ens192_table priority 100
ip rule add iif ens256 table ens256_table priority 200

步骤4:调整反向路径过滤参数

Linux默认的反向路径过滤(rp_filter)可能会拦截我们的策略路由流量,所以需要修改sysctl参数:
编辑/etc/sysctl.conf文件,添加或修改:

net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.ens192.rp_filter = 2
net.ipv4.conf.ens256.rp_filter = 2

然后执行命令让参数生效:

sysctl -p

步骤5:验证配置

配置完后可以用以下命令验证:

  • 查看自定义路由表:ip route show table ens192_tableip route show table ens256_table,确认每条路由都对应正确的网卡和源IP
  • 查看策略规则:ip rule list,能看到我们添加的两条规则在优先级列表里
  • 从192.168.1.5分别ping 10.10.10.142和10.10.10.143,抓包或者查看对方的ping日志,应该能看到回复的源IP和目标IP对应上了

永久生效提示

上面的命令都是临时生效的,重启机器会失效。如果要永久生效,可以:

  • 把步骤2和3的命令加到/etc/rc.local文件里(记得给rc.local加执行权限:chmod +x /etc/rc.local
  • 或者用systemd写一个自定义服务,开机时执行这些命令

备注:内容来源于stack exchange,提问作者Aboelnoor90

火山引擎 最新活动