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