配置继承委托前缀的静态 IPv6 地址

配置继承委托前缀的静态 IPv6 地址

我的 ISP(康卡斯特)委托了一个前缀,我的路由器将前缀委托(pd)传递到 LAN。我的 Debian 机器正在获取前缀并使用 EUI-64 地址附加。这很好,但不太容易记住。我更喜欢在 PD 前缀中有一个额外的“虚荣”地址。

一些特殊性:

  • PD 为(例如 2601:8:abcd:abcd/64)
  • 我的 Linux 机器自动配置 eui-64: 2601:8:abcd:abcd:DEAD:BEff:feEF:CAFE (适用于 MAC DE:AD:BE:EF:CA:FE)

我想要手动创建一个接口:2601:8:abcd:abcd::2 作为静态全局地址,但如果康卡斯特前缀委派发生变化,则让接口采用新的委派前缀并使用静态后缀。

答案1

我认为您正在寻找的是:

ip token set ::dead:beef/64 dev eth0

据我所知,在运行通常运行的任何内容之前,先运行该程序以获取 IP6 地址,然后0:0:dead:beef将使用它来代替正常的 EUI-64。

奇怪的是,这似乎没有添加相应的链路本地地址,而是添加了带有前缀的普通 EUI-64 fe80::/64。您可以使用以下命令手动修复此问题:

ip addr flush scope link dev eth0
ip addr add fe80::dead:beef/64 dev eth0

根据需要替换后缀、前缀大小和接口(::dead:beef/64、 )。eth0

答案2

与此同时,几乎所有 GNU/Linux 发行版都默认使用网络管理器(根据http://news.softpedia.com/news/networkmanager-1-4-adds-support-for-setting-ipv6-tokenized-interface-identifiers-507601.shtml)我认为这是另一个讨论https://unix.stackexchange.com/a/403541/259695可能会有帮助。可以通过以下方式设置令牌

nmcli connection modify eth0 ipv6.method "auto" # if not already
nmcli connection modify eth0 ipv6.addr-gen-mode "eui64" # use interface token
nmcli connection modify eth0 ipv6.token "::dead:beef" # or "::2" - as you like

它将写入IPV6_TOKEN=::dead:beef/etc/sysconfig/network-scripts/ifcfg-eth0 以在重启后继续存在。要立即应用此操作,请通过以下方式重新启动接口:

nmcli connection up id eth0  # restart

答案3

除了宣布网络前缀之外,您还需要使用有状态的 DHCPv6 服务。

与 DHCPv4 类似,DHCPv6 服务器在有状态模式下会为主机分配所需范围内的地址 - 并且该范围可以很小,例如 2601:8:abcd:abcd::10-2601:8:abcd:abcd::99。我一直在使用域名系统在我的路由器中。

通常,除了 DHCPv6 分配的地址外,主机仍将自主生成单播 IPv6 地址 - 每个接口将有两个(甚至更多)地址。您可以通过修改路由器的配置来关闭该行为 - 禁用自主地址配置标志即可。但这也将导致大多数 Android 设备无法获取 IPv6 地址;Android(至少在 KitKat 4.4.4 中)仍然无法正确支持 DHCPv6...

答案4

我不敢相信这个问题还没有得到解答!

伟大的Jürgen 的回答但不适用于使用 networkd 而不是 NetworkManager 来呈现网络的服务器。

对于需要自我调整、半静态 IPv6 的服务器,我们必须添加以下行

ipv6-address-token: "::ace:face"

到 netplan yaml 中的接口描述。例如

network:
  version: 2
  ethernets:
    eth0:
      dhcp4: false
      dhcp6: false
      ipv6-address-token: "::ace:face"
      addresses:
        - <ipv4 static address>
      nameservers: ...

但是,如果启用了 IP 转发,则必须添加以下行以/etc/sysctl.conf覆盖 networkd 禁用的默认设置accept_ra。该逻辑(如果我们是路由器,我们不应该接受来自其他路由器的 ra)是有道理的,但在某些情况下并不适用。

net.ipv6.conf.eth0.accept_ra=2

sysctl conf 中的这一行强制接受路由器公告 (ra),而不管 ip 转发设置如何。这很重要,因为 ra 会告知我们委托的前缀。

netplan 中的 IPv6 地址令牌模板行用于生成 IPv6 地址,该地址使用路由器提供的前缀和我们指定的地址来生成地址。因此,我们最终得到的地址形式为

<delegated prefix>::ace:face/<bit length of netmask>

尽管不是完全静态的,但是是可预测的,并且当前缀改变时我不必重新配置每个服务器。

相关内容