如何使用 systemd 启动虚拟网络接口(提供额外的 IP 地址)

如何使用 systemd 启动虚拟网络接口(提供额外的 IP 地址)

我想将我的老式启动/停止/状态初始化脚本移至 systemd

基本上是这样,开始:

ifconfig eth0:vip 10.0.0.1/24 up

停止:

ifconfig eth0:vip down

地位:

ifconfig  | grep 'eth0:vip'

我尝试创建一个 systemd 服务单元:

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/path/myscript start
ExecStop=/path/myscript stop
Restart=no

systemctl status没有任何方法可以通过手动检测 eth0:vip 何时出现故障ifconfig eth0:vip down

我应该怎么做才能让我的脚本符合 systemd?

答案1

本单位符合规定。从这个意义上来说,没有什么需要改进的地方。

与System V init 中的脚本 systemctl status foo不同,systemd 根本不支持为 定义自定义操作。只能检查正在运行的守护进程(或不检查,给定)。init.dsystemdRemainAfterExit

systemd 不跟踪网络状态、IP 地址或您正在使用的旧接口别名的单元。

您可以更改您的主网络配置系统,以包含第二个 IP 地址。您可能喜欢将所有网络地址配置放在同一个地方:)。

systemd-networkd支持在同一接口上运行 DHCP 和静态地址。NetworkManager 不支持,但现在您可以创建密钥文件创建虚拟的麦克夫兰接口作为物理接口的子级。 (理论上,这甚至可能允许您请求多个 DHCP 地址:)。不要尝试将多个配置系统中的配置应用到同一个命名接口。如果您已经在运行 NetworkManager,那么使用它可能是最简单的。

systemd-network (networkctl) 和 NetworkManager (例如 nmcli) 都会检测并显示您是否自行更改了其网络接口。

也可以配置旧的配置系统[1][2] 创建 macvlan 接口。然而,据我所知,如果你在他们背后搞乱接口,他们可能会感到非常困惑。

如有必要,可以在大多数配置系统中修改额外的自定义前置或后置任务[3],尽管 systemd-networkd 没有内置任何此类系统。我说“被黑客攻击”,是因为 NM 系统并不是真正设计用于运行为某一特定接口编写的脚本。

相关内容