我的 CentOS 7 机器有两个网卡:eth0
和eth1
。
NIC 位于不同的子网中。每个子网都有不同的 DHCP,因此,每个 NIC 都会获得不同的 IP 地址和不同的网关设置。
我的问题是:
当我使用命令激活两个 NIC 时 nmtui
,每个网络一次只能访问一个 NIC。
例如:
我192.168.0.1
可以 ping 通192.168.0.2
(eth0
CentOS 的第一个网卡),
但
我192.168.10.1
无法 ping 通 192.168.10.2
(eth1
CentOS 的第二个网卡)
当我禁用时eth0
,我可以 ping192.168.10.1
到192.168.10.2
(eth1
CentOS 的第二个网卡)
这是路线问题还是我错过了另一点?
答案1
这可能既是路由问题,又是 rp_filter 问题(与其结合)。
标准路由相当愚蠢。它不关心通过哪个接口打开连接,而是为每个 IP 地址定义(通常仅)一个下一跳,通常是默认网关。
检查这些设置:sysctl -a | grep -F .rp_filter
如果相应接口的值大于零,则数据包甚至在到达防火墙之前就会被丢弃。
如果将其设置为零,则您的系统可能会正确应答,但由于系统和目标之间的防火墙,应答可能会被丢弃,因为它来自错误的方向。
一个好的解决方案需要单独标记每个接口的传入连接(iptables
使用模块mark
和connmark
),并使用带有这些标记的策略路由 ( ip rule
)。