如何使用 systemd-networkd 添加 IPv6 路由并从有限子网中选择源地址

如何使用 systemd-networkd 添加 IPv6 路由并从有限子网中选择源地址

长话短说

在 systemd-networkd.network文件的[Route]部分中,我应该为该选项添加什么PreferredSource=内容以使其选择任何可用的 IP 地址,只要它位于特定子网内,例如fc00::/7

细节

我有一台传输 IPv6 多播流量的计算机,但是我希望数据包源自属于内部网络的 IP 地址,而不是其全局 IP。这是因为计算机设有防火墙,只允许来自内部 IP 的数据包进入,因此来自全局 IP 的任何多播数据包都会被丢弃。

它从全局IP发送数据包的原因(我认为)是由于路由规则中没有设置特定的源地址,并且内核恰好选择了全局IP:

$ ip route get ff05::02
multicast ff05::2 from :: dev eth1 table local proto static src 2001:db8::1 metric 100 pref medium

在这里,我不希望它发送多播数据包,而是发送位于“站点本地”子网2001:db8::1内的计算机已分配的任何 IP 地址。fc00::/7

该路由是通过 systemd-networkd 设置的,以便我可以指定多播流量应使用哪个网络接口退出计算机。我已经在文件中使用以下内容完成了此操作.network

[Match]
Name=eth1

[Route]
Type=multicast
# Send all multicast traffic out of this NIC.
Destination=ff00::/8
Metric=100
Table=local
#PreferredSource=  <-- what goes here?

如果我使用该PreferredSource地址并输入机器的内部IP,则源IP设置正确,并且内部IP用于多播流量,这正是我想要的。

但是,由于我使用的是 IPv6 无状态自动配置,并且该.network文件在多个主机之间共享,因此我无法对参数中的 IP 地址进行硬编码PreferredSource

我需要某种方法来选择属于特定子网的任何 IP 地址,并将其作为源地址 - 类似PreferredSource=fc00::/7.由于您无法将子网传递给此参数,有没有办法做到这一点?

相关内容