← Назад к вопросам

Как работает NAT?

2.0 Middle🔥 202 комментариев
#Linux и администрирование#Сети и протоколы

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Принцип работы NAT (Network Address Translation)

Network Address Translation (NAT) — это механизм, который позволяет множеству устройств в частной сети использовать один или несколько публичных IP-адресов для выхода в интернет. NAT решает ключевую проблему IPv4 — нехватку адресов, преобразуя приватные (локальные) IP-адреса в публичные при передаче трафика во внешнюю сеть и выполняя обратное преобразование для входящих пакетов.

Основная задача NAT

Главная задача — "скрыть" внутреннюю сеть (например, домашнюю или корпоративную) за одним публичным адресом, обеспечивая:

  • Экономию публичных IP-адресов. Десятки или сотни внутренних устройств могут выходить в интернет через один IP от провайдера.
  • Базовую безопасность. Устройства извне не могут инициировать прямое подключение к хосту внутри частной сети, если не настроны специальные правила (Port Forwarding).
  • Гибкость внутренней адресации. Локальная сеть может использовать любые RFC 1918 адреса (например, 192.168.1.0/24), независимо от публичного адреса.

Как происходит преобразование адресов

Работа NAT обычно реализуется на маршрутизаторе (роутере, межсетевом экране). Рассмотрим ключевой сценарий — исходящее подключение с внутреннего хоста.

1. Исходящий пакет (от внутреннего хоста к внешнему серверу)

  1. Внутренний хост (например, 192.168.1.10) отправляет пакет на публичный сервер 93.184.216.34 (example.com).
    *   **Исходные данные пакета:**
        *   **Source IP:** `192.168.1.10` (приватный)
        *   **Source Port:** `54321` (клиентский порт)
        *   **Destination IP:** `93.184.216.34` (публичный)
        *   **Destination Port:** `80` (HTTP)

  1. Пакет попадает на NAT-устройство (маршрутизатор). Оно создает или использует существующую запись в своей NAT-таблице.

  2. Маршрутизатор заменяет приватный Source IP на свой публичный IP (например, 85.234.156.10). Часто также заменяется и Source Port на уникальный для данного сеанса, чтобы отличать подключения разных внутренних хостов. Этот процесс называется PAT (Port Address Translation) или NAT Overload — самый распространенный тип.

    *   **Преобразованные данные пакета:**
        *   **Source IP:** `85.234.156.10` (публичный IP маршрутизатора)
        *   **Source Port:** `62001` (новый, уникальный порт, выбранный маршрутизатором)
        *   **Destination IP:** `93.184.216.34`
        *   **Destination Port:** `80`

  1. Пакет отправляется в интернет. Для внешнего сервера запрос выглядит так, будто он пришел с адреса 85.234.156.10:62001.

  2. Критический шаг: Маршрутизатор сохраняет в своей NAT-таблице соответствие:

    # Упрощенный вид записи в NAT-таблице
    Внутренний адрес:порт   ->   Внешний (публичный) адрес:порт
    192.168.1.10:54321      ->   85.234.156.10:62001
    

2. Входящий пакет (ответ от внешнего сервера)

  1. Сервер 93.184.216.34 формирует ответ и отправляет его на адрес и порт, откуда пришел запрос: 85.234.156.10:62001.

  2. Пакет приходит на публичный интерфейс маршрутизатора. NAT-устройство проверяет свою таблицу:

    *   Есть ли запись о том, что публичный порт `62001` соответствует какому-либо внутреннему сеансу?

  1. Найдя совпадение, маршрутизатор выполняет обратное преобразование (Reverse NAT):
    *   Заменяет **Destination IP** в пакете с публичного (`85.234.156.10`) на приватный (`192.168.1.10`).
    *   Заменяет **Destination Port** с `62001` обратно на `54321`.

  1. Преобразованный пакет пересылается во внутреннюю сеть на хост 192.168.1.10:54321. Клиент получает ответ, как если бы он общался с сервером напрямую.

Типы NAT

  • Static NAT (Статический): Постоянное, "один к одному" сопоставление внутреннего приватного адреса с конкретным публичным адресом. Используется для хостов, которым нужно быть доступными извне (например, веб-сервер).
  • Dynamic NAT (Динамический): Пул публичных адресов динамически выделяется внутренним хостам на время сеанса. "Один к одному", но адреса из пула могут использоваться разными хостами в разное время.
  • PAT (Port Address Translation) или NAT Overload: Самый распространенный тип, описанный выше. Многие внутренние адреса преобразуются в один публичный, но с разными портами. Это и есть то, что используется в домашних роутерах.

Ключевые моменты для DevOps/SRE

  • Проблемы с NAT: Могут возникать сложности с протоколами, встраивающими IP-адреса в тело пакета (например, FTP, SIP), что требует NAT Traversal техник (ALG, STUN, TURN, ICE).
  • Диагностика: Умение читать таблицы соединений (например, conntrack в Linux) критически важно.
    # Просмотр текущих NAT-сессий в Linux
    sudo conntrack -L
    # Или через iptables (если используется)
    sudo iptables -t nat -L -n -v
    
  • Контейнеры и облака: В облачных средах (AWS VPC, GCP VNet, Azure VNet) NAT обеспечивается managed-сервисами (AWS Internet Gateway, NAT Gateway) или виртуальными машинами-шлюзами. Понимание их работы необходимо для проектирования безопасной и корректной сетевой архитектуры.
    # Пример объявления AWS NAT Gateway в Terraform
    resource "aws_nat_gateway" "main" {
      allocation_id = aws_eip.nat.id
      subnet_id     = aws_subnet.public.id
      tags = {
        Name = "NAT Gateway for Private Subnet"
      }
    }
    

Таким образом, NAT является фундаментальным, прозрачным для конечного пользователя механизмом, без которого современный интернет в его нынешнем виде был бы невозможен. Для инженера понимание его работы — обязательное условие для настройки сетей, диагностики проблем с подключением и обеспечения безопасности.

Как работает NAT? | PrepBro