我正在更换 ISP,因此(暂时)两个 ISP 都已连接。旧 ISP 为我提供了一个“粘性”IPv4 地址,没有 IPv6,而新 ISP 为我提供了 IPv6 和 IPv4 的 CGNAT。在找到替代方案之前,我希望仍在家中运行一些服务。
当前(新)配置:
Old ISP Router: 192.168.0.1
New ISP Router: 192.168.0.2
Server: 192.168.0.30
目前,我的默认网关设置为 192.168.0.1,实际上意味着所有 IPv4 流量都通过旧 ISP,而所有 IPv6(由于路由器通告)都通过新 ISP。旧路由器设置为将相关端口转发到服务器。它们主要是 TCP 连接。
我想将默认网关更改为 192.168.0.2。如果我这样做,通过旧 ISP 进入并被端口转发到服务器的流量是否会以相同的方式返回?
答案1
我想将默认网关更改为 192.168.0.2。如果我这样做,通过旧 ISP 进入并被端口转发到服务器的流量是否会以相同的方式返回?
不,不是自动的。
服务器将按照其路由表来处理回复数据包 - 如果其默认网关指向 192.168.0.2,则所有出站数据包包括回复无论入站数据包来自何处,都将通过 192.168.0.2。
(有些操作系统确实会记住入口界面当你有两个独立的网络时,每个网络都有自己的接口——但实际上永远不会有多个网关相同的界面。)
基于 Linux 的服务器可以使用“策略路由”在多个默认路由之间做出决定;您可以将其与 iptables“连接标记”相结合,以便从 Router1 的 MAC 地址到达的任何数据包都获得特定标记,然后属于同一连接的任何出站数据包都保留该标记,最后策略路由规则将它们引导通过“通过 Router1 的默认”路由。这将适用于 conntrack 理解的任何内容,包括 UDP 流。
(在某些 BSD 上,使用 pf 可能可以实现相同的功能,但如果我没记错的话,我认为它只支持每个接口的粘性。)
你可以也可以通过让旧路由器额外对所有数据包进行 SNAT 来实现这一点,这样它们看起来就像来自从192.168.0.1 本身(类似于为“NAT 发夹”所做的设置),但这有一个明显的缺点,即服务器将不再知道数据包的实际来源 - 您的所有日志文件将显示 192.168.0.1。