为什么路由器2无法访问互联网?

为什么路由器2无法访问互联网?
       __
     _/  \____
    /         \__
   /  Internet   \
   \_____________/
         |
    ------------
    + Router 1 +
    ------------
         |
    ------------
    + Router 2 +
    -------------
         |
        ...
  Internal Network
        ...

我正尝试使用 Hurricane Electric 在我的家庭网络上创建 6in4 隧道来学习 ipv6。我的物理设置如上图所示。

我读过几本 ipv6 入门指南和各种教程(特别是:12),并拼凑了有关如何执行路由的信息。

路由器 1 和 2 是相当简单的设备,安装了 busybox(尽管路由器 2 的功能比路由器 1 更强大一些)。

在路由器 1 上,我发出了以下命令:

HURR_ELEC_IPV4_SERVER=A.B.C.D
MY_WAN_IP_ADDR=E.F.G.H
HURR_ELEC_IPV6_CLIENT=XXXX:YYYY:ZZZZ:WWWW::2
HURR_ELEC_IPV6_SERVER=XXXX:YYYY:ZZZZ:WWWW::1
HURR_ELEC_IPV6_ROUTED_48=XXXX:YYYY:NNNN

ip tunnel add he-ipv6 mode sit remote $HURR_ELEC_IPV4_SERVER local $MY_WAN_IP_ADDR ttl 255
ip link set he-ipv6 up
ip addr add $HURR_ELEC_IPV6_CLIENT/64 dev he-ipv6
ip route add default via $HURR_ELEC_IPV6_SERVER dev he-ipv6
ip addr add $HURR_ELEC_IPV6_ROUTED_48::1/64 dev br0

#in my /var/radvd.conf file:

interface br0 {
  AdvSendAdvert on;
  AdvManagedFlag on;
  AdvOtherConfigFlag on;
  AdvLinkMTU 0;
  MinRtrAdvInterval 20;
  MaxRtrAdvInterval 60;
  AdvDefaultLifetime 0;

  prefix $HURR_ELEC_IPV6_ROUTED_48::/64
  {
  };
};

在路由器 1 上,我终止了 radvd 进程,然后手动重新启动它。此时,路由器 1 能够运行ping6 ipv6.google.com并得到结果:

/ # ping6 ipv6.google.com
resolve success!
PING ipv6.google.com(2607:f8b0:4004:811::200e) 56 data bytes
64 bytes from 2607:f8b0:4004:811::200e: icmp_seq=1 ttl=57 time=18.3 ms
64 bytes from 2607:f8b0:4004:811::200e: icmp_seq=2 ttl=57 time=13.4 ms
64 bytes from 2607:f8b0:4004:811::200e: icmp_seq=3 ttl=57 time=17.7 ms
64 bytes from 2607:f8b0:4004:811::200e: icmp_seq=4 ttl=57 time=11.6 ms
...

路由器2是Netgear路由器,有一个Auto Config选项,使用该模式时,成功从路由器1获取IPv6地址,之后Auto Config相关IP地址和ipv6路由表如下:

user@Router2:/# ip -6 addr show
...
9: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
    inet6 fe80::KKKK:LLLL:MMMM:OOOO/64 scope link
       valid_lft forever preferred_lft forever
10: brwan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
    inet6 XXXX:YYYY:NNNN:0:KKKK:LLLL:MMMM:JJJJ/64 scope global dynamic
       valid_lft 2591980sec preferred_lft 604780sec
    inet6 fe80::KKKK:LLLL:MMMM:JJJJ/64 scope link
       valid_lft forever preferred_lft forever
...

user@Router2:/# ip -6 route show
XXXX:YYYY:NNNN::/64 dev brwan  proto kernel  metric 256  expires 2591969sec
...
fe80::/64 dev brwan  proto kernel  metric 256
fe80::/64 dev br0  proto kernel  metric 256

路由器 2 现在可以 ping 路由器 1 的 br0 接口:

user@Router2:/# ping6 XXXX:YYYY:NNNN::1
PING XXXX:YYYY:NNNN::1 (XXXX:YYYY:NNNN::1): 56 data bytes
64 bytes from XXXX:YYYY:NNNN::1: seq=0 ttl=64 time=7.225 ms
64 bytes from XXXX:YYYY:NNNN::1: seq=1 ttl=64 time=0.655 ms
64 bytes from XXXX:YYYY:NNNN::1: seq=2 ttl=64 time=0.673 ms
64 bytes from XXXX:YYYY:NNNN::1: seq=3 ttl=64 time=0.674 ms

但是,路由器 2 无法 ping 通路由器 2 的 brwan 接口(Hurricane Electric 的客户端地址):

user@Router2:/# ping6 XXXX:YYYY:ZZZZ:WWWW::2
PING XXXX:YYYY:ZZZZ:WWWW::2 (XXXX:YYYY:ZZZZ:WWWW::2): 56 data bytes
ping6: sendto: Network is unreachable

通过路由器 1 的 br0 接口地址添加静态路由后,路由器 2 可以 ping 通路由器 1 的 brwan 接口:

user@Router2:/# ip -6 route add ::/0 via XXXX:YYYY:NNNN::1 dev brwan
user@Router2:/# ping6 XXXX:YYYY:ZZZZ:WWWW::2
PING XXXX:YYYY:ZZZZ:WWWW::2 (XXXX:YYYY:ZZZZ:WWWW::2): 56 data bytes
64 bytes from XXXX:YYYY:ZZZZ:WWWW::2: seq=0 ttl=64 time=10.858 ms
64 bytes from XXXX:YYYY:ZZZZ:WWWW::2: seq=1 ttl=64 time=0.660 ms
64 bytes from XXXX:YYYY:ZZZZ:WWWW::2: seq=2 ttl=64 time=0.647 ms

以我有限的理解,我会认为路由器 1 能够连接到互联网,因为它能够访问路由器 1 的 brwan 上的 Hurricane Electric 客户端接口 IP 地址,并且 brwan 知道如何穿越 HE 隧道连接到互联网。

然而,当我 ping Google 时,什么也没有发生:

user@Router2:/# ping6 ipv6.google.com
PING ipv6.google.com (2607:f8b0:4004:807::200e): 56 data bytes
^C^C
--- ipv6.google.com ping statistics ---
47 packets transmitted, 0 packets received, 100% packet loss

user@Router2:/# traceroute6 -v ipv6.google.com
traceroute to ipv6.google.com (2607:f8b0:4004:800::200e), 30 hops max, 16 byte packets
 1  XXXX:YYYY:NNNN::1 (XXXX:YYYY:NNNN::1) 32 bytes to XXXX:YYYY:NNNN:0:KKKK:LLLL:MMMM:JJJJ  0.455 ms  0.467 ms  0.420 ms
 2  *
56 bytes from (Router 1's br0 interface Link-Local addr) to ff02::1: icmp type 134 (Router Advert) code 0
0000: 00000000 00000000 030440c0 00278d00
0010: 00093a80 00000000 20010470 8c810000
0020: 00000000 00000000 010170f1 961dd439
  *  *
 3  *  *  *
 4  *  *
56 bytes from (Router 1's br0 interface Link-Local addr) to ff02::1: icmp type 134 (Router Advert) code 0
0000: 00000000 00000000 030440c0 00278d00
0010: 00093a80 00000000 20010470 8c810000
0020: 00000000 00000000 010170f1 961dd439
^C
user@Router2:/#

为什么路由器2无法访问互联网?

更新:

根据@grawity,我将/var/radvd.conf其改为:

interface br0 {
  AdvSendAdvert on;

  prefix XXXX:YYYY:NNNN::/64
  {
  };
};

现在,路由器 2 自动分配了一条默认路由(即路由器 1 上 br0 接口的本地链路 fe80 地址)。但是,路由器 2 仍然无法访问互联网。

答案1

您的路由器广告有AdvDefaultLifetime 0,记录如下:

与默认路由器关联的生存期(以秒为单位)。最大值对应于 18.2 小时。生存期为 0 表示路由器不是默认路由器,不应出现在默认路由器列表中。

因此,Router2 不会根据通告配置默认路由。


我建议从选项之外AdvSendAdvert on,因为它们中的大多数在环境中似乎没有必要然而。例如,只有当您还运行 DHCPv6 时,这两个标志才有意义。

话虽如此,你也许会需要将来,为了实现前缀委派并允许 Router2 获取自己的 /64 子网,因为它无法通过纯 SLAAC 实现这一点,因此将来可能会使用 DHCPv6。由于 IPv6 路由器通常不执行 NAT,每个无论您是否尝试堆叠它们,它们都需要自己的 /64。

相关内容