Что такое SNAT и для чего он используется?

«Что такое SNAT и для чего он используется?» — вопрос из категории Сети, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

SNAT (Source Network Address Translation) — это операция трансляции сетевых адресов, при которой маршрутизатор или фаервол изменяет исходный IP-адрес пакета, исходящего из внутренней сети во внешнюю.

Основная цель: Позволить множеству хостов с приватными IP-адресами (например, из диапазона 192.168.1.0/24) выходить в интернет через один или несколько публичных IP-адресов шлюза.

Типичный сценарий и пример настройки в iptables:

# Маскировка всего исходящего трафика с сети 192.168.1.0/24 под публичный адрес шлюза (203.0.113.1)
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.1
# Или более распространённый вариант MASQUERADE (когда внешний IP динамический)
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

Отличие от DNAT:

  • SNAT изменяет адрес отправителя и используется для исходящего трафика (клиенты → интернет).
  • DNAT изменяет адрес получателя и используется для входящего трафика, чтобы перенаправлять запросы из интернета на внутренние сервисы (порт-форвардинг).

Применение в DevOps:

  1. В облачных средах (AWS VPC, GCP VPC) SNAT реализуется через NAT Gateway, чтобы инстансы в приватных подсетях могли скачивать обновления или обращаться к внешним API.
  2. В Kubernetes Service типа NodePort или LoadBalancer для исходящего трафика подов часто использует SNAT на IP-адрес ноды.