我正在尝试配置一台带有 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
答案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 @)。