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