Настройка виртуальной машины в качестве маршрутизатора
В разделе описано, как настроить виртуальную машину в качестве маршрутизатора и с ее помощью организовать доступ в интернет для других машин в подсети.
Маршрутизатор позволяет перенаправлять трафик от одного сетевого интерфейса к другому. Принцип его работы состоит в следующем:
-
На сетевой интерфейс маршрутизатора приходит трафик от других машин подсети.
-
При прохождении трафика через маршрутизатор в заголовках IP-пакетов происходит подмена адреса источника.
-
Виртуальные машины в подсети получают доступ в интернет с помощью публичного IP-адреса, который назначен на сетевой интерфейс маршрутизатора.
Таким образом можно полностью контролировать трафик, не используя SNAT-шлюзы и другие облачные инструменты.
Перед началом работы
-
Если вы уже зарегистрированы, войдите под своей учетной записью.
-
Убедитесь, что для вашей учетной записи достаточно прав на проект. При необходимости настройте права или запросите их у администратора.
Создайте маршрутизатор
Маршрутизатор будет принимать трафик от других виртуальных машин в подсети.
-
На верхней панели слева нажмите
и выберите Управление → Виртуальные машины.
-
Нажмите Создать виртуальную машину.
-
Введите название виртуальной машины — «vm-router».
-
Укажите настройки:
-
Зона доступности — «ru.AZ-1».
-
Образ — «Ubuntu 22.04».
-
Гарантированная доля vCPU — 10%.
-
-
Нажмите Продолжить.
-
Подключите ВМ к подсети.
-
В блоке Сетевые настройки нажмите Подключить к подсети.
-
В поле Подсети выберите подсеть «Default_ru.AZ-1».
-
Скопируйте и сохраните адрес подсети: он потребуется для дальнейшей настройки.
-
Нажмите Подключить.
-
-
Назначьте ВМ публичный IP-адрес.
-
В поле Тип IP выберите Плавающий.
-
Нажмите Арендовать новый.
-
В поле Интерфейс выберите сетевой интерфейс, подключенный к подсети «Default_ru.AZ-1».
-
-
Настройте параметры авторизации пользователя.
-
В поле Логин введите имя пользователя виртуальной машины: например, «router».
-
Выберите пароль в качестве метода аутентификации.
-
Укажите пароль пользователя.
-
-
Нажмите Создать.
-
В строке созданной ВМ скопируйте и сохраните адрес из столбца Внутренний IP: он потребуется для дальнейшей настройки.
Создайте клиентскую ВМ
Клиентская виртуальная машина без публичного IP-адреса будет получать доступ в интернет через маршрутизатор.
-
На странице сервиса «Виртуальные машины» нажмите Создать виртуальную машину.
-
Введите название виртуальной машины — «vm-client».
-
Укажите настройки:
-
Зона доступности — «ru.AZ-1».
-
Образ — «Ubuntu 22.04».
-
Гарантированная доля vCPU — 10%.
-
-
Нажмите Продолжить.
-
Подключите ВМ к подсети.
-
В блоке Сетевые настройки нажмите Подключить к подсети.
-
В поле Подсети выберите подсеть «Default_ru.AZ-1».
-
Нажмите Подключить.
-
-
Отключите опцию Подключить публичный IP.
-
Настройте параметры авторизации пользователя.
-
В поле Логин введите имя пользователя виртуальной машины: например, «client».
-
Выберите пароль в качестве метода аутентификации.
-
Укажите пароль пользователя.
-
-
Нажмите Создать.
Настройте маршрутизатор
На маршрутизаторе необходимо настроить правила, по которым он управляет трафиком.
-
Нажмите на название виртуальной машины «vm-router».
-
Перейдите на вкладку Серийная консоль.
-
Введите логин и пароль пользователя, указанные при создании ВМ.
-
Включите маршрутизацию пакетов в параметрах ядра.
-
Проверьте текущий статус параметра. Выполните команду:
cat /proc/sys/net/ipv4/ip_forwardРезультат выполнения команды:
-
1 — параметр включен, можно переходить к п. 5;
-
0 — параметр выключен, нужно внести изменения в файле /etc/sysctl.conf.
-
-
Откройте файл /etc/sysctl.conf для редактирования:
sudo nano /etc/sysctl.conf -
Найдите строку #net.ipv4.ip_forward=1 и удалите знак # в начале. Сохраните изменения.
-
Примените изменения:
sudo sysctl -p /etc/sysctl.conf
-
-
Создайте правило маршрутизации, которое при передаче трафика подменяет IP-адрес виртуальных машин в подсети на IP-адрес маршрутизатора:
sudo iptables -t nat -A POSTROUTING -o enp3s0 -s <адрес_подсети> -j SNAT --to <внутренний_IP_маршрутизатора>Где:
-
<адрес_подсети> — адрес подсети «Default_ru.AZ-1».
-
<внутренний_IP_маршрутизатора> — внутренний IP-адрес виртуальной машины «vm-router».
-
-
Сохраните правило:
sudo mkdir /etc/iptables && touch /etc/iptables/iptables.rules && iptables-save > /etc/iptables/iptables.rules
Настройте сетевой интерфейс маршрутизатора
На сетевом интерфейсе маршрутизатора необходимо отключить проверку адресов источника и назначения.
-
Выберите виртуальную машину «vm-router».
-
Перейдите на вкладку Сетевые параметры.
-
В разделе Подсети нажмите на название подсети «Default_ru.AZ-1».
-
Перейдите на вкладку Интерфейсы.
-
В строке нужного интерфейса нажмите
и выберите Свойства.
-
Отключите опцию Проверка адреса источника/назначения.
-
Подтвердите отключение.
Настройте клиентскую ВМ
После настройки маршрутизатора нужно изменить статические маршруты на клиентской ВМ.
-
Выберите виртуальную машину «vm-client».
-
Перейдите на вкладку Серийная консоль.
-
Введите логин и пароль пользователя, указанные при создании ВМ.
-
Удалите маршрут по умолчанию:
sudo ip r delete default -
Добавьте новый маршрут по умолчанию, который указывает на «vm-router»:
sudo ip r add default via <внутренний_IP_маршрутизатора> dev enp3s0Где <внутренний_IP_маршрутизатора> — внутренний IP-адрес виртуальной машины «vm-router».
-
Измените маршруты к DNS-серверам на «vm-client»:
sudo ip r add 8.8.8.8 via <внутренний_IP_маршрутизатора> dev enp3s0sudo ip r add 8.8.4.4 via <внутренний_IP_маршрутизатора> dev enp3s0 -
Проверьте доступ в интернет с помощью команды 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 ms64 bytes from 185.71.64.201 (185.71.64.201): icmp_seq=2 ttl=57 time=2.53 ms64 bytes from 185.71.64.201 (185.71.64.201): icmp_seq=3 ttl=57 time=1.82 ms64 bytes from 185.71.64.201 (185.71.64.201): icmp_seq=4 ttl=57 time=1.88 ms64 bytes from 185.71.64.201 (185.71.64.201): icmp_seq=5 ttl=57 time=1.71 ms64 bytes from 185.71.64.201 (185.71.64.201): icmp_seq=6 ttl=57 time=1.79 ms64 bytes from 185.71.64.201 (185.71.64.201): icmp_seq=7 ttl=57 time=1.67 ms64 bytes from 185.71.64.201 (185.71.64.201): icmp_seq=8 ttl=57 time=1.58 ms64 bytes from 185.71.64.201 (185.71.64.201): icmp_seq=9 ttl=57 time=1.65 ms64 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».
- Перед началом работы
- Создайте маршрутизатор
- Создайте клиентскую ВМ
- Настройте маршрутизатор
- Настройте сетевой интерфейс маршрутизатора
- Настройте клиентскую ВМ