Облачная платформаEvolution

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


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

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

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

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

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

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

../_images/schm__vm-router.svg

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

Шаги:

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

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

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

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

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

  1. Зарегистрируйтесь в личном кабинете Cloud.ru.

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

  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.

Результат

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