我读过了在 Debian 上向网络接口添加整个 IPv6 /64 块 我们希望利用任何IP将整个 IPv6 /64 子网块添加到 Web 托管服务器的功能,但使用网络计划因为我们使用的是 Ubuntu 18.04
附注:一些专家建议不要使用 AnyIP 来配置 IPv6,因此我们还将研究替代解决方案,例如手动配置较少数量的 IP。
例如,我们的数据中心已经将 /64 路由到单个 IP,
The range 2001:db8:1:10::0/64 is routed to the IP 2001:db8:1::1:10
The range 2001:db8:1:11::0/64 is routed to the IP 2001:db8:1::1:11
在 Netplan 中,我可以通过这种方式配置单个 IP
network:
version: 2
renderer: networkd
ethernets:
eth0:
accept-ra: no
addresses:
- '2001:db8:1::1:10/48'
- '2001:db8:1:10::0/64'
- '2001:db8:1:10::1/64'
gateway6: '2001:db8:1::1'
这有效。但是我想使用2001:db8:1:10::/64
此服务器上的整个范围,并且不想在 18446744073709551616 行中进行配置。
执行此命令使我能够从外部 ping 所有 /64 IP:
ip -6 route add local 2001:db8:1:10::/64 dev lo
附注:服务器守护进程需要支持IP_FREEBIND
绑定到未在接口上明确配置的 IP。
我的问题是:我不需要在每次重启后执行,而是ip -6 route add local ..
希望在 Netplan Yaml 配置中以正确的方式进行配置。
答案1
找到了一个解决方案,但也许有人知道更好的解决方案?
cat <<EOF > /usr/lib/networkd-dispatcher/routable.d/50-ipv6-block
#!/bin/sh
ip -6 route add local 2001:db8:1:10::/64 dev lo
exit 0
EOF
chmod 755 /usr/lib/networkd-dispatcher/routable.d/50-ipv6-block
检查它是否有效:
ip -6 route del local 2001:db8:1:10::/64
netplan apply
systemctl --no-pager status networkd-dispatcher.service
route -6 | grep 2001:db8:1:10::/64
ping6 -c2 2001:db8:1:10::1234
如果你看到RTNETLINK answers: File exists
这是因为添加了一条已经存在的路线,因为之前的netplan apply
答案2
你提到的任何 IP 解决方案都应该可以完美运行,因为本地路线实际上并不是一条路线,它是允许您使用子网中任何 IP 的标志。因此,请不要将其视为“路由”,此术语在此处无效。本地路由是一种打破“路由”术语的解决方法。