如何控制网络接口的顺序?

如何控制网络接口的顺序?

我正在尝试配置一台带有 3 个 NIC 的机器,前两个是内置 GbE 控制器,第三个是 10GbE 控制器。通过 NetworkManager,我已将“第一个”GbE NIC(当时是 eth0)配置为使用静态 IP 地址。第二个 GbE NIC 将配置在单独的专用网络上,并且 10GbE NIC 目前未使用。

当我重新启动机器时,eth0、eth1、eth2 等的顺序似乎是随机的。有时 eth0 会获取静态 IP 地址,有时它被识别为 eth1 并获取 DHCP 地址。在这种情况下,我需要交换电缆才能正确重新配置。

我如何控制顺序以便特定的物理网卡始终作为 eth0 或 eth1 出现,而​​无需在下次重启时进行更改?

答案1

RHEL 6 中仍然支持的方法是通过 udev 设备规则。

应该有一个自动生成的 /etc/udev/rules.d/70-persistent-net.rules强制一致的命名:

# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.

# PCI device 0x8086:0x10c9 (igb)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:25:90:1d:d1:30", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x8086:0x10c9 (igb)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:25:90:1d:d1:31", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

如果没有,您可以使用类似的语法和您自己的 MAC 地址来强制持久设备命名。

答案2

也许有人会发现这些信息很有用:首先,在 RHEL7 中,您不需要重新安装系统来更改接口命名约定。

注意:所需启动参数:

a) With no parameters or net.ifnames=1 used, the names will use systemd Predictable Network Interface Names
b) With biosdevname=1 used, the names will be managed by udev (technically systemd-udev) using Consistent Network Device Naming
c) With net.ifnames=0 and biosdevname=0 both specified, traditional ("kernel names") ethX names will be used; if udev rules are also added they can rename the interfaces to anything except eth

例子:

Edit /etc/default/grub
append selected params eg.
biosdevname=0 net.ifnames=0
grub2-mkconfig -o /boot/grub2/grub.cfg

就主题而言:当您需要调整所有接口的顺序时,过程很简单:

mv /etc/udev/rules.d/70-persistent-net.rules /root/ 
(New udev rules will be generated at next boot)

Adjust configuration files in
/etc/sysconfig/network-scripts/ifcfg-eth*
[Edit device name, connection name, HWADDR etc.] 

Reboot and then udev will generate rules basing on configuration files - if you did it properely.

答案3

对于 RHEL 6 及以后版本,支持的方式是一致的网络设备命名。这确保所有接口都获得一个基于硬件的有意义的名称,并且在整个系统生命周期内保持不变(如果您不更改硬件,无论如何,通常即使您这样做也是如此)。

(请注意,在 RHEL 7 中,不同的命名格式用来。)

要在 RHEL 6 上切换到它,您需要重新安装系统,并且在安装时,必须biosdevname=1在启动安装介质时以及每次引导系统时传递内核命令行选项。

答案4

正如 HBruijn 所提到的,rhel6 中的顺序是 /etc/udev/rules.d/70-persistent-net.rules。此文件由 /lib/udev/write_net_rules 写入。

如果出于某种原因,您需要对网络接口进行任意和预先确定的排序,您可以用自己的脚本替换此脚本,以创建 70-persistent-net.rules 文件。这确保它不会被覆盖。

您可以使用以下方式获取设备信息

lspci | grep -i ethernet

获取设备列表

ethtool -i ethx
ethtool -P ethx

获取每个的 MAC 地址(关联 PCI @ / MAC @)。

相关内容