Если у вас есть несколько виртуальных серверов в облаке NetAngels и только один из них имеет белый IP-адрес, вы можете использовать этот сервер как шлюз для выхода в интернет для остальных машин. Такое решение безопасно и позволяет эффективно использовать адресное пространство. В этой инструкции мы подробно рассмотрим настройку шлюза на базе Linux с помощью iptables.
Для примера мы будем использовать VDS с двумя сетевыми интерфейсами:
eth0 с белым IP-адресом 80.80.80.80 — для выхода в интернет;
eth1 с серым (приватным) IP-адресом 192.168.0.1 — для связи с внутренними серверами в сети 192.168.0.0/24.
Подключить приватную сеть между VDS можно по инстуркции
Подключитесь к серверу, который будет выполнять роль шлюза, по SSH. Все дальнейшие действия выполняются на этой машине.
1.1. Устанавливаем утилиты Установите необходимые пакеты одной командой:
sudo apt update && apt install -y iptables iptables-persistent
1.2. Добавляем правила маршрутизации Необходимо разрешить пересылку трафика между интерфейсами и настроить трансляцию адресов (NAT). Это позволит серверам из приватной сети выходить в интернет, используя белый IP-адрес шлюза. Выполните следующие команды:
sudo iptables -A FORWARD -i eth0 -o eth1 -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE
1.3. Сохраняем правила
После перезагрузки сервера все добавленные правила сбрасываются. Чтобы этого избежать, сохраните текущую конфигурацию iptables:
sudo netfilter-persistent save
1.4. Включаем форвардинг в ядре
По умолчанию Linux не пересылает пакеты между интерфейсами. Разрешите это явно. Откройте файл /etc/sysctl.conf:
sudo nano /etc/sysctl.conf
Добавьте в конец файла или раскомментируйте (уберите символ # в начале) следующие строки:
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.all.forwarding=1
Сохраните файл и примените изменения:
sudo sysctl --system
Примечание: В старых версиях дистрибутивов может использоваться команда
sysctl -p.
На этом настройка сервера-шлюза завершена.
Теперь подключитесь к виртуальной машине, которую нужно сделать клиентом шлюза. Её задача — отправлять весь внешний трафик через шлюз 192.168.0.1.
2.1. Добавляем временный маршрут Для быстрой проверки связи можно добавить маршрут вручную. Выполните на клиенте:
sudo ip route add default via 192.168.0.1 dev eth1 onlink
Ключ onlink позволяет добавить маршрут, даже если сеть на интерфейсе eth1 не является непосредственно достижимой (в данном случае это стандартный безопасный способ).
2.2. Настраиваем автоматическое добавление маршрута Чтобы маршрут не исчезал после перезагрузки клиента, добавим его в автозагрузку. Для этого модифицируем скрипт, котрый отвечает за настройку сети через наш гостевой агент. . Откройте файл настройки сети:
sudo nano /etc/network/if-up.d/phoenix-ga-netinit
Вставьте следующее содержимое:
if [ "$IFACE" = "eth1" ]; then
/sbin/ip route add default via 192.168.0.1 dev eth1 onlink
fi
Содержиоме нужно вставить после строки /usr/sbin/phoenix-ga netinit --configure-iface $IFACE
На клиентской машине выполните команду:
sudo ip route show
Вы должны увидеть строку, похожую на: default via 192.168.0.1 dev eth1.
Для проверки самого соединения выполните пинг любого доступного хоста в интернете, например:
ping 8.8.8.8
А также по доменному имени (чтобы убедиться, что и DNS работает):
ping google.com
Если пинг идёт, всё настроено правильно. Ваши виртуальные машины теперь могут выходить в интернет через общий шлюз.