---
title: 'Восстановить порядок портов на облачном сервере после выключения или разморозки'
sidebar_label: 'Восстановить порядок портов'
sidebar_position: 6
description: 'Как настроить порядок портов на облачном сервере после выключения или разморозки'
---

import Formbricks from '@theme/MDXComponents/Formbricks'
import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
import {CustomTable} from '@selectel/docux/components'
import {TabItemLabel} from '@selectel/docux/components'

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

Когда к облачному серверу добавляются порты, для них создаются виртуальные сетевые карты, которые подключаются к PCI-шине сервера.
Слоты на PCI-шине (PCI-адреса) выдаются в хронологическом порядке — чем раньше подключен порт, тем меньше у него PCI-адрес.
Имена сетевых интерфейсов присваиваются портам в соответствии с порядком PCI-адресов — например, сначала `eth0`, затем `eth1` и так далее.

Когда сервер выключается и включается либо замораживается и размораживается, сетевые карты заново занимают слоты на PCI-шине и получают PCI-адреса.

Если перед этим один из портов сервера был удален, оставшиеся сетевые карты на PCI сместятся, заняв свободный PCI-адрес и имя интерфейса.
Имена интерфейсов будут заново выданы по порядку: интерфейсы, добавленные позже удаленного, сместятся на одно имя.
Если имена интерфейсов используются в конфигурациях сетевых настроек, порт окажется привязанным к другой сети и может произойти потеря сетевой связности с облачным сервером.

:::note

Например, на облачном сервере было три порта.
Вы удалили порт `eth0`, а затем выключили и включили облачный сервер.
Имя интерфейса `eth0` и его PCI-адрес применятся к порту, который был добавлен далее по хронологии.
Имя интерфейса `eth1` и его PCI-адрес применятся к следующему порту.
Таким образом, конфигурация сетевых настроек, привязанная к именам `eth0` и `eth1`, будет работать с другими сетями.

:::

Если в ОС сервера настроен `cloud-init` и сетевые настройки задаются через него, при включении или разморозке сервера сетевые настройки обновятся автоматически, но имена сетевых интерфейсов не обновятся в скриптах и ручных настройках.
Если `cloud-init` и сеть настроена статически через файлы конфигураций (`/etc/network/interfaces`, `ifcfg-*` и другие), связность будет нарушена.

Если порядок портов изменился, вы можете [восстановить его](#fix-ports-order).
Вы также можете [привязать имя интерфейса к MAC-адресу](#match-port-to-mac).
Тогда при удалении портов облачного сервера и его выключении и включении порядок портов не будет смещаться.

Порядок портов на PCI не меняется:

* при живой миграции данных работающего облачного сервера на другой;
* [программной перезагрузке](/cloud-servers/manage/reboot-server.mdx#perform-soft-reboot) из [панели управления](https://my.selectel.ru/) или из ОС.

## Восстановить порядок портов \{#fix-ports-order}

1. [Проверьте настройки портов](#check-ports-settings).

2. [Настройте порядок портов](#set-up-ports-order).

### 1. Проверить настройки портов \{#check-ports-settings}

1. [Подключитесь к облачному серверу](/cloud-servers/manage/connect-to-server.mdx).

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

   ```bash
   ip link show
   ```

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

   ```bash
   lspci | grep Ethernet
   ```

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

   ```bash
   ethtool -i <interface_name> | grep bus-info
   ```

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

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

### 2. Настроить порядок портов \{#set-up-ports-order}

:::warning

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

:::

<Tabs queryString="set-up-ports-order">
  <TabItem value="manually">
    <TabItemLabel>
      Вручную
    </TabItemLabel>

    1. [Подключитесь к облачному серверу](/cloud-servers/manage/connect-to-server.mdx).

    2. [Отключите все порты](/cloud-servers/cloud-networks/ports.mdx#disable-port), чьи порядковые номера в имени интерфейса (например, `ethX`) больше удаленного.

    3. [Подключите порты](/cloud-servers/cloud-networks/ports.mdx#enable-port) — сначала порт, который должен получить меньший номер, затем остальные по порядку.
       Новые порты получат меньшие номера.

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

    5. [Проверьте настройки портов](#check-ports-settings).
  </TabItem>

  <TabItem value="with-reboot">
    <TabItemLabel>
      Через перезагрузку
    </TabItemLabel>

    1. [Выключите облачный сервер](/cloud-servers/manage/manage-server.mdx#turn-off-server).

    2. [Включите облачный сервер](/cloud-servers/manage/manage-server.mdx#turn-on-server) — порты перестроятся по хронологии добавления.

    3. [Проверьте настройки портов](#check-ports-settings).

    4. При необходимости [обновите сетевые настройки](/cloud-servers/cloud-networks/update-network-settings.mdx#configure-static-routing) на облачном сервере.
  </TabItem>
</Tabs>

## Привязать имя интерфейса к MAC-адресу \{#match-port-to-mac}

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

1. [Подключитесь к облачному серверу](/cloud-servers/manage/connect-to-server.mdx).

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

   ```bash
   nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
   ```

3. Отключите управление сетью в `cloud-init`. Для этого добавьте параметр в конфигурационном файле:

   ```yaml
   network: {config: disabled}
   ```

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

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

   ```bash
   nano /etc/netplan/config.yaml
   ```

6. Измените сетевые настройки:

   ```yaml
   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. Проверьте синтаксис файла:

   ```bash
   sudo netplan try
   ```

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

   ```bash
   sudo netplan apply
   ```

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

    ```bash
    ip link show
    ```

<Formbricks />
