Yandex Cloud
August 25, 2022

Оторвать внешний адрес у ВМ и прикрепить его снова.

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

В качестве отправной точки для данного мануала будем использовать созданную ранее ВМ с Debian и внешним адресом: https://teletype.in/@cameda/ntq8QNHIsG1

Сначала посмотрим как оторвать и привязать динамический адрес:

export VM=fhm6opbofkt2tvlovq7r
yc compute instance remove-one-to-one-nat --id=$VM --network-interface-index=0
yc compute instance add-one-to-one-nat --id $VM --network-interface-index=0

Адреса на ВМ до удаления:

yc compute instance get $VM --format=json | jq -r '.network_interfaces' | grep address
    "mac_address": "d0:0d:6c:65:78:7d",
    "primary_v4_address": {
      "address": "10.128.0.9",
        "address": "84.252.128.238"

Адреса на ВМ после удаления:

yc compute instance get $VM --format=json | jq -r '.network_interfaces' | grep address
    "mac_address": "d0:0d:6c:65:78:7d",
    "primary_v4_address": {
      "address": "10.128.0.9"

Адрес на ВМ после добавления адреса:

yc compute instance get $VM --format=json | jq -r '.network_interfaces' | grep address
    "mac_address": "d0:0d:6c:65:78:7d",
    "primary_v4_address": {
      "address": "10.128.0.9",
        "address": "84.201.156.177"

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

Создадим статический адрес в той же зоне доступности, что и наша ВМ:

yc vpc address create --external-ipv4 zone=ru-central1-a

Готово!

id: e9bai2k0bk1rjprqfb6o
created_at: "2022-08-25T09:19:55Z"
external_ipv4_address:
  address: 84.201.128.98
  zone_id: ru-central1-a
  requirements: {}
reserved: true
type: EXTERNAL
ip_version: IPV4

Теперь оторвём динамический адрес у нашей ВМ и прикрепим статический:

yc compute instance remove-one-to-one-nat --id=$VM --network-interface-index=0
yc compute instance add-one-to-one-nat --id $VM --network-interface-index=0 --nat-address 84.201.128.98

Проверяем, что всё правильно прикрепилось:

yc compute instance get $VM --format=json | jq -r '.network_interfaces' | grep address
    "mac_address": "d0:0d:6c:65:78:7d",
    "primary_v4_address": {
      "address": "10.128.0.9",
        "address": "84.201.128.98"

Статический адрес уже никуда не потеряется при выключении/перезагрузки ВМ.