Настройка виртуальной машины в качестве маршрутизатора
В разделе описано, как настроить виртуальную машину в качестве маршрутизатора и с ее помощью организовать доступ в интернет для других машин в подсети.
Маршрутизатор позволяет перенаправлять трафик от одного сетевого интерфейса к другому. Принцип его работы состоит в следующем:
На сетевой интерфейс маршрутизатора приходит трафик от других машин подсети.
При прохождении трафика через маршрутизатор в заголовках 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».
- Перед началом работы
- Создайте маршрутизатор
- Создайте клиентскую ВМ
- Настройте маршрутизатор
- Настройте сетевой интерфейс маршрутизатора
- Настройте клиентскую ВМ