NetworkDevicesName

Материал из ALT Linux Wiki

Именование сетевых интерфейсов

Классическая схема именования сетевых интерфейсов, применяемая ядром, состояла в том, чтобы просто присваивать имена, начинающиеся с «eth0», «eth1», и т.д. всем интерфейсам по мере их проверки драйверами.

Но, по мнению разработчиков Systemd/freedesktop, в современных реалиях старая схема не работает. В настоящее время проверка драйверов не предсказуема для современных технологий - при использовании нескольких сетевых карт имена вида eth0/1/2... при каждой загрузке назначаются хаотично, в зависимости от того, какая карта проинициализируется первой.

Это может иметь серьезные последствия для безопасности, например, в правилах брандмауэра, которые запрограммированы на определенные схемы именования и, следовательно, очень чувствительны к непредсказуемому изменению имен.

Было предложено и реализовано множество решений для исправления данной проблемы.

Например, одно из них, реализованное в systemd 197. В нем была добавлена встроенная поддержка ряда различных политик именования в сами systemd/udevd и сделана схема, аналогичная схеме biosdevname (но, как правило, более мощная и близкая к схемам идентификации внутренних устройств ядра) по умолчанию.

В настоящий момент udev поддерживают следующие различные схемы именования сетевых интерфейсов:

  • Имена, включающие прошивку/BIOS, предоставляют индексные номера для встроенных устройств (пример: eno1)
  • Имена, включающие индексные номера слотов горячего подключения PCI Express, предоставленные прошивкой/BIOS (пример: ens1)
  • Имена, включающие физическое/географическое расположение разъема оборудования (пример: enp2s0)
  • Имена, включающие MAC-адрес интерфейсов (пример: enx78e7d1ea46da)
  • Классическое, непредсказуемое именование ethX, встроенное в ядро ​​(пример: eth0)

Есть ли у этого какие-либо недостатки? Да, это так. Раньше практически гарантировалось, что хосты, оснащенные одной сетевой картой, имели только один интерфейс «eth0». При наличии этой новой схемы администратор теперь должен сначала проверить имя локального интерфейса, прежде чем вызывать на нем команды, тогда как раньше у него была большая вероятность, что «eth0» было правильным именем.

Если вам это не нравится, то данную функцию можно отключить.

$ su -
# mcedit /etc/default/grub

В строчку GRUB_CMDLINE_LINUX_DEFAULT, в скобки из одинарных кавычек добавьте к параметрам следующее значение - net.ifnames=0

Сохраните файл и закройте редактор.

Перегенерируйте меню GRUB и перезагрузитесь

# grub-mkconfig -o /boot/grub/grub.cfg
# reboot

Проверьте список сетевых устройств:

$ ip a

У Вас будет eth0 ...

Для того, чтобы вернуть как было, заново отредактируйте указанный выше файл, удалите параметр net.ifnames=0, перегенерируйте меню GRUB и перезагрузитесь.

Ссылки