Что такое DNAT и где он применяется?

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

Ответ

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

Основные сценарии применения в DevOps:

  1. Проброс портов (Port Forwarding): Направление трафика с публичного IP-адреса на внутренний сервер.
  2. Балансировка нагрузки: Распределение трафика между несколькими бэкенд-серверами (часто в комбинации с SNAT).
  3. Миграция сервисов: Временное перенаправление трафика со старого сервера на новый без изменения настроек клиентов.

Примеры реализации:

С помощью iptables (традиционный Linux):

# Перенаправить входящий HTTP-трафик с порта 80 на внутренний сервер 192.168.1.10:8080
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:8080

# Для балансировки между двумя бэкендами
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -m statistic --mode random --probability 0.5 -j DNAT --to-destination 192.168.1.10:80
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.11:80

В облачных провайдерах:

  • В AWS это правила в Target Group для Application Load Balancer (ALB) или Network Load Balancer (NLB).
  • В GCP — правила forwarding rules для Cloud Load Balancing.

Важное замечание: DNAT выполняется на этапе PREROUTING в Netfilter (до принятия решения о маршрутизации пакета внутри хоста). Для ответного трафика обычно автоматически применяется обратное преобразование (SNAT), чтобы пакет вернулся через тот же узел, который выполнил DNAT.