Назад | Перейти на главную страницу

Как контролировать порядок сетевых интерфейсов?

Я пытаюсь настроить машину с 3 сетевыми адаптерами, первые два - встроенные контроллеры GbE, третий - контроллер 10GbE. С помощью NetworkManager я настроил «первую» сетевую карту GbE (которая в то время была eth0) для использования статического IP-адреса. Вторая сетевая карта GbE будет настроена в отдельной частной сети, а сетевая карта 10GbE в настоящее время не используется.

Когда я перезагружаю компьютер, порядок eth0, eth1, eth2 и т. Д. Кажется случайным. Иногда eth0 выбирает статический IP-адрес, иногда он распознается как eth1 и захватывает DHCP-адрес. В этом случае мне нужно поменять кабели местами, прежде чем он будет правильно перенастроен.

Как я могу контролировать порядок, чтобы конкретная физическая сетевая карта всегда отображалась как eth0 или eth1 без изменения следующей перезагрузки?

Поддерживаемый способ сделать это для RHEL 6 и в будущем: согласованное именование сетевых устройств. Это гарантирует, что все интерфейсы получат осмысленное имя, которое зависит от оборудования и остается неизменным на протяжении всего срока службы системы (в любом случае, если вы не меняете оборудование, а обычно даже если вы это делаете).

(Обратите внимание, что в RHEL 7, другой формат именования используется.)

Чтобы переключиться на него на RHEL 6, вам необходимо переустановить систему, и при установке вы должны передать параметр командной строки ядра biosdevname=1 при запуске установочного носителя и каждый раз при загрузке системы.

Может быть, кому-то эта информация окажется полезной: прежде всего, в 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.

В 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-адресами для принудительного именования устройств.

По предложению RedHat документация вы можете указать HWADDR=MAC-address в файле конфигурации вашего интерфейса.

HWADDR = MAC-адрес, где MAC-адрес - это аппаратный адрес устройства Ethernet в форме AA: BB: CC: DD: EE: FF. Эта директива должна использоваться на машинах, содержащих более одной сетевой карты, чтобы гарантировать, что интерфейсам назначены правильные имена устройств независимо от настроенного порядка загрузки для каждого модуля сетевой карты. Эта директива не должна использоваться вместе с MACADDR.

Как упоминалось 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 @).