从一个路由器传入的流量是否通过同一个路由器传出?

从一个路由器传入的流量是否通过同一个路由器传出?

我正在更换 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。

相关内容