Настройка исходящего NAT шлюза на Ubuntu

Общая сетевая инфраструктура может состоять из частной сети в изолированной подсети. Хотя входящие подключения могут не понадобиться для доступа к частной сети извне, бывают случаи, когда вам могут понадобиться серверы в частной подсети для подключения к службам за пределами подсети или к общедоступному Интернету. Примером может быть загрузка программного пакета, отправка данных резервного копирования во внешнее хранилище или применение системных обновлений к серверам в частной подсети.

Введение

Сервер шлюза Linux с двумя сетевыми интерфейсами или сетевыми адаптерами можно использовать для объединения двух сетей. Одна сетевая карта будет подключаться к внешней или общедоступной сети, а другая сетевая карта будет подключаться к частной подсети. Затем IP-переадресация и правило NAT используются для маршрутизации трафика из частной подсети во внешнюю сеть. Снаружи будет казаться, что трафик с внутренних серверов исходит с IP-адреса шлюза. Сгенерированный извне трафик будет достигать шлюза и не будет виден в частной подсети.

Кроме того, брандмауэр сервера шлюза можно изменить, чтобы ограничить исходящий трафик из подсети.

Состав стенда

Один сервер Ubuntu версий 14-22 с двумя сетевыми интерфейсами: - Публичный IP: 203.0.113.110 - Частный IP: 10.0.0.1

Дополнительный сервер, выполняющий роль клиента с внутренним IP 10.0.0.2

Инфраструктура

Примерная инфраструктура будет состоять из одного шлюзового сервера, соединяющего общедоступный Интернет и частную подсеть.
Первичному сетевому интерфейсу eth0 шлюза будет назначен общедоступный IP-адрес 203.0.113.110 с подключением к общедоступному Интернету через LAN 1.
Второстепенному сетевому интерфейсу eth1 будет назначен IP-адрес 10.0.0.1 с подключение к частной сети через LAN 2.

Второй внутренний сервер с именем node1 будет находиться в частной сети в локальной сети 2 с IP-адресом 10.0.0.2.
Дальнейшие внутренние серверы будут следовать той же конфигурации, что и этот сервер.

Схема примера инфраструктуры

59cf7f060169b7fbeb581974d4b52fb5.png

Настройка внешнего интерфейса на шлюзе

Отредактируйте файл /etc/network/interfaces. Никаких изменений в eth0 не требуется, если не требуется статический IP-адрес. Вот настройки по умолчанию.

allow-hotplug eth0 iface eth0 inet dhcp

Настройка внутреннего интерфейса на шлюзе

Внутреннему серверу node1 необходимо будет назначить частный статический IP-адрес и IP-адрес шлюза, который соответствует частному IP-адресу исходящего шлюза. Обновите eth0 в файле /etc/network/interfaces, чтобы включить статический IP-адрес, сетевую маску и шлюз.

allow-hotplug eth1 iface eth1 inet static address 10.0.0.1 netmask 255.255.255.0
Далее потребуется применить сетевые настройки (или перезагрузить сервер).

ifdown eth1 && ifup eth1

Настройка внутреннего интерфейса на клиенте

Внутреннему серверу node1 необходимо будет назначить частный статический IP-адрес и IP-адрес шлюза, который соответствует частному IP-адресу исходящего шлюза. Обновите eth0 в файле /etc/network/interfaces, чтобы включить статический IP-адрес, сетевую маску и шлюз.

allow-hotplug eth0 iface eth0 inet static address 10.0.0.2 netmask 255.255.255.0 gateway 10.0.0.1
ifdown eth0 && ifup eth0

Разрешить пересылку пакетов между интерфейсами

По-умолчанию, пересылка пакетов между сетевыми интерфейсам на включена. Чтобы ее включть, в файле /etc/sysctl.conf раскомментируйте строку ip_forward для протокола IPv4.

net.ipv4.ip_forward=1
#net.ipv6.conf.all.forwarding=1

Включить NAT

Включите политику пересылки брандмауэра, изменив значение DEFAULT_FOWARD_POLICY в файле /etc/default/ufw

DEFAULT_FORWARD_POLICY="ACCEPT"
Теперь нам надо включить маскарадинг IP. Отредактируйте /etc/ufw/before.rules и добавьте следующие правила NAT в начало файла.
Эти строки следует размещать перед любыми другими правилами в файле и после любых начальных комментариев.

*nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE COMMIT

Если брандмауэр еще не включен, то добавьте правило для входящего SSH-доступа и запустите брандмауэр.

ufw allow 22/tcp
ufw enable

Если файерволл уже разрешен, то перезагрузите его для применения правил.

ufw disable && ufw enable

Теперь внутренний узел должен иметь доступ к общедоступному Интернету через сервер шлюза. Это можно проверить, пропинговав внешний сервер с node1.

ping 8.8.8.8