我使用的是 ArchLinux,并在本地家庭网络中运行 IPv6。IPv6-Internet 随我的 fritz.box 一起提供,并且与所有客户端配合良好。
在我的家庭服务器上,我设置了radvd
宣传我的本地 ULA 前缀。
prefix fd04::/64 { #
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
这与 配合得很好::/64
,所有客户端都会得到一些 ULA 地址,比如fd04::aa:bb:cc:dd/64
。
但我真正想要的是“人类可读”的/112
网络,地址如下fd04::abcd
。如果我radvd.conf
改成
prefix fd04::/112 {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
...没有客户端会获得任何 ULA 地址。日志文件指出radvd (909949): eth0 prefix length should be: 64
有谁看到这出了什么问题吗?
我的第二个问题是:我想为一些客户端提供一些静态 ULA 地址。目前,我对客户端进行了硬编码,以便自己获得这些静态地址。但是,我想为我的家庭网络设置一个“小型”DHCPv6 服务器,将这些静态 ULA 分配给客户端(例如,通过识别它们的 MAC 地址)。
我该如何使用 Linux 来设置它?
答案1
我自己研究这些主题时,发现了一个“小型” dhcpv6 服务器:dhcpy6d它确实会根据客户端的 MAC 为其分配地址。您可以灵活地为不同类别的地址配置模式,如果名称服务器是 bind9,它甚至可以执行 DDNS。
这样的模式可能看起来像
pattern = fd04::fab:$id$
,你可以在类中使用它,比如 alpha_client
并且您有一个配置为
[beatles]
hostname = beatles
mac = 11:22:33:aa:bb:cc
class = alpha_client
id = 4
您可以让您的 RA 通告 /64 并仍然提供短地址,例如 fd04::fab:4
运行 DDNS 后,您可以
$ host beatles
beatles.intern has IPv6 address fd04::fab:4
猜想这个例子暴露了我的年龄。该示例忽略了几个相关的 RFC,因此如果发生合并,您可能必须重新编号。
另一件事可能是将 IPv6Token 与 systemd-networkd 一起使用,但这会迫使您在每个客户端上进行配置。