Ответ
DNAT (Destination Network Address Translation) — это операция трансляции сетевых адресов, при которой маршрутизатор или фаервол изменяет адрес назначения в IP-пакете. Это ключевой механизм для перенаправления входящего трафика.
Основные сценарии применения в DevOps:
- Проброс портов (Port Forwarding): Направление трафика с публичного IP-адреса на внутренний сервер.
- Балансировка нагрузки: Распределение трафика между несколькими бэкенд-серверами (часто в комбинации с SNAT).
- Миграция сервисов: Временное перенаправление трафика со старого сервера на новый без изменения настроек клиентов.
Примеры реализации:
С помощью 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.