使用 systemd-networkd 的 IPv6 子网

使用 systemd-networkd 的 IPv6 子网

我的新 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 接口接收的前缀。

相关内容