IPv6 fe80::(本地链路)地址未分配给 Linux 中新创建的网络接口

IPv6 fe80::(本地链路)地址未分配给 Linux 中新创建的网络接口

当我尝试添加网桥时,它处于 UP 状态,但没有 fe80:: IPv6 地址:

$ ip link add br0 type bridge
$ ip link set br0 up
$ ip address show br0
40: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether c2:c3:09:08:da:5b brd ff:ff:ff:ff:ff:ff

但是当我尝试执行相同操作时,但在网络命名空间内,fe80:: 地址被正常分配:

$ ip netns add nsx
$ ip netns exec nsx ip link add br0 type bridge
$ ip netns exec nsx ip link set br0 up
$ ip netns exec nsx ip address show br0
2: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether aa:45:d1:77:37:b3 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::a845:d1ff:fe77:37b3/64 scope link 
       valid_lft forever preferred_lft forever

我也在虚拟机中测试了,也有同样的问题。

如何使新创建的接口(桥接器或分接器)在启动时具有 fe80:: 地址?

PS:我在主机和虚拟机中都使用 NetworkManager,并且我的内核标志 net.ipv6.conf.all.autoconf 是 1。

答案1

如果针对任何接口ip进行报告state DOWN(您可以看到无携带者在标志中),内核不会分配链路本地 IPv6 地址,因为接口尚未完全激活。您会注意到任何没有对等连接的接口都会出现这种行为(桥接器本质上可以被视为其创建主机的本地接口,如果没有连接任何端口,则可以将其视为缺少连接)。

现在,如果你将电缆连接到物理接口并打开远端或将端口连接到网桥,这实际上意味着你正在建立一个活动链路(ip将要报告state UP)。此时内核会自动为接口分配一个链路本地地址。

如果你需要强制使用 IP 地址,即使在关闭的接口上,也可以先将值 1 分配给它net.ipv6.conf.<interface>.addr_gen_mode,然后将其重置为 0。这将强制内核为其分配一个 IPv6 链路本地地址,而无需插入任何东西(请注意暂定的但是,由于到目前为止还没有进行任何 DAD 检查,所以无法为此链路本地地址设置标志(

相关内容