Red Hat Training

A Red Hat training course is available for RHEL 8

第 2 章 一致的网络接口设备命名

Red Hat Enterprise Linux 8 提供用于网络接口的一致性和可预测的设备命名方法。这些特性有助于查找和区分网络接口。

内核为网络接口分配名称的方法是,使用一个固定前缀,再加上随着内核初始化网络设备时增加的数字。例如: eth0 将代表引导时被探测的第一个设备。但是这些名称不一定与设备外壳上的标签对应。具有多个网络适配器的现代服务器平台,可能会遇到这些接口的命名不明确的情况。这会影响系统中嵌入的网络适配器和附加适配器。

在 Red Hat Enterprise Linux 8 中,udev 设备管理器支持很多不同的命名方案。默认情况下,udev 根据固件、拓扑和位置信息分配固定名称。它有以下优点:

  • 设备名称完全可预测。
  • 在添加或删除硬件时,设备名称也会保持不变。
  • 因此,有问题的硬件可以被无缝地替换。

2.1. 网络接口设备命名等级

如果启用了一致的设备命名(在 Red Hat Enterprise Linux 8 中是默认设置), udev 设备管理器会根据以下方案生成设备名称:

方案描述示例

1

设备名称包含固件或者 BIOS 提供的索引号,用于板上的设备。如果此信息不适用,udev 将使用方案 2。

eno1

2

设备名称包含固件或 BIOS 提供的 PCI Express(PCIe)热插件插槽索引号。如果此信息不适用,udev 将使用方案 3。

ens1

3

设备名称包含硬件连接器的物理位置。如果此信息不适用,udev 将使用方案 5。

enp2s0

4

设备名称包含 MAC 地址。Red Hat Enterprise Linux 默认不使用这个方案,但管理员可选择性地使用它。

enx525400d5e0fb

5

传统的无法预计的内核命名方案。如果 udev 无法应用任何其他方案,设备管理器将使用这个方案。

eth0

默认情况下,Red Hat Enterprise Linux 根据 /usr/lib/systemd/network/99-default.link 文件中的 NamePolicy 设置选择设备名称。NamePolicy 中值的顺序非常重要。Red Hat Enterprise Linux 使用在该文件中指定的以及 udev 生成的第一个设备名称。

如果您手动配置 udev 规则以更改内核设备名称,则优先使用这些规则。

2.2. 网络设备重命名是如何工作的

默认情况下在 Red Hat Enterprise Linux 8 中启用了一致的设备命名。udev 设备管理器处理不同的规则来重命名设备。以下列表描述了 udev 处理这些规则的顺序,以及这些规则对什么操作:

  1. /usr/lib/udev/rules.d/60-net.rules 文件定义了 /lib/udev/rename_device 帮助程序在 /etc/sysconfig/network-scripts/ifcfg-* 文件中搜索 HWADDR 参数。如果变量中设置的值与接口的 MAC 地址匹配,帮助程序会将接口重命名为该文件 DEVICE 参数中设置的名称。
  2. /usr/lib/udev/rules.d/71-biosdevname.rules 文件定义了 biosdevname 实用程序根据其命名策略重命名接口,只要在上一步中没有重命名。
  3. /usr/lib/udev/rules.d/75-net-description.rules 文件定义 udev 检查网络接口设备,并在 udev- 内部变量中设置属性,这些属性将在下一步中处理。请注意,其中一些属性可能没有定义。
  4. /usr/lib/udev/rules.d/80-net-setup-link.rules 文件调用 net_setup_link udev 内置,然后应用该策略。以下是存储在 /usr/lib/systemd/network/99-default.link 文件中的默认策略:

    [Link]
    NamePolicy=kernel database onboard slot path
    MACAddressPolicy=persistent

    在这个策略中,如果内核使用持久名称,udev 不会重命名该接口。如果内核没有使用持久名称,udev 会将接口重命名为由 udev硬件数据库提供的名称。如果这个数据库不可用,Red Hat Enterprise Linux 会回复到上述机制中。

    另外,对于基于 MAC 的接口,将此文件中的 NamePolicy 参数设置为 mac

  5. /usr/lib/udev/rules.d/80-net-setup-link.rules 文件定义 udev 根据以下顺序基于 udev 内部参数重新命名接口:

    1. ID_NET_NAME_ONBOARD
    2. ID_NET_NAME_SLOT
    3. ID_NET_NAME_PATH

    如果没有设置参数,udev 将使用下一个参数。如果没有设置任何参数,接口就不会被重命名。

第 3 步和 4 实现了 第 2.1 节 “网络接口设备命名等级” 所述的命名方案 1 到 4。

其它资源

2.3. x86_64 平台上的可预测的网络接口名称解释

当启用一致的网络设备名称功能时,udev 设备管理器会根据不同的标准创建设备名称。这部分论述了在 x86_64 平台中安装 Red Hat Enterprise Linux 8 时的命名方案。

接口名称以双字符前缀开始,该前缀基于接口类型:

  • en 用于以太网
  • wl 用于无线 LAN(WLAN)
  • ww 用于无线 WAN(WWAN)

另外,下面的一项会附加到以上其中一个前缀中,该前缀根据 udev 设备管理器采用的 schema 附加:

  • o<on-board_index_number>
  • s<hot_plug_slot_index_number>[f<function>][d<device_id>]

    请注意,所有多功能 PCI 设备在设备名称中有 [f<function>] 号,其中包括功能 0 设备。

  • x<MAC_address>
  • [P<domain_number>]p<bus>s<slot>[f<function>][d<device_id>]

    [P<domain_number>] 部分定义 PCI 地理位置。只有在域号不是 0时才会设定这部分。

  • [P<domain_number>]p<bus>s<slot>[f<function>][u<usb_port>][…][c<config>][i<interface>]

    对于 USB 设备,hub 端口号的完整链由 hub 的端口号组成。如果名称大于最大值(15 个字符),则不会导出该名称。如果链中有多个 USB 设备, udev 会限制 USB 配置描述符(c1)和 USB 接口描述符(i0)的默认值。

2.4. System z 平台中可预测的网络接口设备名称解释

当启用一致的网络设备名称特性时,System z 平台的 udev 设备管理器会根据总线 ID 创建设备名称。总线 ID 识别 s390 频道子系统中的一个设备。

对于 CCW(channel command word)设备,总线 ID 是设备号,并带有一个 0.n 前缀,其中 n 是子频道集的 ID。

以太网接口被命名,如 enccw0.0.1234。串行线互联网协议(SLIP)频道到频道(CTC)网络设备被命名,例如 slccw0.0.1234

使用 znetconf -c 或者 lscss -a 命令显示可用网络设备及其总线 ID。

2.5. 在安装过程中禁用一致的接口设备命名

这部分论述了如何在安装过程中禁用一致的接口设备命名。

警告

红帽建议不要禁用一致的设备命名。禁用一致的设备命名可能会导致不同类型的问题。例如:如果您在系统中添加了另一个网卡,则分配的内核设备名称(例如,eth0)不再是固定的。因此,重启后内核可以以不同的方式为该设备命名。

流程

  1. 引导 Red Hat Enterprise Linux 8 安装介质。
  2. 在引导管理器中,选择 Install Red Hat Enterprise Linux 8,然后按 Tab 键编辑该条目。
  3. 在内核命令行中附加 net.ifnames=0 参数:

    vmlinuz... net.ifnames=0
  4. Enter 键开始安装。

2.6. 在安装的系统中禁用一致的接口设备命名

这部分论述了如何在已安装的系统中禁用一致的接口设备命名。

警告

红帽建议不要禁用一致的设备命名。禁用一致的设备命名可能会导致不同类型的问题。例如:如果您在系统中添加了另一个网卡,则分配的内核设备名称(例如,eth0)不再是固定的。因此,重启后内核可以以不同的方式为该设备命名。

先决条件

  • 系统使用一致的接口设备命名,这是默认设置。

流程

  1. 编辑 /etc/default/grub 文件,将 net.ifnames=0 参数附加到 GRUB_CMDLINE_LINUX 变量中:

    GRUB_CMDLINE_LINUX="... *net.ifnames=0
  2. 重建 grub.cfg 文件:

    • 在具有 UEFI 引导模式的系统上:

      # grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
    • 在使用旧引导模式的系统上:

      # grub2-mkconfig -o /boot/grub2/grub.cfg
  3. 如果在配置文件或脚本中使用接口名称,则必须手动更新它们。
  4. 重启主机:

    # reboot

2.7. 使用 prefixdevname 命名以太网网络接口

本文档描述了在不需要使用这些接口的默认命名方案时,如何设置前缀以便以太网网络接口提供一直性的命名。但是,红帽建议使用默认命名方案。有关这个方案的详情请参考 第 2 章 一致的网络接口设备命名

2.7.1. prefixdevname 简介

prefixdevname 工具是 udev 帮助程序程序,可让您定义您自己用来命名以太网网络接口的前缀。

2.7.2. prefixdevname 的限制

以太网网络接口前缀有一些限制。

您选择的前缀必须满足以下要求:

  • 必须是 ASCII 字符串
  • 必须是字母数字字符串
  • 少于 16 个字符
警告

该前缀不能与用于 Linux 上网络接口命名的任何其他已知的前缀冲突。特别是,您不能使用这些前缀: ethenoensem

2.7.3. 设置 prefixdevname

使用 prefixdevname 的前缀设置是在系统安装过程中完成的。

要为您的以太网网络接口设置和激活所需前缀,请使用以下步骤。

流程

  • 在内核命令行中添加以下字符串:

    net.ifnames.prefix=<required prefix>
警告

红帽不支持在已部署的系统中使用 prefixdevname

设定了前缀后,操作系统重启后,前缀在每次出现新网络接口时都有效。为这个新设备分配一个名称,格式为 <PREFIX><INDEX>。例如,如果您选择的前缀是 net,系统中也有 net0net1 前缀的接口,新接口名为 net2。然后 prefixdevname 工具会在 /etc/systemd/network 目录中生成新的 .link 文件,该文件将名称应用到刚刚出现的 MAC 地址的接口。配置在重启后会保留。