IPv6 PPP 链路无法将路由器广告转发到本地 LAN

3ro*_*nco 1 ipv6 forwarding point-to-point-protocol icmpv6

Debian 服务器具有eth0, eth1. 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
Run Code Online (Sandbox Code Playgroud)

到处都启用转发:

/proc/sys/net/ipv6/conf ~
  all/forwarding=1  default/forwarding=1
 eth0/forwarding=1     eth1/forwarding=1
 eth2/forwarding=1     ppp0/forwarding=1
Run Code Online (Sandbox Code Playgroud)

并且 autoconf 也被激活:

/proc/sys/net/ipv6/conf ~
  all/autoconf=1     default/autoconf=1
 eth0/autoconf=0        eth1/autoconf=1
 eth2/autoconf=1        ppp0/autoconf=1
Run Code Online (Sandbox Code Playgroud)

进一步RA(=路由器通告)被接受的任何装置上,而是设置accept_ra = 2 在真皮休闲ppp0eth1

/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
Run Code Online (Sandbox Code Playgroud)

PPP 连接成功建立,在/etc/ppp/peer/myProvider配置文件中设置了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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

从服务器主机,我可以成功地从 Internet ping6主机。现在,当我尝试通过请求路由器来强制RA 时ppp0我得到:

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
Run Code Online (Sandbox Code Playgroud)

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

Soliciting ff02::2 (ff02::2) on eth1...
Timed out.
Timed out.
Timed out.
No response.
Run Code Online (Sandbox Code Playgroud)
  • 我不想使用DHCPv6而是SLAAC通过radvd
  • 我想避免 bash kung fu 从提供程序(例如:从rdisc6 输出)中切割实际前缀以自行调整radvd.conf文件(例如:在 if-up 事件中)
  • 桥接设备不是解决方案。PPP 设备是虚拟的,无法桥接。

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

kas*_*erd 5

不应转发路由器广告。因此,当您发现它们没有被转发时,至少该部分按预期工作。

您应该在您的路由器中运行您自己的路由器广告守护程序,以便它向 LAN 广告自己。

您的三个 LAN 应该有三个单独的 /64 前缀。因此,您需要从 ISP 获得路由 /62 或更短的路由。这没有问题,因为您的 ISP 应该为此目的给您一个较短的前缀(多短取决于您问谁,最初是 /48,但有些人只会分发 /56)。

如果 ppp 链接上有 DHCPv6 服务器可用,则您可以发送 DHCPv6 请求,要求将前缀委派给您。否则,您可能必须真正与人交谈。