我正在尝试让 IPv6 在我的本地网络上工作。我知道我的 ISP(Comcast)支持它,因为任何连接到我从他们那里租用的调制解调器/路由器组合的设备都会被分配一个 IPv6 地址并使用该协议进行通信(可以连接到 ipv6.google.com 并获得 20/20http://test-ipv6.com/)。
但是,当我将运行 DD-WRT 的自己的路由器(Netgear WNDR3800,如果相关的话)连接到 Comcast 调制解调器/路由器组合时,所有主机都无法通过 IPv6 进行通信,尽管它们在 Comcast 委派给我的前缀中分配了 IPv6 地址。
它似乎在离开 LAN 之前就失败了。尝试 ping 路由器的 IPv6 地址时返回“目标主机无法访问”。我猜想可能是我在某个地方遗漏了一条路由,但我对 IPv6 或路由不够熟悉,不知道如何测试该理论或如何解决它。
技术细节:
路由器:运行 DD-WRT v24-sp2 的 WNDR3800。其 IPv6 配置如下:
路由器ifconfig:
root@DD-WRT:~# ifconfig
ath1 Link encap:Ethernet HWaddr [redacted]
inet6 addr: fe80::224e:7fff:fe74:13da/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:188122 errors:0 dropped:0 overruns:0 frame:0
TX packets:227134 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:26587839 (25.3 MiB) TX bytes:211385503 (201.5 MiB)
br0 Link encap:Ethernet HWaddr [redacted]
inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::224e:7fff:fe74:13d8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:190093 errors:0 dropped:0 overruns:0 frame:0
TX packets:217213 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:24491040 (23.3 MiB) TX bytes:204922896 (195.4 MiB)
br0:0 Link encap:Ethernet HWaddr [redacted]
inet addr:169.254.255.1 Bcast:169.254.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
eth0 Link encap:Ethernet HWaddr [redacted]
inet6 addr: fe80::224e:7fff:fe74:13d8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1989 errors:0 dropped:0 overruns:0 frame:0
TX packets:21615 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:569599 (556.2 KiB) TX bytes:3297349 (3.1 MiB)
Interrupt:4
eth1 Link encap:Ethernet HWaddr [redacted]
inet addr:10.0.0.59 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: 2601:601:XXXX:XXXX:XXXX:XXXX:XXXX:13d9/64 Scope:Global
inet6 addr: fe80::224e:7fff:fe74:13d9/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:216381 errors:0 dropped:0 overruns:0 frame:0
TX packets:181622 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:202350364 (192.9 MiB) TX bytes:25482727 (24.3 MiB)
Interrupt:5
从连接到路由器的 Windows 8.1 主机运行 ipconfig:
C:\Users\seth>ipconfig
Windows IP Configuration
Wireless LAN adapter Wi-Fi:
Connection-specific DNS Suffix . :
IPv6 Address. . . . . . . . . . . : 2601:601:XXXX:XXXX:XXXX:XXXX:XXXX:75c3
Temporary IPv6 Address. . . . . . : 2601:601:XXXX:XXXX:XXXX:XXXX:XXXX:2b13
Link-local IPv6 Address . . . . . : fe80::18b5:93d6:d9db:75c3%4
IPv4 Address. . . . . . . . . . . : 192.168.2.100
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.2.1
(从输出中删除不相关的接口。lo、VMWare 等)
答案1
根据您的问题和评论中的说明,我们了解到您拥有的是/64
从 ISP 到调制解调器的委托。调制解调器将其用作/64
与 DD-WRT 路由器连接的链接前缀。如果该连接上有交换机(可能内置在调制解调器中),那么您可以将更多设备连接到该链接。
您没有的是委托给 DD-WRT 的前缀。前缀委托得还不够。
您已在 DD-WRT 配置中手动输入前缀,就好像它已被委托一样。但事实并非如此,因此您实际上已将连接到 DD-WRT 的所有设备配置为伪造不属于它们所连接的网段的 IP 地址。也许它们能够将数据包发送到互联网,但它们永远不会得到响应。
如何解决
您有几个选择。最干净的解决方案是进行多层前缀委派。ISP 应该将较短的前缀委派给您的调制解调器。对于您描述的用法,前缀的长度无关紧要,只要它是 1/63
或更短即可。对于以下示例,我将假设 ISP 已委派2001:db8:feed::/48
给您的调制解调器。
调制解调器可以将 分成/48
子网络,并向 发送路由器广告,2001:db8:feed::/64
并将其委托2001:db8:feed:100::/56
给 DD-WRT。然后 DD-WRT 可以使用该委托向 发送路由器广告。这样两个路由器都会有充足的空闲地址空间块,它们可以再委托或用于其他接口。例如,如果您的以太网具有多个 VLAN 或 WiFi 具有多个 SSID,则DD-WRT 可以向其发送路由器广告的2001:db8:feed:100::/64
总数为 256 个。/64
如果调制解调器不支持怎么办
据我所知,多层前缀委派并未得到广泛支持。因此,如果您的调制解调器不支持它,则上述解决方案将不起作用。您的 ISP 也可能会忽略有关委派前缀长度的 RFC,并且只在/64
他们应该给您更短的前缀时才给您,在这种情况下,您也无法使用上面解释的解决方案。但还有另一种选择。
如果您将两个路由器之一配置为网桥而非路由器,则 LAN 和互联网之间的路径上 IP 段会少一个。这意味着您只需一个/64
委托即可获得有效的配置,并且您只需要一层前缀委托,因此不再需要支持多层前缀委托。
从你的问题来看,你可能需要桥接调制解调器。然后 ISP 可以直接将前缀委托给你的 DD-WRT 路由器,然后路由器可以在 LAN 上使用该前缀。