我的新 ISP 给了我一个带有 /56 前缀的公共 IPv6 地址来玩:
2001:b:c:d:5:6:7:8/56
我想创建两个由 linux 服务器划分的子网,如下所示:
internet - fritzbox - server - pc
但我需要了解如何将前缀传播到内部子网。到目前为止,我将服务器的外部接口配置为接受路由器广告并从 Fritz!Box 请求 IPv6 前缀:
/etc/systemd/network/eth1.network
[Match]
Name=eth1
[Network]
DHCP=ipv6
IPv6AcceptRA=yes
IPv6PrefixDelegation=dhcpv6
IPForward=yes
在systemctl restart systemd- networkd 后,外部接口得到一个地址:
ip -6 addr
...
inet6 2001:b:e:f:1:2:3:4/64 scope global noprefixroute dynamic
到目前为止这是正确的吗?同样令人困惑的是:互联网连接的前缀和接口的前缀在后半部分不同:
internet: 2001:b:c:d::
server: 2001:b:e:f::
现在的主要问题是:如何配置内部接口?它可以从 Fritz!Box 请求另一个前缀吗?
/etc/systemd/network/eth0.network
[Match]
Name=eth0
[Network]
???
我的服务器正在使用来自 stretch-backports 的 systemd 239 运行 Debian stretch(因为 stable 中的 232 尚不支持前缀委托)。我删除了ifupdown包,因为我的目标是学习如何仅使用systemd-networkd来解决这个问题。
最近几天我一直在研究类似的配置。
在撰写本文时,systemd-networkd 中存在一个错误,它不会在分发前缀的接口上放置委托前缀地址。但是,该接口确实会为网段上的设备提供前缀。
您的外部接口的 IPv6 地址与前缀不匹配是由于您的 ISP 的网络配置所致。我的 ISP 给出了两个不同的 DHCPv6 地址块,其中一个与为委派提供的前缀相同,另一个不是。当 DHCPv6 租约到期时,它会随机更改。
我使用的配置是从Archlinux Wiki获得的 首先你配置你的“外部”接口(连接到 Fritz!box 的那个)
您已经拥有的 eth1 代码看起来是正确的(假设 eth1 是您的外部接口)。在我的配置中,我在接口上启用了 DHCPv4 和 DHCPv6 客户端。
现在你的内部接口应该这样配置:
这
RouterLifetimeSec
很重要,因为它将接口配置为发出它从 DHCPv6 接口接收的前缀。