Ответ
NAT (Network Address Translation) — это метод трансляции сетевых адресов, позволяющий множеству устройств в частной сети (с IP-адресами из диапазонов RFC 1918, например, 192.168.1.0/24) использовать для выхода в интернет один или несколько публичных IP-адресов.
Основные типы NAT, с которыми работаю в инфраструктуре:
- Source NAT (SNAT) / Masquerading: Самый распространенный тип. Множество внутренних адресов маскируются под один внешний. Роутер или шлюз подменяет исходный приватный IP и порт отправителя на свой публичный IP и уникальный порт, запоминая это сопоставление в таблице NAT для обратной трансляции ответного трафика.
- Пример в iptables (Linux-шлюз):
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j MASQUERADE
- Пример в iptables (Linux-шлюз):
- Destination NAT (DNAT): Используется для проброса портов (Port Forwarding). Публичный IP и порт шлюза транслируются на приватный IP и порт конкретного сервера внутри сети.
- Пример: Проброс порта 80 на веб-сервер:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
- Пример: Проброс порта 80 на веб-сервер:
Проблемы и решения в DevOps-контексте:
- Проблема: NAT ломает сквозную связь (end-to-end connectivity), что критично для VoIP, игровых серверов или прямых P2P-соединений.
- Решение: Использование технологий в обход NAT, таких как STUN/TURN/ICE (для WebRTC) или настройка Full-cone NAT (редко). В облачных средах (AWS, GCP) эту проблему часто решают, размещая инстансы в публичных подсетях с Elastic IP или используя шлюзы NAT для исходящего трафика из приватных подсетей.