![如何使用 systemd-networkd 添加静态 ipv6 路由](https://linux22.com/image/150936/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20systemd-networkd%20%E6%B7%BB%E5%8A%A0%E9%9D%99%E6%80%81%20ipv6%20%E8%B7%AF%E7%94%B1.png)
我试图通过网络实现与下面的 ip 命令等效的功能,但没有成功。
ip route add default via fe80::1 dev eth0
我的网络配置如下所示,除了默认的 ipv6 路由之外,还成功启动了网络。我尝试添加和删除 GatewayOnLink=yes 但没有成功。启动后运行上面的命令会建立 ipv6 连接,但我更喜欢通过网络配置来执行此操作。
/etc/systemd/network/00-eth0.network
----
[Match]
Name=eth0
[Network]
DHCP=no
DNS=8.8.8.8
[Address]
Label=static-ipv4
Address=X.X.X.X/32
Peer=Y.Y.Y.Y
[Address]
Label=static-ipv6
Address=X:X:X:X::1/64
[Route]
Gateway=fe80::1
Gateway=Y.Y.Y.Y
GatewayOnlink=yes
这是针对 Hetzner 云服务器的,我没有任何其他启用 IPV6 的计算机来排除有关其设置的特定内容。 Systemd 是在 coreos 上运行的版本 238。
答案1
一个块中不能有两个Gateway
指令[Route]
。
来自参考:https://systemd.network/systemd.network.html#%5BRoute%5D%20Section%20Options
指定几个“
[Route]
”部分来配置多个路由。
这对我有用:
[Route]
Gateway=fe80::1
GatewayOnLink=yes
[Route]
Gateway=Y.Y.Y.Y
GatewayOnLink=yes
这样第一个块就添加了一个默认的IPv6路由条目,相当于
ip -6 route add default via fe80::1 proto static
如果您出于某种原因不需要该proto static
部分,请添加Proto=boot
到网络配置(这是 iproute2 的默认配置)。
答案2
这不是我希望接受的答案,因为它涉及网络外部的配置,但它确实使我的 IPv6 路由可靠:
~ $ cat /etc/systemd/system/ipv6-routing.service
[Unit]
Description=Setup ipv6 routing
After=network-online.target
Requires=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/bin/ip route add default via fe80::1 dev eth0
RemainAfterExit=true
[Install]
WantedBy=multi-user.target