← Сеть: основы
12 мин · средне · Урок 10 из 13

NAT: SNAT, DNAT, masquerade

Как работает трансляция адресов: выход приватной сети наружу, проброс портов и чем NAT не является.

Зачем подменять адреса

Приватные адреса (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) в интернете не маршрутизируются. Чтобы машина с адресом 192.168.1.10 сходила на внешний сайт, кто-то по пути должен подменить её адрес на публичный. Эта подмена и есть NAT (network address translation). Так весь офис или все контейнеры хоста выходят наружу через один публичный IP.

Шлюз ведёт таблицу трансляций: какое внутреннее «адрес:порт» он отобразил в какое внешнее. Ответный пакет прилетает на публичный адрес, шлюз находит запись в таблице и возвращает пакет внутреннему хосту.

SNAT: изнутри наружу

SNAT (source NAT) подменяет адрес отправителя. Классическое правило на шлюзе с постоянным публичным IP:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 \
  -j SNAT --to-source 203.0.113.5

Masquerade — тот же SNAT, но адрес не прописан жёстко: берётся текущий адрес исходящего интерфейса. Нужен, когда публичный IP динамический (домашний роутер, dhcp у провайдера):

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

Docker делает ровно это для контейнеров: трафик из бридж-сети уходит через MASQUERADE, поэтому контейнеры ходят в интернет, не имея публичных адресов.

DNAT: снаружи внутрь

SNAT решает исходящее направление, но снаружи внутрь по-прежнему не войти: для внешнего мира внутренних адресов не существует. Для входящих используется DNAT (destination NAT): подмена адреса назначения, она же проброс порта.

# всё, что пришло на порт 8080 шлюза, отдать на 192.168.1.10:80
iptables -t nat -A PREROUTING -p tcp --dport 8080 \
  -j DNAT --to-destination 192.168.1.10:80

docker run -p 8080:80 устроен так же: DNAT-правило с порта хоста на порт контейнера.

NAT это не firewall

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

Firewall принимает решения «разрешить или запретить» по правилам. NAT переписывает адреса. Разные задачи, и одно не заменяет другое: DNAT-проброс дырявит «защиту» NAT мгновенно, а IPv6 работает вовсе без NAT, и там без файрвола не обойтись.

Что важно запомнить

NAT подменяет адреса по таблице трансляций на шлюзе.

SNAT — исходящий: приватная сеть выходит через публичный IP. Masquerade — SNAT для динамического адреса; так работает выход контейнеров Docker.

DNAT — входящий: проброс порта снаружи на внутренний хост; так работает docker run -p.

NAT не firewall: он не запрещает, а просто не знает маршрута. Политику доступа задают правила файрвола.

В следующем уроке — IPv6 и SLAAC: адреса, которым NAT не нужен.

Дрилл · вопросы как на собесе

Проверь себя без подсказок

Сформулируй ответ вслух или письменно, потом раскрой и честно отметь: знал или нет.

01

Что такое NAT и зачем он нужен?

NET-013

Прошли материал до конца? Отметьте урок пройденным.