在 /etc/network/interfaces 或类似文件中配置 dummy0 的现代方法?

Ole*_*leg 3 configuration systemd network-interface

我正在寻找一种干净、“现代”的方式来配置、启动和停止dummy0网络接口(从dummy内核模块)。

/etc/network/interfaces曾经在较旧的系统上工作,但现在在ifup dummy0以下系统上静默失败:

iface dummy0 inet static
   address 10.10.0.1
   netmask 255.255.255.0
   # post-up ip link set dummy0 multicast on  
Run Code Online (Sandbox Code Playgroud)

取消注释该post-up行会产生此错误(显示它运行但从未创建接口):dummy0: post-up cmd 'ip link set dummy0 multicast on'failed: returned 1 (Cannot find device "dummy0")

这个 shell 脚本运行良好,但不是一个很好的干净的配置文件:

#!/bin/sh
sudo ip link add dummy0 type dummy
sudo ip link set dummy0 multicast on
sudo ip addr add 10.10.0.1/24 dev dummy0
sudo ip link set dummy0 up
Run Code Online (Sandbox Code Playgroud)

我的目的手动systemd 服务一起使用它:

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/ifup dummy0
ExecStop=/sbin/ifdown dummy0
StandardOutput=syslog+console
Run Code Online (Sandbox Code Playgroud)

环境:

  • Kubuntu 18.04.2 LTS
  • 网络管理器 1.10.6
  • iproute2 4.15.0
  • ifupdown2 1.0
  • systemd 237 +PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid

问题:

  1. 如何将 shell 脚本转换为工作/etc/network/interfaces配置?
  2. 有没有其他更清洁或推荐的方法来做到这一点?

use*_*686 5

接口之前不是“创建”的;ifupdown 依赖于它在“虚拟”内核模块加载后神奇地出现。这是旧的兼容性行为,并且 (AFAIRC) 它还干扰了相同接口名称的显式创建,因此它通过模块参数被禁用。现在 dummy0 必须以创建 dummy1 或 dummyfoobar 的相同方式创建。

您应该能够在“pre-up”命令中创建接口:

iface dummy0 inet static
    address 10.10.0.1/24
    pre-up ip link add dummy0 type dummy
Run Code Online (Sandbox Code Playgroud)

如果你也在这个系统上使用 NetworkManager,最近的 NM 版本支持虚拟接口。

nmcli con add type dummy ifname dummy0 ipv4.addresses 10.10.0.1/24 [...]
Run Code Online (Sandbox Code Playgroud)

如果接口应该在启动时创建并永久保留,可以使用 systemd-networkd(一个 .netdev 配置来创建设备,一个 .network 配置来设置 IP 地址)。然而,'networkctl' 仍然没有手动的“up”或“down”子命令。