Перейти к основному содержимому

Восстановить порядок портов на облачном сервере после выключения или разморозки

Когда к облачному серверу добавляются порты, для них создаются виртуальные сетевые карты, которые подключаются к 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. Проверьте настройки портов.

  2. Настройте порядок портов.

1. Проверить настройки портов

  1. Подключитесь к облачному серверу.

  2. Проверьте соответствие MAC-адресов и имен интерфейсов:

    ip link show
  3. Проверьте расположение портов на PCI:

    lspci | grep Ethernet
  4. Проверьте соответствие имени и расположение на PCI для каждого интерфейса:

    ethtool -i <interface_name> | grep bus-info

    Укажите <interface_name> — имя сетевого интерфейса.

  5. Сравните полученные MAC-адреса с настройками в /etc/netplan/50-cloud-init.yaml или аналогичном файле сетевой конфигурации.

2. Настроить порядок портов

warning

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

  1. Подключитесь к облачному серверу.

  2. Отключите все порты, чьи порядковые номера в имени интерфейса (например, ethX) больше удаленного.

  3. Подключите порты — сначала порт, который должен получить меньший номер, затем остальные по порядку. Новые порты получат меньшие номера.

  4. Если в ОС используется файл конфигурации, который обновляется вручную, обновите IP-адреса, шлюзы и другие сетевые параметры в соответствии с новыми MAC-адресами.

  5. Проверьте настройки портов.

Привязать имя интерфейса к MAC-адресу

Чтобы предотвратить смещение имен сетевых интерфейсов относительно настроенных IP-адресов, вы можете зафиксировать их в сетевых настройках облачного сервера.

  1. Подключитесь к облачному серверу.

  2. Если в ОС установлени cloud-init, создайте конфигурационный файл 99-disable-network-config.cfg:

    nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
  3. Отключите управление сетью в cloud-init. Для этого добавьте параметр в конфигурационном файле:

    network: {config: disabled}
  4. Выйдите из текстового редактора nano с сохранением изменений: нажмите Ctrl+Х, а затем Y+Enter.

  5. Откройте файл конфигурации сети:

    nano /etc/netplan/config.yaml
  6. Измените сетевые настройки:

    network:
    version: 2
    ethernets:
    <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> — шлюз подсети.
  7. Выйдите из текстового редактора nano с сохранением изменений: нажмите Ctrl+Х, а затем Y+Enter.

  8. Проверьте синтаксис файла:

    sudo netplan try
  9. Примените настройки:

    sudo netplan apply
  10. Проверьте настройки, для этого выведите информацию о сетевых интерфейсах:

    ip link show