如何使用 systemd-networkd 添加静态 ipv6 路由

如何使用 systemd-networkd 添加静态 ipv6 路由

我试图通过网络实现与下面的 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

相关内容