假设允许在节点上添加路由,我该如何设置持久 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
进行路由更改。