我们在使用 Alma Linux 9.4 时遇到了一个问题,而我们使用的任何其他版本的 Linux(大多数)都没有这个问题,包括 redhat 和 CentOS。当我们将多个 NIC 卡放入盒子中并在每个卡上设置网络时,我们会设置主 NIC 的默认路由,并在其他 NIC 上设置本地子网(每个 NIC 一个)。我们使用 NMTUI 进行设置,一切看起来都很好。我们以与在数十台其他服务器上相同的方式进行设置(当然,这里的 IP 不同):
10.1.12.157/24 on NIC #1 (primary) with default gateway set to 10.1.12.1
192.168.10.99/32 on NIC #2
10.1.13.19/32 on NIC #3
当我们从 CLI 向外 ping 时(或通过 telnet 测试 OSI 模型的所有 7 层),它会正常工作并路由出相应的 NIC。我们可以在 NIC1 上 ping 10.1.12.1,可以在 NIC2 上 ping 192.168.10.129,可以在 NIC3 上 ping 10.1.13.1...我们也可以 telnet。
当然,我们已经重新启动了 NetworkManager,并关闭/打开了每个接口等等。
问题是,如果我们进入内部网络上此盒子外面的盒子,我们只能:
- 从任何地方 ping 10.1.12.157
- 从一个框 ping 10.1.13.19
- 10.1.13.0/24 从 192.168.10.0/24 上的盒子 ping 192.168.10.99
在 NMTUI 中,我们过去曾将每个 NIC 上的网关设置为默认网关(并在每个 NIC 路由上添加了一条路由 /24,该路由将 NIC 的 IP 范围添加到它自己的接口,例如 192.168.10.0/24 -> 192.168.10.99),并且它已经起作用了。
但在 alma linux 下,它会尝试添加 3 个“默认网关路由”,每个 NIC 一个,这会中断路由,导致盒子无法访问。我们没有在每个 NIC 上添加默认路由,因为在 Alma Linux 上这样做会将这些路由作为默认路由添加到路由表中。因此,我们的路由表现在如下所示:
# ip route show
default via 10.1.12.1 dev ens224 proto static metric 105
10.1.12.0/24 dev ens224 proto kernel scope link src 10.1.12.157 metric 105
10.1.13.0/24 via 10.1.13.19 dev ens256 proto static metric 103
10.1.13.19 dev ens256 proto static scope link metric 103
192.168.10.0/24 via 192.168.10.99 dev ens192 proto static metric 102
192.168.10.99 dev ens192 proto static scope link metric 102
每个网络都是一个 VLAN,所有这些都插入同一个 CISCO 核心交换机。
我甚至尝试在内核中打开 ip4 ip 转发,但没有帮助。
/etc/sysctl.d/99-ipforward.conf contains "net.ipv4.ip_forward = 1" and run "sysctl -p" to activate.
为了确保万无一失,我还在 /etc/sysconfigs/network 中将默认路由设置为 10.1.12.1。
我显然遗漏了一些简单的东西,但我就是想不通。如果有人知道,请告诉我。
谢谢!David
某些发行版默认启用“反向路径过滤”。在严格模式(
rp_filter
sysctl 设置为1
)下,它会丢弃所有无法通过同一接口访问源的入站数据包,这不适用于多宿主系统或任何非对称路由情况。将 sysctl 设置为将其切换到“松散”模式,如果数据包的源可以通过任何
2
接口到达,则允许数据包通过。这同样没用,但方式相反,因为只要主机有默认路由,它实际上就会允许一切。将 sysctl 设置为将完全禁用 rp_filter。0
nstat
根据 RedHat 文章,或中的 IPReversePathFilter 计数器netstat -s
可用于检测被 rp_filter 丢弃的数据包。您实际上不需要每个接口都有一个默认网关(除非您使用
ip rule
策略路由),因为只有具有最低度量的网关才会用于所有内容。