我尝试过的事情

我尝试过的事情

假设允许在节点上添加路由,我该如何设置持久 IP 路由?目前,当我使用:

ip route add {NETWORK/MASK} via {GATEWAYIP}

每次网络重启后它都会被删除。

我在用system-networkd

我尝试过的事情

使用 netplan

在文件夹中/etc/netplan我只有文件50-cloud-init.yaml(云提供商是 OpenStack):

# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    version: 2
    ethernets:
        ens3:
            ...
            routes:
                - to: {NETWORK/MASK}
                  via: {GATEWAYIP}
                  on-link: true

它提到它不是持久性的,但添加路由和重新加载也没有添加路由。日志记录没有显著变化。

使用 systemd/network 配置

添加文件ens3.network添加/etc/systemd/network

[Match]
Name=ens3

[Route]
Destination={NETWORK/MASK}
Gateway={GATEWAYIP}
GatewayOnlink=yes

[Route]
Destination={NETWORK/MASK}
Gateway={GATEWAYIP}
GatewayOnlink=yes

检查时这不会引发任何错误sudo journalctl -u systemd-networkd,但也没有实现我想要的效果,因为我没有看到任何变化。

记录结果

Mar 09 12:19:25 node systemd[1]: Starting Network Configuration...
Mar 09 12:19:25 node systemd-networkd[33690]: /run/systemd/network/10-netplan-ens3.network: MTUBytes= in [Link] section and UseMTU= in [DHCP]>
Mar 09 12:19:25 node systemd-networkd[33690]: ens3: Link UP
Mar 09 12:19:25 node systemd-networkd[33690]: ens3: Gained carrier
Mar 09 12:19:25 node systemd-networkd[33690]: lo: Link UP
Mar 09 12:19:25 node systemd-networkd[33690]: lo: Gained carrier
Mar 09 12:19:25 node systemd-networkd[33690]: ens3: Gained IPv6LL
Mar 09 12:19:25 node systemd-networkd[33690]: Enumeration completed
Mar 09 12:19:25 node systemd[1]: Started Network Configuration.

答案1

看起来你正在运行netplan(参见日志输出的第二行),它会在/run/systemd/network/systemd-networkd使用的配置文件,这意味着您的文件/etc/systemd/network/ens3.network被忽略了。

最简单的方法是直接在配置中添加路由netplan/etc/netplan/...):

network:
  ethernets:
    ens3:
      ...
      routes:
        - to: {NETWORK/MASK}
          via: {GATEWAYIP}
          on-link: true

(你应该已经有一个包含前面几行的文件routes,你只需要添加routes部分添加到ens3网络即可)。

更新(阅读您的更新和评论后)

您说只要更改 ,它就会为您工作/run/systemd/network/10-netplan...。即使这有效,我也不建议将其保留在那里,因为它/run可以在任何重启时更新,并由 netplan 重新创建(不确定它为什么不这样做 - 您真的尝试过重启吗,还是只是尝试systemctl restart systemd-networkd.service?后者会起作用,但如果您重启,我希望这也会恢复)。

直接将更改添加到 netplan 显然不起作用,因为根据您的更新,您似乎正在某个云中运行它,该云会动态重新创建 netplan 文件。您可以按照顶部注释的方式禁用此更新,基本上就是创建一个/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg包含内容的文件network: {config: disabled}文件。执行此操作后,您应该能够更新 netplan 文件,并且该文件不应再被覆盖。

另一种选择是完全禁用 netplan(要做到这一点,例如删除/etc/netplan/50-cloud-init.yaml并执行上述更改就足够了,以便您的云提供商不会将其带回来! - 将其备份到某处以防您以后再次需要它),然后复制/run/systemd/network/10-netplan.../etc/systemd/network/ens3.network进行路由更改。

相关内容