我将首先给出一个简短的、不相关的解释,以理解我的问题:
我有 3 个 Linux 机器,每个机器有 2 个 NIC,1 个用于 WAN 接口,1 个用于 LAN 接口。每个 Linux 机器的 WAN 接口上都配置了来自 ISP 的完整公共子网,我可以使用上述接口成功访问“互联网”。
至于每个盒子上的 LAN 接口,它们都配置在 192.168.50.0/24 网络上。但是,它们与“互联网”隔离,只能成功 ping 通彼此。ISP 没有为我的 LAN 网络提供 NAT/路由器功能。
为了解决第一个问题,我买了第四台 Linux 机器(带 2 个 NIC)并安装了 OPNsense,现在我的 LAN 网络有了“网关”(192.168.50.1)。我通过 OPNsense 配置了 OpenVPN,隧道网络设置为 192.168.10.0/24,我可以从远程客户端成功连接到它,并在其私有 IP 地址(192.168.50.1)上 ping 我的 OPNsense 服务器。但是,我只能使用 OPNsense 服务器的私有 IP(192.168.50.1)ping 一些具有 1 个 LAN NIC 及其网关设置的客户端。
对于三台初始服务器(带有 2 个 NIC),我仍然无法 ping 通它们,唯一的区别是它们的 LAN NIC 没有指定网关 IP(192.168.50.1)。但是,如果我尝试添加它(就像它与其他客户端一起工作的地方一样),那么我的服务器将完全无法访问,我需要通过控制台重新连接以撤消网关更改。似乎 Linux 不喜欢有 2 个网关,我不太清楚如何解决这个问题,因为我也需要访问这三台服务器。
请注意,该问题与 OPNsense 或 OpenVPN 无关,因为我可以访问一些已安装 LAN 网关的客户端,但事实是,配置具有两个网关的 Linux 机器会导致服务器完全瘫痪。
我读到过,在这种情况下我需要配置静态路由,但对我来说,这毫无意义。PS 所有三个 Linux 机器都使用 Almalinux 8。\
我将非常感激对此事的任何意见,谢谢。
答案1
没有系统喜欢多个活动的默认网关。根据定义,默认网关是到达所有未知网络的默认路径。未知网络是服务器在路由表中没有更直接路径的网络。
如果您有多个默认网关,则两个网关都必须具有通向所有相同网络的路径。在这种情况下,它们没有,实际上是两个网关,位于两个完全独立的网络上。这会导致网络数据包从错误的网络接口发出。这不是实现此目的的方法。
保留 WAN 接口上的默认网关,并将 LAN 接口上的网关全部移除。然后为 VPN 服务器可访问的私有子网范围设置静态路由,以使用下一跳192.168.50.1
。在本例中,需要静态路由的网络是192.168.10.0/24
。这在三台具有双接口的服务器上完成。
3台服务器上的命令如下:
ip route add 192.168.10.0/24 via 192.168.50.1
这是临时的,重启后会丢失。如何添加永久静态路由因 Linux 的不同版本而异,但使用 Google 应该很容易找到。