如何根据硬件位置为网络接口分配任意名称?(CentOS 7)

如何根据硬件位置为网络接口分配任意名称?(CentOS 7)

我有多台相同的设备运行 CentOS 7,并带有四个板载 NIC。为了保持与运行 RHEL6 的旧版本设备(即ethX)类似的感觉,我想使用 RHEL6 使用的网络命名方案。我还想尽量减少在每台设备上创建通用系统磁盘后所需的更改次数。

如果我理解 CentOS 7 中的命名方案,则命名方案基于硬件位置是一致的,因此如果硬件相同,则设备的每个实例都会有相同的网络接口名称。

由于客户的需求,我需要让设备的网络接口在 CentOS 7 和 RHEL6 版本上具有相同的名称。

net.ifnames=0一种方法是使用如下方法扩展内核命令行这里然后创建我自己的ifcfg-ethX文件。但是,据我所知,这样做需要手动修改配置文件。由于旧式顺序是固定的但任意的,因此这进一步复杂化,因此我必须为每个系统修改这些文件。:-/

我曾经想过使用 CentOS 7 命名方案,然后为每个方案添加一个别名,这样就可以根据硬件位置应用任意命名方案。可以这样做吗?

关于如何将两个名称赋予同一设备和 IP 地址,还有其他想法吗?

注意:我不是问如何向同一设备添加多个 IP 地址,这相当简单。

编辑: 我确实需要重命名它但想以编程方式进行。

答案1

一个名字能同时是“任意的”和“基于硬件位置的”吗?这两个词是互相矛盾的。

  • 这些eth#名称是由内核本身根据每次启动时的检测顺序分配的 - 换句话说,它们是“先到先得”,与硬件位置无关。

    较旧的 udev 版本用于自动生成文件/etc/udev/rules.d将这些分配绑定到卡的 MAC 地址。您可以将该文件复制到新系统。

    您还可以编写自定义 udev 规则,根据NAME=地址或 PCI 位置设置参数。(请注意,eth*如果尚未重命名接口,udev 将来可能会拒绝将其重命名为。即使允许,这种重命名也非常脆弱,如果以不同的顺序发现设备,则可能会失败。)

  • 据我所知,RHEL 6 使用bios 设备名称用于生成基于物理的接口名称(内核开关biosdevname=0)。RHEL 7 使用 systemd-udevd 的内置 net_id 来实现此目的(内核开关net.ifnames=0)。

    为了获得p1p2样式名称,您可以yum install biosdevname,然后通过内核命令行启用它(biosdevname=1 net.ifnames=0)。请参阅Red Hat 文档

网络接口不能有别名。

相关内容