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

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

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

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

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

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

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

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

../_images/schm__vm-router.svg

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

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

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

Создайте маршрутизатор

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

  1. На верхней панели слева нажмите Кнопка с изображением девяти точек и выберите Инфраструктура → Виртуальные машины.

  2. Нажмите Создать виртуальную машину.

  3. Введите название виртуальной машины — «vm-router».

  4. Укажите настройки:

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

    • Образ — «Ubuntu 22.04».

    • Гарантированная доля vCPU — 10%.

  5. Нажмите Продолжить.

  6. Подключите ВМ к подсети.

    1. В блоке Сетевые настройки нажмите Подключить к подсети.

    2. В поле Подсети выберите подсеть «Default_ru.AZ-1».

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

    4. Нажмите Подключить.

  7. Назначьте ВМ публичный IP-адрес.

    1. В поле Тип IP выберите Плавающий.

    2. Нажмите Арендовать новый.

    3. В поле Интерфейс выберите сетевой интерфейс, подключенный к подсети «Default_ru.AZ-1».

  8. Настройте параметры авторизации пользователя.

    1. В поле Логин введите имя пользователя виртуальной машины: например, «router».

    2. Выберите пароль в качестве метода аутентификации.

    3. Укажите пароль пользователя.

  9. Нажмите Создать.

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

Создайте клиентскую ВМ

Клиентская виртуальная машина без публичного IP-адреса будет получать доступ в интернет через маршрутизатор.

  1. На странице сервиса «Виртуальные машины» нажмите Создать виртуальную машину.

  2. Введите название виртуальной машины — «vm-client».

  3. Укажите настройки:

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

    • Образ — «Ubuntu 22.04».

    • Гарантированная доля vCPU — 10%.

  4. Нажмите Продолжить.

  5. Подключите ВМ к подсети.

    1. В блоке Сетевые настройки нажмите Подключить к подсети.

    2. В поле Подсети выберите подсеть «Default_ru.AZ-1».

    3. Нажмите Подключить.

  6. Отключите опцию Подключить публичный IP.

  7. Настройте параметры авторизации пользователя.

    1. В поле Логин введите имя пользователя виртуальной машины: например, «client».

    2. Выберите пароль в качестве метода аутентификации.

    3. Укажите пароль пользователя.

  8. Нажмите Создать.

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

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

  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 <адрес_подсети> -j SNAT --to <внутренний_IP_маршрутизатора>

    Где:

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

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

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

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

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

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

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

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

  3. В разделе Подсети нажмите на название подсети «Default_ru.AZ-1».

  4. Перейдите на вкладку Интерфейсы.

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

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

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

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

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

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

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

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

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

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

    sudo ip r add default via <внутренний_IP_маршрутизатора> dev enp3s0

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

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

    sudo ip r add 8.8.8.8 via <внутренний_IP_маршрутизатора> dev enp3s0
    sudo ip r add 8.8.4.4 via <внутренний_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».