如何自定义 NIC 名称

使用 systemd 链接文件

你可以创建一个包含 Ignition 配置的 systemd 链接文件

例如,要将 MAC 地址为 "12:34:56:78:9a:bc "的网卡命名为 "infra",可使用下图所示的 Butane 配置片段在"/etc/systemd/network/25-infra.link "中放置 systemd 链接文件:

示例:通过 systemd 链接文件自定义NIC
variant: fcos
version: 1.5.0
storage:
  files:
    - path: /etc/systemd/network/25-infra.link
      mode: 0644
      contents:
        inline: |
          [Match]
          MACAddress=12:34:56:78:9a:bc
          [Link]
          Name=infra

使用 Udev 规则

同样,要通过 Ignition 配置将 MAC 地址为 "12:34:56:78:9a:bc "的网卡命名为 "infra",请使用下图所示的 Butane 配置片段在 /etc/udev/rules.d/80-ifname.rules 中创建 udev规则

示例:通过 Udev 规则自定义 NIC
variant: fcos
version: 1.5.0
storage:
  files:
    - path: /etc/udev/rules.d/80-ifname.rules
      mode: 0644
      contents:
        inline: |
          SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="12:34:56:78:9a:bc", ATTR{type}=="1", NAME="infra"

通过内核参数在 Initramfs 中联网

如果需要在 initramfs 中联网,内核参数 ifname= 将动态创建一条 udev 规则来更改网卡名称。

目前,与 initramfs 中网络配置的其他部分(如静态 IP、主机名等)不同,这些 udev 规则不会持久存在实际根目录中。如果需要将自定义名称应用到实际根目录,则必须创建链接文件或 udev 规则,如上所示。详见 这个讨论

例如,要给 MAC 地址为 "12:34:56:78:9a:bc "的网卡命名为 "infra",需要提供一个 "ifname=infra:12:34:56:78:9a:bc "内核参数。就会在 initramfs 中创建一个类似的 udev 规则:

# cat /etc/udev/rules.d/80-ifname.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="12:34:56:78:9a:bc", ATTR{type}=="1", NAME="infra"