VK Private Cloud logo
Помощь
Обновлена 31 июля 2026 г. в 18:08

Механизм подключения ВМ к сети

В подключении ВМ к любой сети (внутренней или внешней) всегда участвуют:

  • порт ВМ,
  • DHCP-настройки,
  • гипервизор.

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

Если ВМ подключается к двум или более сетям, механизм повторяется для каждой сети: создается отдельный порт, выделяется отдельный IP-адрес и создается отдельный интерфейс в Libvirt.

Схема механизма подключения ВМ к сети приведена на рисунке 1.

Механизм подключения ВМ к сети
Рисунок 1 — Механизм подключения ВМ к сети

Порт ВМ

При подключении ВМ к сети в OpenStack создается порт — объект, который регистрирует параметры подключения и передает их в гипервизор.

Ключевые параметры порта ВМ:

  • binding_host_id — узел, на котором расположен порт. Это тот же вычислительный узел, на котором расположена ВМ.
  • device_owner — тип владельца порта. Значение compute:<ЗОНА_ДОСТУПНОСТИ> означает, что это порт виртуальной машины.
  • fixed_ips — назначенный IP-адрес и идентификатор подсети.
  • mac_address — MAC-адрес порта.

Пример информации о порте ВМ:

# openstack port show <ID_ПОРТА_ВМ>+-------------------------+------------------------------------------------------+| Field                   | Value                                                |+-------------------------+------------------------------------------------------+| admin_state_up          | UP                                                   || allowed_address_pairs   |                                                      || binding_host_id         | <ИМЯ_ВЫЧИСЛИТЕЛЬНОГО_УЗЛА>                           | | binding_profile         |                                                      || binding_vif_details     | ovs_hybrid_plug='True', port_filter='True'           || binding_vif_type        | ovs                                                  || binding_vnic_type       | normal                                               || data_plane_status       | None                                                 || description             |                                                      || device_id               | <ID_ВМ>                                              || device_owner            | compute:<ЗОНА_ДОСТУПНОСТИ>                           | | device_profile          | None                                                 || dns_assignment          | hostname='<ИМЯ_ВМ>', ip_address='<IP-АДРЕС_ВМ>'      | | dns_domain              | None                                                 || dns_name                | <ИМЯ_ВМ>                                             || extra_dhcp_opts         |                                                      || fixed_ips               | ip_address='<IP-АДРЕС_ВМ>', subnet_id='<ID_ПОДСЕТИ>' || hardware_offload_type   |                                                      || hints                   |                                                      || id                      | <ID_ПОРТА>                                           || ip_allocation           | None                                                 || mac_address             | <MAC-АДРЕС>                                          || name                    |                                                      || network_id              | <ID_СЕТИ>                                            || numa_affinity_policy    | None                                                 || port_security_enabled   | True                                                 || project_id              | <PROJECT_ID>                                         || propagate_uplink_status | None                                                 || resource_request        | None                                                 || revision_number         | 10                                                   || qos_network_policy_id   | None                                                 || qos_policy_id           | None                                                 || security_group_ids      |                                                      || status                  | ACTIVE                                               || tags                    |                                                      || trunk_details           | None                                                 |+-------------------------+------------------------------------------------------+

DHCP-настройки

DHCP-сервер привязывает MAC-адрес виртуальной машины к IP-адресу и сетевым настройкам (DNS, шлюз). Благодаря этому:

  • ВМ получает одни и те же настройки при каждой перезагрузке.
  • Можно подключить ВМ к любой сети — внутренней или внешней — и IP-адрес будет назначен автоматически.
  • Не нужно задавать статический IP-адрес вручную в операционной системе ВМ — все сетевые настройки ВМ получает автоматически.

Привязка MAC-адреса ВМ к IP-адресу хранится на управляющем или сетевом узле:

# cat /var/lib/neutron/dhcp/<ID_СЕТИ>/host<MAC-АДРЕС_ВМ>,<ИМЯ_ВМ>.mcs.local.,<IP-АДРЕС_ВМ>

В операционной системе ВМ сетевой интерфейс настроен на получение параметров по DHCP:

$ ip a2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1350    link/ether <MAC-АДРЕС_ВМ> brd ff:ff:ff:ff:ff:ff    inet <IP-АДРЕС_ВМ>/24 metric 100 brd scope global dynamic ens3       valid_lft 572893sec preferred_lft 572893sec$ sudo cat /etc/netplan/50-cloud-init.yamlnetwork:  version: 2  ethernets:    ens3:      match:        macaddress: "<MAC-АДРЕС_ВМ>"      dhcp4: true      set-name: "ens3"      mtu: 1350

Гипервизор

Сервис nova-compute передает гипервизору (Libvirt, KVM, QEMU) XML-файл с конфигурацией ВМ с указанием имени интерфейса и MAC-адреса. Гипервизор разворачивает ВМ с параметрами из конфигурации, а Libvirt создает tap-интерфейс. ВМ после загрузки ОС получает сетевые настройки от DHCP-сервера.

# virsh dumpxml <ИМЯ_ВМ> | grep tap    <nova:port id="<ID_ПОРТА>" devname="tap<ID_ПОРТА>"/>  <target dev='tap<ID_ПОРТА>' managed='no'/># ip a | grep tap<ID_ПОРТА>14: tap<ID_ПОРТА>: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1350 ...