Evolution
Тема интерфейса

Настройка виртуальной машины в качестве маршрутизатора

Эта статья полезна?

С помощью этого руководства вы настроите виртуальную машину в качестве маршрутизатора и с ее помощью организуете доступ в интернет для других машин в подсети.

Маршрутизатор позволяет перенаправлять трафик от одного сетевого интерфейса к другому. Принцип его работы состоит в следующем:

  1. На сетевой интерфейс маршрутизатора приходит трафик от других машин подсети.

  2. При прохождении трафика через маршрутизатор в заголовках IP-пакетов происходит подмена адреса источника.

  3. Виртуальные машины в подсети получают доступ в интернет с помощью публичного IP-адреса, который назначен на сетевой интерфейс маршрутизатора.

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

../_images/schm__vm-router.svg

Вы будете использовать следующие сервисы:

Шаги:

Перед началом работы

  1. Если вы уже зарегистрированы, войдите под своей учетной записью.

  2. Убедитесь, что для вашей учетной записи достаточно прав на проект. При необходимости настройте права или запросите их у администратора.

1. Разверните ресурсы в облаке

На этом шаге вы создадите две виртуальные машины: маршрутизатор и клиент. Маршрутизатор будет принимать трафик от других ВМ в подсети. Клиентская виртуальная машина без публичного IP-адреса будет получать доступ в интернет через маршрутизатор.

  1. Создайте виртуальную машину со следующими параметрами:

    • Названиеvm-router.

    • Зона доступностиru.AZ-1.

    • Образ — публичный образ Ubuntu 22.04.

    • Сетевой интерфейс — выберите тип Подсеть с публичным IP.

    • VPCDefault.

    • ПодсетьDefault_ru.AZ-1.

      Скопируйте и сохраните адрес подсети: он потребуется для дальнейшей настройки.

    • Публичный IP — оставьте Арендовать новый или выберите IP-адрес из списка арендованных.

    • Логинrouter.

    • Метод аутентификацииПароль.

    • Пароль — задайте пароль пользователя.

  2. В строке ВМ vm-router скопируйте и сохраните адрес из столбца Внутренний IP: он потребуется для дальнейшей настройки.

  3. Создайте виртуальную машину со следующими параметрами:

    • Названиеvm-client.

    • Зона доступностиru.AZ-1.

    • Образ — публичный образ Ubuntu 22.04.

    • Сетевой интерфейс — выберите тип Подсеть.

    • VPCDefault.

    • ПодсетьDefault_ru.AZ-1.

    • Логинclient.

    • Метод аутентификацииПароль.

    • Пароль — задайте пароль пользователя.

2. Настройте маршрутизатор

На маршрутизаторе необходимо настроить правила, по которым он управляет трафиком.

  1. Нажмите на название виртуальной машины vm-router.

  2. Перейдите на вкладку Серийная консоль.

  3. Введите логин и пароль пользователя, указанные при создании ВМ.

  4. Включите маршрутизацию пакетов в параметрах ядра.

    1. Проверьте текущий статус параметра. Выполните команду:

      cat /proc/sys/net/ipv4/ip_forward

      Результат выполнения команды:

      • 1 — параметр включен, можно переходить к п. 5;

      • 0 — параметр выключен, нужно внести изменения в файле /etc/sysctl.conf.

    2. Откройте файл /etc/sysctl.conf для редактирования:

      sudo nano /etc/sysctl.conf
    3. Найдите строку #net.ipv4.ip_forward=1 и удалите знак # в начале. Сохраните изменения.

    4. Примените изменения:

      sudo sysctl -p /etc/sysctl.conf
  5. Создайте правило маршрутизации, которое при передаче трафика подменяет IP-адрес виртуальных машин в подсети на IP-адрес маршрутизатора:

    sudo iptables -t nat -A POSTROUTING -o enp3s0 -s <subnet_address> -j SNAT --to <internal_router_ip>

    Где:

    • <subnet_address> — адрес подсети Default_ru.AZ-1.

    • <internal_router_ip> — внутренний IP-адрес виртуальной машины vm-router.

  6. Сохраните правило:

    sudo mkdir /etc/iptables && touch /etc/iptables/iptables.rules && iptables-save > /etc/iptables/iptables.rules

3. Настройте сетевой интерфейс маршрутизатора

На сетевом интерфейсе маршрутизатора необходимо отключить проверку адресов источника и назначения.

  1. На странице сервиса «Виртуальные машины» выберите виртуальную машину vm-router.

  2. Перейдите на вкладку Сетевые параметры.

  3. В правом верхнем углу блока нужного сетевого интерфейса нажмите Горизонтальное меню и выберите Свойства.

  4. Отключите опцию Проверка адреса источника/назначения.

  5. Подтвердите отключение.

4. Настройте клиентскую ВМ

После настройки маршрутизатора нужно изменить статические маршруты на клиентской ВМ.

  1. На странице сервиса «Виртуальные машины» выберите виртуальную машину vm-client.

  2. Перейдите на вкладку Серийная консоль.

  3. Введите логин и пароль пользователя, указанные при создании ВМ.

  4. Удалите маршрут по умолчанию:

    sudo ip r delete default
  5. Добавьте новый маршрут по умолчанию, который указывает на vm-router:

    sudo ip r add default via <internal_router_ip> dev enp3s0

    Где <internal_router_ip> — внутренний IP-адрес виртуальной машины vm-router.

  6. Измените маршруты к DNS-серверам на vm-client:

    sudo ip r add 8.8.8.8 via <internal_router_ip> dev enp3s0
    sudo ip r add 8.8.4.4 via <internal_router_ip> dev enp3s0
  7. Проверьте доступ в интернет с помощью команды ping:

    ping -c 10 cloud.ru

    Убедитесь, что пакеты возвращаются. Пример ответа команды:

    PING cloud.ru (185.71.64.201) 56(84) bytes of data.
    64 bytes from 185.71.64.201 (185.71.64.201): icmp_seq=1 ttl=57 time=5.55 ms
    64 bytes from 185.71.64.201 (185.71.64.201): icmp_seq=2 ttl=57 time=2.53 ms
    64 bytes from 185.71.64.201 (185.71.64.201): icmp_seq=3 ttl=57 time=1.82 ms
    64 bytes from 185.71.64.201 (185.71.64.201): icmp_seq=4 ttl=57 time=1.88 ms
    64 bytes from 185.71.64.201 (185.71.64.201): icmp_seq=5 ttl=57 time=1.71 ms
    64 bytes from 185.71.64.201 (185.71.64.201): icmp_seq=6 ttl=57 time=1.79 ms
    64 bytes from 185.71.64.201 (185.71.64.201): icmp_seq=7 ttl=57 time=1.67 ms
    64 bytes from 185.71.64.201 (185.71.64.201): icmp_seq=8 ttl=57 time=1.58 ms
    64 bytes from 185.71.64.201 (185.71.64.201): icmp_seq=9 ttl=57 time=1.65 ms
    64 bytes from 185.71.64.201 (185.71.64.201): icmp_seq=10 ttl=57 time=1.97 ms
    --- cloud.ru ping statistics ---
    10 packets transmitted, 10 received, 0% packet loss, time 13059ms

Теперь трафик с vm-client передается в интернет через vm-router.

Результат

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