Предсказуемые имена сетевого интерфейса ломают vm-миграцию

Как сбросить /etc/networking/interfaces при использовании «предсказуемых имен сетевого интерфейса»?

Версии Ubuntu старше 15.10 используют имена сетевых адаптеров, такие как:

  • eth0
  • eth1
  • eth2

Замена сетевой карты или перенос vm на новый гипервизор заставит Linux увеличивать номер интерфейса. Удаление /etc/udev/rules.d/70-peristent-net.rules приведет к повторному использованию Linux eth0 .

Ubuntu 15.10 и более новые используют « Предсказуемые имена сетевого интерфейса ». Имя сетевого адаптера выводится из MAC-адреса.

  • ens3
  • ens32
  • ens192

При миграции vm сетевое взаимодействие не запускается, поскольку /etc/network/interfaces все еще ссылаются на старый несуществующий сетевой адаптер.

 # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto ens32 iface ens32 inet dhcp pre-up sleep 2 

Каков наилучший способ сбросить файл / etc / network / interfaces?

Мне нужно сделать это, прежде чем отключить vm и перейти на новый гипервизор, поскольку я использую упаковщик для создания автоматических золотых изображений на основе золотых изображений шеф-повара / бенто .

Я обнаружил, что удаление / etc / network / interfaces не работает, поскольку файл автоматически не восстанавливается при следующей загрузке после миграции.

Я пробовал редактировать мой файл grub, чтобы вернуться к соглашению об именах 'eth0'. В то время как / etc / network / interfaces ссылаются на старое имя (eth0), vm не получит ip, и любые перезагрузки заставят vm использовать новое соглашение об именах. Также я обнаружил, что systemd всегда будет иметь приоритет, если я не могу гарантировать, что biosdevname=0 постоянно остается в конфигурации grub . Не знаете, как постоянно применять это

 GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 bios.devname=0" 

Если возможно, я бы предпочел не использовать cloud init или использовать сценарии запуска после запуска, так как я предпочел бы, чтобы золотые изображения были максимально чистыми.

Наверняка это проблема, которую облачные провайдеры (Azure, AWS, RackSpace, Openstack) уже решили, когда они импортируют vms. Я не могу быть первым, кто попытается перенести vm, используя предсказуемые имена сетевого интерфейса.

Я попытался выполнить эти команды перед выключением и мигрированием vm

 apt-get remove biosdevname -y; ln -s /dev/null /etc/systemd/network/99-default.link; 

Когда я переношу vm, я обнаруживаю, что /etc/network/interfaces и ip address прежнему относятся к ens32

3 Solutions collect form web for “Предсказуемые имена сетевого интерфейса ломают vm-миграцию”

Наверняка это проблема, которую облачные провайдеры (Azure, AWS, RackSpace, Openstack) уже решили, когда они импортируют vms.

Я думаю, что OpenStack использует формат cloud-init, ConfigDrive и предоставляет сетевую конфигурацию, которая соответствует аппаратной части VM. Источники:

Если вы исключили скрипт с первой загрузкой, есть один очевидный ответ.

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

Мне это не нравится, как я могу отключить это?

У вас в основном есть три варианта:

  1. Вы отключите назначение фиксированных имен, чтобы снова использовать непредсказуемые имена ядер. Для этого просто замаскируйте файл .udlink udev для политики по умолчанию: ln -s / dev / null /etc/systemd/network/99-default.link

https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/

Переход к старым именам постоянных интерфейсов не является одним из параметров, задокументированных.

Другой альтернативой является настройка, когда сетевые интерфейсы по умолчанию включены независимо от их точного имени. Я думаю, NetworkManager поддерживает это по умолчанию. systemd-networkd также может быть сказано сделать это .

Как только у вас есть несколько сетевых устройств для виртуальной машины, они, вероятно, нуждаются в конкретной конфигурации …

Вне виртуальных машин есть одно очевидное преимущество подхода в стиле NetworkManager: ПК может иметь несколько сетевых интерфейсов, возможно, разных типов, причем только один из них подключен. Например, это можно увидеть на некоторых материнских платах премиум-класса или в системе, где первый сетевой интерфейс не работал по желанию, и в какой-то момент был установлен второй интерфейс.

Нужны ли вам предсказуемые имена сетевого интерфейса?

Мое решение состояло в том, чтобы удалить biosdevname , и это biosdevname привело к biosdevname , что всегда были сетевые интерфейсы, называемые eth0, eth1 и т. Д. Я не нашел достаточной причины иметь предсказуемые имена сетевых интерфейсов и не устанавливать biosdevname.

в /etc/udev/rules.d/70-persistent-net.rules вы можете изменить, какой MAC-адрес аппаратного обеспечения будет присвоен eth0, eth1 и т. д. Обычно я удаляю содержимое этого файла, сохраняю его в виде пустого файла, перезагружаюсь, а затем у меня есть чистый список с правильными сетевыми адаптерами …

 # This file was automatically generated by the /lib/udev/write_net_rules # program,run by the persistent-net-generator.rules rules file. # # This file was automatically generated by the /lib/udev/write_net_rules # program,run by the persistent-net-generator.rules rules file. # # You can modify it,as long as you keep each rule on a single # line,and change only the value of the NAME= key. SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1" 

^^ где xx: xx: xx: xx: xx: xx – уникальный MAC-адрес сетевых адаптеров.

Я знаю, что вы упоминаете, что удаление этого файла не является решением, но я отправляю пример выше, потому что по крайней мере в Suse это /lib/udev/write_net_rules который создает этот файл. Поэтому посмотрите, помогает ли отслеживание назад в этом файле, если оно применимо к вашему дистрибутиву, вы можете изменить его, чтобы решить вашу проблему.

Заметьте, это то, что я знаю из Suse версии 11, которая является старым способом Init, до systemd. Не уверен, что это изменилось для последних версий linux под systemd.

Я сдался, пытаясь сделать это чисто, и придумал следующий хак. Запустив следующий сценарий перед выключением vm и переносом, vm будет иметь eth0 в качестве сетевого адаптера при включении.

 ln -s /dev/null /etc/systemd/network/99-default.link; echo '# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet dhcp pre-up sleep 2' > /etc/network/interfaces sed -i.bak 's/GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 bios.devname=0 quiet"/' /etc/default/grub update-grub apt-get remove biosdevname -y || true; 

Строго говоря, apt-get remove biosdevname не требуется, поскольку этот пакет не установлен по умолчанию на ubuntu 16.04. Кроме того, добавление bios.devname=0 в GRUB_CMDLINE_LINUX_DEFAULT не требуется, поскольку biosdevname не установлено. Это предотвращает нарушение сети, если biosdevname когда-либо устанавливается в будущем.

  • systemd-networkd-wait-online.service не работает
  • Почему расширения конфиденциальности IPV6 не работают в Arch Linux?
  • systemd-networkd .net игнорируется в контейнере systemd-nspawn
  • Правильная настройка суффикса DNS Ubuntu 17.04?
  • Как я могу заставить свои пользовательские службы ждать, пока сеть не будет в сети?
  • systemd-networkd - как заставить новую конфигурацию без перезагрузки?
  • Как настроить параметры APN на моем модеме 4G на базе QMI?
  • Перезагрузите сетевые интерфейсы без перезагрузки
  • Получите WiFi SSID при подключении
  • IP-адрес удален из сетевого интерфейса, управляемого systemd-networkd
  • Переслать общедоступную сеть вокруг текущей сети
  • Linux и Unix - лучшая ОС в мире.