netplan – 仅匹配物理 ifs

netplan – 仅匹配物理 ifs

我正在使用netplan20.04 (Focal) 并且只想匹配其中一个节中的物理 if。

如果我使用:

ethernets:
  dmz0:
    match:
      macaddress: b8:a3:86:70:cc:e6
      name: dmz*|en*
    set-name: dmz0

它会抱怨Cannot find unique matching interface for dmz0并且不匹配,如果我没有匹配,那么name在创建 v-dev 后它也会做同样的事情。

$ ip l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: dmz0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether b8:a3:86:70:cc:e6 brd ff:ff:ff:ff:ff:ff
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether f0:4d:a2:25:df:d0 brd ff:ff:ff:ff:ff:ff

匹配(不带name)在启动时起作用,这就是我获取创建防火墙规则等所需的 i/f 名称的方式。

匹配(无论哪种方式)以后都不起作用(netplan try|apply),因为 VLan 和网桥采用与物理接口相同的 MAC 地址。我需要重置 netplan 配置,因为服务(以及相关的 v-devs)会来来去去。

对于如何实现稳定、可重复的匹配,您有什么建议吗?

答案1

正如您正确发现的那样,如果配置了(并采用相同的 MAC 地址),macaddress仅进行匹配是不够的。vlans

不幸的是,netplan 目前不支持完整的 RegEx 匹配,而仅支持 shell 样式的 glob 匹配。因此,您的 name 匹配中的运算符无法按预期工作,并且"|"找不到接口。目前有一个开放的 pull request 来改善这种情况,以便将来进行匹配:drivernamehttps://github.com/canonical/netplan/pull/202

现在你可能需要将你的比赛分成两部分,以达到预期的效果:

ethernets:
  id0:
    match:
      macaddress: b8:a3:86:70:cc:e6
      name: dmz*
    set-name: dmz0
  id1:
    match:
      macaddress: b8:a3:86:70:cc:e6
      name: en*
    set-name: dmz0

答案2

我知道这个问题有点老了,可能你已经找到了解决方案并继续前进了。以下仅供将来的我参考:

对我来说最有效的方法是同时使用driver匹配。因为物理接口的驱动程序与虚拟接口不同。以下是我的服务器中的一些示例。

# /etc/netplan/01-persistent-net.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    ens160:
      match:
        macaddress: 00:50:56:bc:80:f4
        driver: vmxnet3
      set-name: ens160

或者

# /etc/netplan/01-persistent-net.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    intf_eth2:
      match:
        macaddress: 00:e0:4c:68:05:6a
        driver: r8152
      set-name: intf_eth2
    intf_eth3:
      match:
        macaddress: 00:e0:4c:68:0e:95
        driver: r8152
      set-name: intf_eth3

相关内容