Настройка исходящего 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.
Дальнейшие внутренние серверы будут следовать той же конфигурации, что и этот сервер.
Схема примера инфраструктуры
Настройка внешнего интерфейса на шлюзе
Отредактируйте файл /etc/network/interfaces. Никаких изменений в eth0 не требуется, если не требуется статический IP-адрес. Вот настройки по умолчанию.
Настройка внутреннего интерфейса на шлюзе
Внутреннему серверу node1 необходимо будет назначить частный статический IP-адрес и IP-адрес шлюза, который соответствует частному IP-адресу исходящего шлюза. Обновите eth0 в файле /etc/network/interfaces, чтобы включить статический IP-адрес, сетевую маску и шлюз.
Далее потребуется применить сетевые настройки (или перезагрузить сервер).Настройка внутреннего интерфейса на клиенте
Внутреннему серверу 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.
Включить NAT
Включите политику пересылки брандмауэра, изменив значение DEFAULT_FOWARD_POLICY в файле /etc/default/ufw
Теперь нам надо включить маскарадинг IP. Отредактируйте /etc/ufw/before.rules и добавьте следующие правила NAT в начало файла.Эти строки следует размещать перед любыми другими правилами в файле и после любых начальных комментариев.
Если брандмауэр еще не включен, то добавьте правило для входящего SSH-доступа и запустите брандмауэр.
Если файерволл уже разрешен, то перезагрузите его для применения правил.
Теперь внутренний узел должен иметь доступ к общедоступному Интернету через сервер шлюза. Это можно проверить, пропинговав внешний сервер с node1.