ipv6 地址自动配置问题

ipv6 地址自动配置问题

我正在尝试让我的 Linux 系统使用无状态自动配置 (slaac) 在接口上自动配置 IP 地址。状态使用 DHCPv6 自动配置效果很好。

  1. 我首先为适当的网络添加一个 VLAN 接口:

    ip link add link eth0 name vlan10 type vlan id 10
    

    这让我:

    $ ip addr show vlan10
    822: vlan10@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether 2c:f0:5d:c9:12:a9 brd ff:ff:ff:ff:ff:ff
    
  2. 接下来,我accept_ra为此接口启用 sysctl:

    # sysctl -w net.ipv6.conf.vlan10.accept_ra=2
    net.ipv6.conf.vlan10.accept_ra = 2
    
  3. 我使用随机生成的地址将链接本地地址添加到接口:

    ip addr add fe80::b04f:6d05:d302:266d/64 dev vlan10 scope link
    

    这样我就有:

    827: vlan10@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether 2c:f0:5d:c9:12:a9 brd ff:ff:ff:ff:ff:ff
        inet6 fe80::b04f:6d05:d302:266d/64 scope link
           valid_lft forever preferred_lft forever
    

此时,接口已启动,它具有有效的链路本地地址,并且我可以使用其链路本地地址 ping IPv6 路由器:

# ping -c2 fe80::7a8a:20ff:febb:5db%vlan10
PING fe80::7a8a:20ff:febb:5db%vlan10(fe80::7a8a:20ff:febb:5db%vlan10) 56 data bytes
64 bytes from fe80::7a8a:20ff:febb:5db%vlan10: icmp_seq=1 ttl=64 time=0.395 ms
64 bytes from fe80::7a8a:20ff:febb:5db%vlan10: icmp_seq=2 ttl=64 time=0.336 ms

--- fe80::7a8a:20ff:febb:5db%vlan10 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1062ms
rtt min/avg/max/mdev = 0.336/0.365/0.395/0.029 ms

我已将路由器配置为发送路由器通告。我可以确认这是有效的,因为 Linux 系统已经选择了正确的 IPv6 默认路由:

# ip -6 route | grep vlan10
2001:470:1234:1234::/110 dev vlan10 proto kernel metric 256 expires 2591803sec pref medium
fe80::/64 dev vlan10 proto kernel metric 256 pref medium
default via fe80::7a8a:20ff:febb:5db dev vlan10 proto ra metric 1024 expires 1603sec hoplimit 64 pref medium

但系统不会获取该vlan10接口的 IPv6 地址。

路由器上相应的链接如下所示:

# ip addr show switch0.10
14: switch0.10@switch0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 78:8a:20:bb:05:db brd ff:ff:ff:ff:ff:ff
    inet6 2001:470:1234:1234::1/110 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::7a8a:20ff:febb:5db/64 scope link
       valid_lft forever preferred_lft forever

看起来/etc/radvd.conf像:

interface switch0.10 {
    IgnoreIfMissing on;
    AdvOtherConfigFlag off;
    AdvRetransTimer 0;
    MinRtrAdvInterval 198;
    AdvManagedFlag off;
    MaxRtrAdvInterval 600;
    AdvLinkMTU 0;
    AdvReachableTime 0;
    AdvDefaultPreference medium;
    AdvDefaultLifetime 1800;
    AdvSendAdvert on;
    AdvCurHopLimit 64;
    prefix 2001:470:1234:1234::/110 {
        AdvAutonomous on;
        AdvValidLifetime 2592000;
        AdvPreferredLifetime 604800;
        AdvOnLink on;
    };
};

是什么阻止我的系统在此接口上自动配置 IPv6 地址?

答案1

谢谢@[电子邮件受保护]

@larsks 2001:470:1234:1234::/110 需要是 2001:470:1234:1234::/64。

SLAAC 仅指定在 /64s 上工作(RFC 4862 和 4291)。

是的:已经尝试过改变这一点。对于逐底竞争的担忧和其他问题已经引起了广泛的争论; /64 正在帮助叶子网络获得有用的最小空间量。

旁白:移动电话的型号为每部电话 /64,允许 IPv6 网络共享(通过 64share 等)。更多类似的内容正在开发中。

@larsks 如果有任何用处,请随意将其复制到 stackexchange 中。

环顾四周,仿佛RFC 7421对这个具体情况有一个非常清晰的概述。

相关内容