我的新 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 重新启动 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]
???
我的服务器正在运行 Debian Stretch 和来自stretch-backports的systemd 239(因为稳定版中的232尚不支持前缀委派)。我删除了如果向上向下包,因为我的目标是学习如何解决这个问题systemd-networkd仅有的。
答案1
我最近几天一直在研究类似的配置。
截至撰写本文时,systemd-networkd 中存在一个错误,它不会在分发前缀的接口上放置委托前缀地址。但是,该接口确实会为网段上的设备提供前缀。
您的外部接口的 IPv6 地址与前缀不匹配是由于您的 ISP 的网络配置所致。我的 ISP 给出了两个不同的 DHCPv6 地址块,其中一个与为委派给出的前缀相同,另一个则不同。当 DHCPv6 租约到期时,它会随机更改。
我使用的配置是从Archlinux 维基 首先,配置“外部”接口(连接到 Fritz!box 的接口)
/etc/systemd/network/EXTERNAL.network
[Match]
...
[Network]
DHCP=yes
IPForward=yes
IPv6AcceptRA=yes
IPv6DuplicateAddressDetection=1
IPv6PrivacyExtensions=kernel
您已有的 eth1 代码看起来是正确的(假设 eth1 是您的外部接口)。在我的配置中,我在接口上启用了 DHCPv4 和 DHCPv6 客户端。
现在您的内部接口应该配置如下:
/etc/systemd/network/INTERNAL.network
[Match]
...
[Network]
IPv6PrefixDelegation=dhcpv6
IPv6DuplicateAddressDetection=1
IPv6PrivacyExtensions=no
LinkLocalAddressing=ipv6
[IPv6PrefixDelegation]
RouterLifetimeSec=3600
这RouterLifetimeSec
很重要,因为它将接口配置为发出从 DHCPv6 接口接收的前缀。