IPv6 PPP链路无法将路由器通告转发到本地局域网

具有eth0eth1 Debian服务器。 eth2ppp0设备:

 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether xx:yy:zz:yy:xx:yy brd ff:ff:ff:ff:ff:ff 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether xx:yy:zz:yy:xx:yy brd ff:ff:ff:ff:ff:ff 4: eth2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000 link/ether xx:yy:zz:yy:xx:yy brd ff:ff:ff:ff:ff:ff 63: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1492 qdisc pfifo_fast state UNKNOWN qlen 3 link/ppp 

转发function无处不在:

 /proc/sys/net/ipv6/conf ~ all/forwarding=1 default/forwarding=1 eth0/forwarding=1 eth1/forwarding=1 eth2/forwarding=1 ppp0/forwarding=1 

并且autoconf也被激活:

 /proc/sys/net/ipv6/conf ~ all/autoconf=1 default/autoconf=1 eth0/autoconf=0 eth1/autoconf=1 eth2/autoconf=1 ppp0/autoconf=1 

进一步的RA (=路由器通告)在任何设备上被接受,但是为了在ppp0eth1设置accept_ra = 2

 /proc/sys/net/ipv6/conf ~ all/accept_ra=1 default/accept_ra=1 eth0/accept_ra=1 eth1/accept_ra=2 eth2/accept_ra=0 lo/accept_ra=1 ppp0/accept_ra=2 

PPP连接build立成功,在/ etc / ppp / peer / myProviderconfiguration文件中设置了ipv6 :: dead:beef选项:

 63: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1492 qlen 3 inet6 2003:42:e67f:d3ca:6105:155:f2b3:71f0/64 scope global temporary dynamic valid_lft 14266sec preferred_lft 1666sec inet6 2003:42:e67f:d3ca::dead:beef/64 scope global dynamic valid_lft 14266sec preferred_lft 1666sec inet6 fe80::dead:beef/10 scope link valid_lft forever preferred_lft forever 

并且设置提供商的链路本地地址的默认路由:

 2003:42:e67f:d3ca::/64 dev ppp0 proto kernel metric 256 expires 13559sec fe80::/64 dev ppp0 proto kernel metric 256 fe80::/10 dev ppp0 metric 1 fe80::/10 dev eth1 proto kernel metric 256 fe80::/10 dev ppp0 proto kernel metric 256 fe80::/10 dev eth0 metric 1024 default via fe80::90:1a10:1b2:b780 dev ppp0 proto kernel metric 1024 expires 1789sec 

public 2003:42:e67f:d3ca::/64前缀具有到ppp0设备的路由。 radvd安装并运行, radvdump显示ppp0 IPv6链路发送RA

 interface ppp0 { AdvSendAdvert on; # Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump AdvManagedFlag off; AdvOtherConfigFlag on; AdvReachableTime 0; AdvRetransTimer 0; AdvCurHopLimit 0; AdvDefaultLifetime 1800; AdvHomeAgentFlag off; AdvDefaultPreference medium; AdvLinkMTU 1492; prefix 2003:42:e67f:d3ca::/64 { AdvValidLifetime 14400; AdvPreferredLifetime 1800; AdvOnLink on; AdvAutonomous on; AdvRouterAddr off; }; # End of prefix definition }; # End of interface definition 

在服务器主机上,我可以成功地从互联网ping一台主机。 现在,当我尝试通过请求路由器为ppp0强制RA时 ,我得到:

 Soliciting ff02::2 (ff02::2) on ppp0... Hop limit : undefined ( 0x00) Stateful address conf. : No Stateful other conf. : Yes Router preference : medium Router lifetime : 1800 (0x00000708) seconds Reachable time : unspecified (0x00000000) Retransmit time : unspecified (0x00000000) MTU : 1492 bytes (valid) Prefix : 2003:42:e67f:d3ca::/64 Valid time : 14400 (0x00003840) seconds Pref. time : 1800 (0x00000708) seconds 

我期望的是, eth1上的所有节点都configuration了SLAAC,但是当我尝试在eth1请求时,我得到:

 Soliciting ff02::2 (ff02::2) on eth1... Timed out. Timed out. Timed out. No response. 
  • 我不想使用DHCPv6,但通过radvd SLAAC
  • 我想避免bash kung fu从提供者(例如:从rdisc6输出)切割实际的前缀来调整我自己的radvd.conf文件(例如:在if-up事件中)
  • 桥接设备不是解决scheme。 PPP设备是虚拟的,不能被桥接。

不知何故,从ppp0eth1 (以及任何其他设备)转发RA数据包似乎根本不起作用。 为什么? 据我所知,任何DSL调制解调器的路由器都必须以某种方式将RA从内部调制解调器设备转发到所连接的物理LAN端口,否则在那里连接的任何主机都不会获得IPv6地址,对吧? 现在路由器和我的debian盒之间的区别在哪里? 我会感激你的任何提示。

路由器广告不应该被转发。 所以当你发现他们没有被转发时,那么至less那部分是按照预期工作的。

你应该在你的路由器上运行你自己的路由器通告守护进程,这样它就可以把自己通告给局域网。

您的三个LAN应该有三个单独的/ 64前缀。 所以你需要从你的ISP路由/ 62或更短。 这是没有问题的,因为你的ISP应该给你一个较短的前缀(这个短取决于你问的对象,原来是/ 48,但是有些只能提供一个/ 56)。

如果在ppp链路上有一个DHCPv6服务器可用,则可以发送一个DHCPv6请求,要求将一个前缀委托给您。 否则,你可能不得不实际与一个人交谈。

这种IP设置的结构通常是:

  • 您通过ppp0接收到一个RA,以便您的系统获取默认路由和可选的前缀
  • 您在系统上运行DHCPv6-PD客户端以从ISP请求可路由的前缀
  • 您使用该前缀中的/ 64来为您的其他接口编号
  • 您可以使用radvd将RA发送到本地接口,让其他系统知道您的ipv6networking是如何configuration的
  • 你不会把RA发给ppp0,因为你不是ISP的路由器,他们的身边是你的路由器