![通过另一个路由器正确获取IPv6](https://linux22.com/image/1421772/%E9%80%9A%E8%BF%87%E5%8F%A6%E4%B8%80%E4%B8%AA%E8%B7%AF%E7%94%B1%E5%99%A8%E6%AD%A3%E7%A1%AE%E8%8E%B7%E5%8F%96IPv6.png)
我的 ISP 是德国 NRW 的 Unitymedia。这是一家有线(类似电视)ISP,它为我提供了一台 Technicolor TC7200 调制解调器/路由器。ISP 使用 DS-Lite,因此我只有一个公共 IPv6 地址,没有 IPv4 地址。这很有效,但调制解调器/路由器的选项非常有限,而且可以远程管理,因此我希望在 ISP 和我的家庭网络之间拥有自己的路由器。
当我刚拥有 TC7200 时,我的计算机具有以下全局 IPv6 地址:
2a02:908:f421:7600:3c4e:c650:974c:ec49/64
2a02:908:f421:7600:f2de:f1ff:fede:a290/64
当我访问类似页面时google.com
,facebook.com
Firefox 插件“IPvFox”显示它们确实通过 IPv6 加载。
现在我买了一个TP-Link WDR3600路由器,并将其设置在我的电脑和调制解调器之间,如下图所示的路由B:
我将 WDR3600 的 WAN 设置为通过 DHCPv6 获取 IPv6 地址。这样就成功了,它获得了一个 IP 地址。然后,它使用 DHCPv6 为连接的设备分配 IPv6 地址。这样也成功了,我在我的计算机上获得了一个 IPv6 地址。从内到外,这些都是整个设备的 IPv6 地址:
2a02:908:f421:7600:f2de:f1ff:fede:a290/128 Computer LAN
2a02:908:f421:7600:ea94:f6ff:fed4:2624/64 WDR3600 LAN
2a02:908:f421:7600::e/64 WDR3600 WAN
2a02:908:f421:7600:ce35:40ff:fee0:9498/64 TC7200 LAN
2a02:908:f400:2:31c9:7cf5:eb4:75e2/128 TC7200 WAN
当我打开时google.com
,它需要很长时间,然后它通过 IPv4 快速加载内容。我假设它尝试通过 IPv6,但超时后失败。facebook.com
加载很快,但也通过 IPv4。
所以我设法打破了 IPv6 连接。我真的很想在 ISP 和我的家庭网络之间有一个由我控制的路由器,但没有 IPv6 连接似乎是个坏主意。
在另一个论坛(德语),有人提到,大多数路由器都存在这种行为。除了运行最新版本 Barrier Breaker 的 OpenWrt 路由器。我可以用原始固件解决吗?他们有一个模拟器在线。您可以进入“IPv6 支持”并查看其所有选项。
答案1
这里缺少一个重要信息:
- 路由器 Technicolor 7200 不支持前缀委派,也不支持桥接 (13.10.14)。它被 Unitymedia Germany 和 KabelBW 禁用。
- 操作两个路由器时需要前缀委派,如下所示(阅读答案 1、2 和 4e,这是来自 CPE,我没有找到实际规格): http://www.psg.com/lists/v6ops/v6ops.2008/msg00086.html
了解 1) 和 2) 后,您必须清楚一件事:由于 TC7200 无法提供前缀委托,并且您无法更改路由器,因此唯一能拯救您的就是某种黑客攻击。我怀疑您的 WDR3600 是否会实施这种黑客攻击(我认为这种黑客攻击不存在,甚至不可能)。
话虽如此,我们至少要讨论一个理论上的解决方案。请记住一件事:ipv6 没有 NAT。
ipv4 可以工作,因为您的路由器知道如何路由它:
- 你的电脑请求一个 ipv4 包。
- 它进入 WDR,WDR 重写源,wiki:“当私有(内部)网络上的计算机向外部网络发送 IPv4 数据包时,NAT 设备会将数据包头(发送方地址)的源字段中的内部 IP 地址替换为 NAT 设备的外部 IP 地址”(Google wikipedia,NAT Translation_of_the_endpoint)
- TC7200 执行相同的操作(然后通过 unitymedias ds-lite 系统进行路由)当它返回时,会发生相反的情况,您的 PC 会收到数据包。
--> NAT 允许数据包穿越所有路由器,因为数据包在每一步都知道要去哪里。
IPv6 协议
- 你的电脑发送了一个 ipv6 包
- 你的路由器可能按原样转发
- TC7200 相同
- 它回来了
- TC7200 无法进一步路由它,因为您的 PC 位于 WDR 后面,而 TC7200 不知道它在那里。它不知道如何进一步路由它。它没有委派其子网,因此它是此子网所有地址的主人。如果它确实委派了其子网,它会将包发送到子网委派到的下一个路由器。它没有理由联系您的路由器。
- 包裹丢弃 --> 没有 NAT 意味着目标必须位于路由器自己的网络中,除非该网络部分被委托给另一个路由器。
因此,您的设置不起作用的原因是:NAT 不存在。TC7200 不知道使用相同子网的其他路由器。
从这个意义上说,我也不同意您发布的 OpenWRT 解决方案:您提到的解决方案在这个帖子中得到了最好的解释(我没有检查解释的有效性,但它确实有道理:URL:unitymediakabelbwforum)
粗略翻译:“OpenWRT 解决方案不桥接接口,而是重用与 WAN 相同的子网前缀(因此也违反了 ipv6 规范)。然后您将在两者之间拥有一个路由器,它有自己的 ipv6 防火墙、自己的 DNS 等。(...) 如果它仅支持前缀委派,那么所有这些都不是必需的。(...)”
说实话,如果没有 OpenWRT 伪造设备或桥接网络(从而破坏路由器背后的整个路由器理念),我不知道这应该如何实现。我看到的唯一可能的解决方案是,如果 OpenWRT 路由器在 WAN 接口上创建一个虚拟桥接接口,其中包含每个 DHCP-v6 客户端的 MAC 地址,并将所有流量 1:1(当然是通过防火墙)路由到桥接 IP。这将使 TC7200 知道这一点。我会向论坛帖子的作者和 OpenWRT 开发人员询问该解决方案。
答案2
现在我再仔细考虑一下,我确信您没有正确配置 WDR3600。您必须将其配置为使用单独的网络前缀在 LAN 上发送路由器广告。经过有根据的猜测,我发现您的路由前缀是 2a02:908:f421:7600::/56。也就是说,您有 256 个子网 ID 可供使用(其中 00 已被使用)。为链接“B”选择另一个子网 ID,并相应地配置路由器。