2026-09-18

Интернет-шлюз на Ubuntu / Debian: NAT, маршрутизация и проброс портов

Настройка шлюза состоит из трёх шагов:

  1. Включение IP-форвардинга на уровне ядра;
  2. Настройка брандмауэра (NAT);
  3. Опционально — проброс портов (port forwarding).

Настройка ядра

vi /etc/sysctl.d/gateway.conf
net.ipv4.ip_forward=1
sysctl -p /etc/sysctl.d/gateway.conf

При ошибке sysctl: command not found установите пакет:

apt install procps

Либо перезайдите с полным окружением root:

su -

С одним сетевым адаптером больше ничего не нужно — Ubuntu начнёт работать как интернет-шлюз. С несколькими адаптерами настраиваем сетевой экран.


Настройка брандмауэра (iptables)

Пусть интернет — через ens160, локальная сеть — через ens32:

INTERNET=ens160
LOCAL=ens32

Значения замените на свои.

Правило NAT:

iptables -t nat -I POSTROUTING -o ${INTERNET} -j MASQUERADE

Если локальная и глобальная сети на разных интерфейсах, добавляем форвардинг:

iptables -I FORWARD -i ${LOCAL} -o ${INTERNET} -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD -i ${LOCAL} -o ${INTERNET} -j ACCEPT

${INTERNET} — выход в интернет, ${LOCAL} — локальная сеть.

apt install iptables-persistent
netfilter-persistent save

Проброс портов (Port Forwarding)

Нужен, чтобы направлять запросы на сервер за NAT без прямого выхода наружу.

Iptables

Двумя командами:

iptables -t nat -I PREROUTING -p tcp -m tcp -d 10.8.232.111 --dport 25 -j DNAT --to-destination 192.168.0.15:8025
iptables -t nat -I POSTROUTING -p tcp -m tcp -s 192.168.0.15 --sport 8025 -j SNAT --to-source 10.8.232.111:25

Или по интерфейсу:

iptables -t nat -I PREROUTING -p tcp -i eth0 --dport 25 -j DNAT --to-destination 192.168.0.15:8025
iptables -I FORWARD -p tcp -d 192.168.0.15 --dport 8025 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

где eth0 — внешний интерфейс.

Разрешаем порт назначения:

iptables -I INPUT 1 -p tcp --dport 8025 -j ACCEPT

Открываем не входящий порт (25), а порт назначения (8025): цепочки PREROUTING/POSTROUTING выполняются до FILTER.

netfilter-persistent save

Шаблон с переменными

IPADDR=192.168.1.10    # адрес, на который переводим
PORTOUT=443            # внешний порт NAT
PORTIN=443             # порт сервера назначения
INT=eth0               # интерфейс NAT
PROTO=tcp              # протокол
iptables -t nat -I PREROUTING -p ${PROTO} -i ${INT} --dport ${PORTOUT} -j DNAT --to-destination ${IPADDR}:${PORTIN}
iptables -I FORWARD -p ${PROTO} -d ${IPADDR} --dport ${PORTIN} -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
netfilter-persistent save

Тонкости и подводные камни

  • ip_forward без сохраненияsysctl.d обязателен, иначе после перезагрузки шлюз перестанет работать.
  • MASQUERADE vs SNAT — MASQUERADE подходит для динамического внешнего IP; SNAT — для статического.
  • Цепочки и порядок — PREROUTING/POSTROUTING (nat) обрабатываются до FORWARD (filter); открывайте порт назначения.
  • -I vs -A-I вставляет правило в начало, что важно при наличии запрещающих правил выше.
  • Обратный путь (hairpin NAT) — для доступа к проброшенному сервису изнутри сети нужны дополнительные правила DNAT/SNAT.
  • netfilter-persistent — без сохранения правила потеряются после перезагрузки.
  • nftables — в новых системах iptables может быть фронтендом над nftables; поведение сохраняется, но проверяйте nft list ruleset.
  • MTU — при туннелях/VPN на шлюзе возможны проблемы с крупными пакетами.

Шпаргалка

# форвардинг
echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/gateway.conf
sysctl -p /etc/sysctl.d/gateway.conf

# NAT
iptables -t nat -I POSTROUTING -o ens160 -j MASQUERADE
iptables -I FORWARD -i ens32 -o ens160 -j ACCEPT
netfilter-persistent save

# проброс порта
iptables -t nat -I PREROUTING -p tcp -i eth0 --dport 443 -j DNAT --to-destination 192.168.1.10:443
iptables -I FORWARD -p tcp -d 192.168.1.10 --dport 443 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT
netfilter-persistent save

Проверено на: Ubuntu 22.04/24.04/26.04, Debian 12.
Дата: Сентябрь 2026.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *