Ipv6

帶有 systemd-networkd 的 IPv6 子網

  • August 28, 2020

我的新 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 的那個)

/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 介面接收的前綴。

引用自:https://unix.stackexchange.com/questions/485956