Восстановить порядок портов на облачном сервере после выключения или разморозки
Когда к облачному серверу добавляются порты, для них создаются виртуальные сетевые карты, которые подключаются к PCI-шине сервера.
Слоты на PCI-шине (PCI-адреса) выдаются в хронологическом порядке — чем раньше подключен порт, тем меньше у него PCI-адрес.
Имена сетевых интерфейсов присваиваются портам в соответствии с порядком PCI-адресов — например, сначала eth0, затем eth1 и так далее.
Когда сервер выключается и включается либо замораживается и размораживается, сетевые карты заново занимают слоты на PCI-шине и получают PCI-адреса.
Если перед этим один из портов сервера был удален, оставшиеся сетевые карты на PCI сместятся, заняв свободный PCI-адрес и имя интерфейса. Имена интерфейсов будут заново выданы по порядку: интерфейсы, добавленные позже удаленного, сместятся на одно имя. Если имена интерфейсов используются в конфигурациях сетевых настроек, порт окажется привязанным к другой сети и может происходить потеря сетевой связности с облачным сервером.
Например, на облачном сервере было три порта.
Вы удалили порт eth0, а затем выключили и включили облачный сервер.
Имя интерфейса eth0 и его PCI-адрес применятся к порту, который был добавлен далее по хронологии.
Имя интерфейса eth1 и его PCI-адрес применятся к следующему порту.
Таким образом, конфигурация сетевых настроек, привязанная к именам eth0 и eth1, будет работать с другими сетями.
Если в ОС сервера настроен cloud-init и сетевые настройки задаются через него, при включении или разморозке сервера сетевые настройки обновятся автоматически, но имена сетевых интерфейсов не обновятся в скриптах и ручных настройках.
Если cloud-init и сеть настроена статически через файлы конфигураций (/etc/network/interfaces, ifcfg-* и другие), связность будет нарушена.
Если порядок портов изменился, вы можете восстановить его. Вы также можете привязать имя интерфейса к MAC-адресу. Тогда при удалении портов облачного сервера и его выключении и включении порядок портов не будет смещаться.
Порядок портов на PCI не меняется:
- при живой миграции данных работающего облачного сервера на другой;
- программной перезагрузке из панели управления или из ОС.
Восстановить порядок портов
1. Проверить настройки портов
-
Проверьте соответствие MAC-адресов и имен интерфейсов:
ip link show -
Проверьте расположение портов на PCI:
lspci | grep Ethernet -
Проверьте соответствие имени и расположение на PCI для каждого интерфейса:
ethtool -i <interface_name> | grep bus-infoУкажите
<interface_name>— имя сетевого интерфейса. -
Сравните полученные MAC-адреса с настройками в
/etc/netplan/50-cloud-init.yamlили аналогичном файле сетевой конфигурации.
2. Настроить порядок портов
В ходе настройки нужно будет отключить и подключить порты сервера или выключить сервер. Это приведет к кратковременной потере сетевой связности.
Вручную
Через перезагрузку
-
Отключите все порты, чьи порядковые номера в имени интерфейса (например,
ethX) больше удаленного. -
Подключите порты — сначала порт, который должен получить меньший номер, затем остальные по порядку. Новые порты получат меньшие номера.
-
Если в ОС используется файл конфигурации, который обновляется вручную, обновите IP-адреса, шлюзы и другие сетевые параметры в соответствии с новыми MAC-адресами.
Привязать имя интерфейса к MAC-адресу
Чтобы предотвратить смещение имен сетевых интерфейсов относительно настроенных IP-адресов, вы можете зафиксировать их в сетевых настройках облачного сервера.
-
Если в ОС установлени
cloud-init, создайте конфигурационный файл99-disable-network-config.cfg:nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg -
Отключите управление сетью в
cloud-init. Для этого добавьте параметр в конфигурационном файле:network: {config: disabled} -
Выйдите из текстового редактора
nanoс сохранением изменений: нажмите Ctrl+Х, а затем Y+Enter. -
Откройте файл конфигурации сети:
nano /etc/netplan/config.yaml -
Измените сетевые настройки:
network:version: 2ethernets:<interface_name>:match:macaddress: "<mac_address>"set-name: "<interface_name>"addresses:- <ip_address>routes:- to: <destination_subnet>via: <gateway>...Укажите:
<mac_address>– MAC-адрес сетевого интерфейса;<interface_name>— имя сетевого интерфейса;<ip_address>— IP-адрес облачного сервера, который соответствует интерфейсу, с указанием маски подсети, например192.168.0.5/29;<destination_subnet>— для статических маршрутов: CIDR подсетей назначения, в которые будет направляться трафик, например172.16.0.8/29.<gateway>— шлюз подсети.
-
Выйдите из текстового редактора
nanoс сохранением изменений: нажмите Ctrl+Х, а затем Y+Enter. -
Проверьте синтаксис файла:
sudo netplan try -
Примените настройки:
sudo netplan apply -
Проверьте настройки, для этого выведите информацию о сетевых интерфейсах:
ip link show