在 Ubuntu 18.04 中路由 IP 地址

在 Ubuntu 18.04 中路由 IP 地址

我整天都在为此绞尽脑汁。基本上,我在私有网络上有几台服务器,每台服务器都分配了一个私有 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地址。

相关内容