同一网络上的多个 IPv6 路由器

同一网络上的多个 IPv6 路由器

我的家庭网络有两个 ISP。它们连接到两个独立的路由器。如果我同时在两个路由器上运行 radvd 和 dhcpd,则无法获得 IPv6 连接。只有当其中一个路由器运行 radvd 和 dhcpd 时,我的 IPv6 连接才有效。为什么会这样?

相比之下,对于 IPv4,我在两个路由器上都运行 dhcpd,网络上的其他计算机会根据哪个路由器首先响应来机会性地获取 IP 和网关设置。

答案1

IPv4

IPv4 行为方式与您所观察到的一样,原因是它最初并不打算在一个接口上支持多个 IP 地址。因此,DHCP 客户端将只等待第一个 DHCP 服务器发送请求,并且客户端几乎会认为这是唯一的 DHCP 服务器。

IPv6

然而,IPv6 旨在支持一个接口上的多个地址,因此机器可以接受来自多个路由器的路由器通告并为该接口分配多个 IP 地址。

但是,除非您开始使用策略路由等特殊设置,否则您将拥有一个仅考虑路由决策的目标地址的路由表,并且只有一个指向两个路由器之一的默认路由。

因此,无论客户端使用哪个源地址,您都可以预期数据包将被路由到两个路由器中的同一个。源地址的选择将考虑许多因素,包括源地址是否是分配给数据包最终将通过的接口的地址之一。然而,这在这里没有帮助,因为客户端将使用相同的接口到达两个路由器。

因此,客户端计算机最终可能会选择一个路由器分配范围内的源 IP 地址,但会将数据包发送到另一个路由器。如果没有数据包过滤器,这种情况本来可以奏效。即使您可以以某种方式找到这些数据包过滤器的解决方案,它仍然不是理想的设置,因为当传出流量通过一个路由器而传入流量通过另一个路由器时,您不会真正获得冗余设置。

您的问题中没有足够的信息来肯定这就是您失败的原因。但是,根据您提供的信息,这听起来似乎是最有可能的解释。

简单的解决方案

就短期而言,我可以建议的使此设置正常工作并提供冗余的最简单的解决方案是将其中一个路由器配置为仅 IPv4,将另一个路由器配置为仅 IPv6。

实施 RFC 6555 的客户端将自动在 IPv4 和 IPv6 之间进行故障转移,因此当 IPv4 和 IPv6 通过不同的路由器时,它将在这两个路由器之间进行故障转移。

这对于访问双栈服务有效。您可以使用 DNS64+NAT64 为仅 IPv4 服务实现相同的故障转移。如果您的 ISP 不为您提供 NAT64,您可以在选择用于 IPv6 连接的路由器上配置 NAT64。

长期解决方案

从长远来看,即使访问仅 IPv6 的服务,您也可能需要冗余。实现此目标的最佳方法是让客户端计算机自动在两个路由器之间进行选择。这意味着类似于 RFC 6555 的逻辑需要在两个 IPv6 连接之间进行选择。

我今天还没有看到支持该功能的软件。其中有些部分可以通过策略路由来实现,但这意味着您需要覆盖由每台客户端机器上的自动配置生成的路由表。一个更简单但稍差的解决方案是仅在路由器上配置策略路由,代价是传出的流量经常从客户端发送到错误的路由器,然后在两个路由器之间进行额外的跳跃。

但要获得全部好处,您需要能够完成以下所有操作的软件:

  • 当从两个路由器接收路由器通告时,配置策略路由(或等效路由),以查阅源 IP 地址来决定使用两个路由器中的哪一个作为默认路由的网关。
  • 当应用程序进行 DNS 查找时,会将请求发送到两个 DNS 递归器(每个路由器通告一个),并确保每个 DNS 请求的源 IP 与目标 IP 来自同一个路由器通告。
  • 当收到 DNS 响应时,绑定到发送响应的同一本地 IP,并尝试连接到响应中的某个地址。
  • 使用 RFC 6555 等效逻辑在使用不同的源和目标 IPv6 地址对打开的两个连接之间进行选择。

答案2

不确定当有多个具有相同偏好的 IPv6 地址/路由时端点如何执行此操作。

pfSense 中有一个解决方案:https://docs.netgate.com/pfsense/en/latest/recipes/multiwan-ipv6.html

基本上,你的端点被分配了一个从“主”WAN 委派的前缀,但防火墙可能会选择将你的 IP NAT 为从“辅助”WAN 委派的前缀

相关内容