我整天都在为此绞尽脑汁。基本上,我在私有网络上有几台服务器,每台服务器都分配了一个私有 IPv6 地址,并分配了一个公共 IPv4 和 IPv6。我希望这些服务器只使用它们的私有 IPv6 地址相互通信。
我已经使用 Netplan 设置了 IP 地址,但现在正在尝试设置路由,以便如果服务器 A 尝试与服务器 B 通信,则可以通过服务器 A 的私有 IPv6 进行通信不是通过分配给服务器的任何其他 IP。
这是我目前的 Netplan 配置文件(为了安全起见,我已经将部分 IP 地址 XXX 掉):
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
dhcp6: no
addresses:
- 139.XXX.XXX.132/24
- "2a01:XXXX::XXXX:XXXX:XXXX:0f9c/64"
gateway4: 139.XXX.XXX.1
gateway6: "fe80::1"
routes:
- to: "2a01:XXXX:e000:01e6:1111:1111:1111:1111/64"
via: "2a01:XXXX:e000:01e5:1111:1111:1111:1111/64"
on-link: true
- to: "2a01:XXXX:e000:01e7:1111:1111:1111:1111/64"
via: "2a01:XXXX:e000:01e5:1111:1111:1111:1111/64"
on-link: true
- to: "2a01:XXXX:e000:01e8:1111:1111:1111:1111/64"
via: "2a01:XXXX:e000:01e5:1111:1111:1111:1111/64"
on-link: true
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
ip route list
我遇到的问题是,当我执行命令或时,路线没有显示ip -6 route show
。
任何帮助都将不胜感激。我对网络和 Netplan 还很陌生,并且对官方文档感到很困惑。
答案1
由于您的路由是 IPv6,ip -6 route show
因此您应该使用ip route list
仅显示您的 netplan 中没有的 IPV4 路由。
ip -6 route add ipv6network/prefixlength via ipv6address
答案2
via: "2a01:XXXX:e000:01e5:1111:1111:1111:1111/64"
是错误的语法。“via”采用路由器的主机地址,而不是网络地址(当您附加网络掩码时 - 即/64 - 它是网络地址而不是主机地址)。
您还将 表示"2a01:XXXX:e000:01e6:1111:1111:1111:1111/64"
为to
,这是不规则的。通常,人们会将屏蔽位留空(即 0),只写"2a01:XXXX:e0000:01e6::/64"
。我不知道 networkd 是否关心这一点,但它可能会关心,而且无论如何,最好使用规范化形式。
我也能够在容器中重现这一点:
network:
version: 2
ethernets:
eth0:
dhcp4: true
dhcp6: no
addresses:
- "2a01:1234::1111:1111:1111:0f9c/64"
routes:
- to: "2a01:1234:e000:01e6:1111:1111:1111:1111/64"
via: "2a01:1234:e000:01e5:1111:1111:1111:1111/64"
on-link: true
netplan apply
成功。 journalctl --no-pager -lu systemd-networkd
显示以下错误:
Feb 25 20:19:20 gnss-sdr systemd-networkd[694]: /run/systemd/network/10-netplan-eth0.network:9: Route is invalid, ignoring assignment: 2a01:1234:e000:01e5:1111:1111:1111:1111/64
Feb 25 20:19:20 gnss-sdr systemd-networkd[694]: Route section without Gateway field configured in /run/systemd/network/10-netplan-eth0.network. Ignoring
显然,您知道此路由与主机地址的网络掩码不匹配,这就是您将 添加on-link: true
到配置中的原因;但即使设置了此设置,GatewayOnlink=true
在 networkd 的配置输出中生成/run/systemd/network/10-netplan-eth0.network
,networkd 仍拒绝应用此路由。我不知道我们是否应该期望它与 networkd 一起工作,但它应该可以工作,或者 systemd.network(5) 手册页应该记录它不工作,并且 netplan 应该拒绝接受此 yaml。我建议提交针对 netplan 的错误报告。
为了解决此行为(并给出在路由规则方面通常更容易理解的结果),您应该在 2a01:XXXX:e000:01e5::/64 网络上为本地计算机添加一个附加地址,以便 2a01:XXXX:e000:01e5:1111:1111:1111:1111 网关可访问,或者在 2a01:XXXX:e000:01e5:1111:1111:1111:1111 网关在 2a01:XXXX::/64 网络上为 2a01:XXXX:e000:01e5:1111:1111:1111:1111 网关提供一个附加地址,并将其用作您的via
地址。