使用静态 IID 在接口上配置 IPv6 地址

使用静态 IID 在接口上配置 IPv6 地址

我正在寻找一种与 rdisc6 非常相似的工具,该工具在收到 RA 后,将使用静态 IID 在接口上配置 v6 地址。这是一台需要位于 ULA 内已知地址的服务器。(不,我不能使用 mDNS 和 SLAAC,因为涉及与名称绑定的证书,并且 mDNS 甚至可能在配置此接口之前都无法工作)。
如果必须,我将扩展 rdisc6,但我希望不要重复别人已经做过的事情。它将在 LXC 容器内的 Linux(armv7)上运行。

答案1

您应该能够为此使用 IPv6 令牌。IPv6 令牌是手动设置的 IID,无论通过 SLAAC 分配的 IPv6 前缀如何,它都保持不变。使用 IPv6 令牌需要 SLAAC。

您可以通过在 NetworkManager 中设置接口属性来持久配置令牌。

# nmcli c mod enp4s0 ipv6.addr-gen-mode eui64
# nmcli c mod enp4s0 ipv6.token ::deca:fbad:c0:ffee

现在带有子网前缀的2001:db8:dead:beef::/64接口将具有 IPv6 地址2001:db8:dead:beef:deca:fbad:c0:ffee

要删除令牌,请将其设置为空值。然后您可以将 addr-gen-mode 重置为其默认值。

# nmcli c mod enp4s0 ipv6.token ''
# nmcli c mod enp4s0 ipv6.addr-gen-mode stable-privacy

使用 systemd-networkd ,IPv6Token=[Network]配置

您也可以ip token手动运行该命令。对于配置容器,这可能是您最终要做的事情。

如果您需要单个接口上的多个 IID,则必须手动设置它们。没有其他方法可以帮助您。

答案2

使用“ip token”的关键原来是接口必须down。

%sudo ifconfig lan down            
%sudo ip token set ::45/64 dev lan 
%sudo ifconfig lan up             
%ifconfig lan
lan: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet6 fe80::1c60:e9ff:fe26:dc74  prefixlen 64  scopeid 0x20<link>
    inet6 2607:f0b0:f:e0::45  prefixlen 64  scopeid 0x0<global>
    inet6 fdba:d505:5c1::45  prefixlen 64  scopeid 0x0<global>
    ether 1e:60:e9:26:dc:74  txqueuelen 1000  (Ethernet)
    RX packets 664833  bytes 85127613 (81.1 MiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 22823  bytes 3091931 (2.9 MiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

相关内容