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 не нужен.
Дрилл · вопросы как на собесе
Проверь себя без подсказок
Сформулируй ответ вслух или письменно, потом раскрой и честно отметь: знал или нет.
Что такое NAT и зачем он нужен?
NET-013Прошли материал до конца? Отметьте урок пройденным.
Прогресс сохранён в этом браузере
Почистишь историю или откроешь с телефона, и отметки пропадут. Оставь почту, они переедут в аккаунт. Пароль придумывать не нужно.
Готово. теперь в аккаунте: прогресс виден с любого устройства. Мой прогресс