Как назначить произвольное имя сетевому интерфейсу в зависимости от местоположения оборудования? (CentOS 7)

527
MrMas

У меня есть несколько идентичных устройств под управлением CentOS 7 с четырьмя встроенными сетевыми картами. Чтобы сохранить ощущение, похожее на более старую версию устройства с RHEL6 (т.е. ethX), я хочу использовать схему именования сети, используемую RHEL6. Я также хочу минимизировать количество необходимых изменений после создания универсального системного диска для использования на каждом устройстве.

Если я понимаю схему именования в CentOS 7, схема именования согласовывается в зависимости от местоположения оборудования, поэтому, если оборудование идентично, у меня будут одинаковые имена сетевых интерфейсов для каждого экземпляра устройства.

Из-за требований клиентов необходимо, чтобы сетевые интерфейсы устройства имели одинаковое имя в версиях CentOS 7 и RHEL6.

Один из подходов - расширить командную строку ядра с помощью net.ifnames=0описанного здесь, а затем создать мои собственные ifcfg-ethXфайлы. Однако, насколько я могу судить, для этого необходимо изменить файл конфигурации вручную. Это еще более усложняется тем, что устаревший порядок является фиксированным, но произвольным, поэтому мне придется изменить эти файлы для каждой системы. : - /

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

Любые другие идеи о том, как я могу получить два имени для одного устройства и IP-адрес?

ПРИМЕЧАНИЕ. Я не спрашиваю, как добавить несколько IP-адресов к одному устройству, что довольно просто.

РЕДАКТИРОВАТЬ: Мне действительно нужно переименовать его, но я хотел бы сделать это программно.

0

1 ответ на вопрос

2
grawity

Может ли имя быть одновременно «произвольным» и «основанным на расположении оборудования»? Эти слова противоречат друг другу.

  • В eth#имена присваиваются самого ядра на основе порядка обнаружения на каждом ботинке - другими словами, они «первым пришел, первым обслужен», и не имеют ничего общего с аппаратным адресом.

    Старые версии udev использовались для автоматического создания файла, /etc/udev/rules.dчтобы связать эти назначения с MAC-адресами карт. Вы, вероятно, можете скопировать этот файл в новые системы.

    Вы также можете написать пользовательские правила udev для установки NAME=параметра на основе адреса или расположения PCI. (Обратите внимание, что в будущем udev может отказаться переименовывать интерфейс eth*, если это еще не сделано. И даже если это разрешено, это переименование является очень хрупким и может привести к сбою, если устройства обнаруживаются в другом порядке.)

  • Хотя, насколько мне известно, RHEL 6 использовал biosdevname для генерации имен физических интерфейсов (переключатель ядра biosdevname=0). Для этой цели RHEL 7 использует встроенный в systemd-udevd net_id (переключатель ядра net.ifnames=0).

    Чтобы получить p1p2имена стилей, вы можете yum install biosdevnameзатем включить их через командную строку ядра ( biosdevname=1 net.ifnames=0). Смотрите документацию Red Hat .

Сетевые интерфейсы не могут иметь псевдонимы.

Под произвольным я подразумеваю «не следовать установленному шаблону» MrMas 5 лет назад 0
Эта ссылка направлена ​​в правильном направлении: https://unix.stackexchange.com/a/219277/88800 и, для упорства в стиле udev, эта ссылка содержит важную информацию: https://www.cyberciti.biz/ faq / centos-7-run-script-when-network-interface-is-up-network-manager / Поэтому я создал `/ etc / NetworkManager / dispatcher.d / 99-ifup-local.sh`, чтобы сделать это для каждого из моих устройств. MrMas 5 лет назад 0