Network Education
КаталогГлоссарийПрогресс
Протокол IPv4
  1. 1Основы
  2. 2Формат пакета
  3. 3Классовая адресация
  4. 4Бесклассовая адресация
  5. 5Задачи на IP-адресацию
  6. 6ARP
  7. 7DHCP
  8. 8ICMP
  9. 9NAT
Каталог/Сетевые основы/Протокол IPv4/NAT

NAT

9Урок 9 из 9

О чём этот урок

Механизм NAT: частные адреса, Basic NAT и NAPT/PAT, типы трансляций (Full Cone, Symmetric и др.), ограничения NAT и протоколы обхода (STUN, TURN).

Ключевые выводы

  • NAPT/PAT позволяет множеству внутренних узлов выходить в интернет через один публичный IP-адрес, различая трансляции по номерам портов (до ~65 тыс. одновременных сессий на адрес)
  • NAT — процессорно-интенсивная операция, требующая пересчёта контрольных сумм IP, TCP/UDP и, возможно, модификации данных приложений через ALG
  • NAT нарушает принцип end-to-end связности IP и не является средством безопасности — для защиты необходим файрвол
  • Symmetric NAT наиболее труден для обхода; при невозможности прокусывания используется TURN-сервер как промежуточный прокси для голосового и видеотрафика
  • В IPv6 NAT отсутствует — достаточное адресное пространство устраняет необходимость в подмене адресов и связанные с этим проблемы

Проверьте себя

Вопрос 1 из 6

Как NAPT/PAT позволяет множеству внутренних узлов использовать один публичный IP-адрес?

Вопрос 2 из 6

Является ли NAT средством безопасности?

Вопрос 3 из 6

Почему NAT является процессорно-интенсивной операцией?

Вопрос 4 из 6

Какой тип NAT наиболее труден для обхода при установлении прямого соединения?

Вопрос 5 из 6

Почему в IPv6 отсутствует необходимость в NAT?

Вопрос 6 из 6

Для чего используется TURN-сервер?

🔗Связанные уроки

🔗Смотрите также

Трансляция сетевых адресов (NAT)Cisco ICND1: основы сетей и Cisco IOS
→

Концепция NAT: типы трансляций, PAT — одна тема в двух курсах

Переходные технологииПротокол IPv6
→

NAT64/DNS64 и NPTv6 — механизмы трансляции адресов при переходе на IPv6

Закат IPv4Протокол IPv6
→

Перспективы IPv4/IPv6: исчерпание адресов IPv4 напрямую связано с необходимостью NAT

⏩Продолжение темы

Основы настройки NAT на оборудовании CiscoCisco ICND1: основы сетей и Cisco IOS
→

Практическая настройка NAT/PAT на Cisco IOS после теоретического разбора

Лабораторная работа на NATCisco ICND1: основы сетей и Cisco IOS
→

Лабораторная работа по NAT: PAT для офиса и проброс портов

ICMP

Транскрипция

В протоколе IPv4 отправлять пакеты можно только из-под того адреса, который за вами числится. Из-под чужих адресов отправлять данные нельзя. Проблема в том, что эти адреса платные — вы должны будете их покупать. А иногда хочется, чтобы какие-то узлы могли работать в сети, но без покупки этих адресов.

Частные IP-адреса и проблема выхода в интернет

Есть несколько диапазонов, которыми вы можете распоряжаться в свое удовольствие, но из-под таких адресов вы не имеете права выпускать пакеты в интернет. В интернете такие адреса вообще появляться не могут.

Три наиболее известные частные сети (RFC 1918):

Сеть Маска
10.0.0.0 /8
172.16.0.0 /12
192.168.0.0 /16

Изначально все это было классовое: одна сеть класса A, 16 сетей класса B и 256 сетей класса C. Но сейчас в бесклассовом мире это просто три диапазона. Любые адреса из этих сетей вы можете использовать как захотите — назначать на внутренние локальные узлы, которым не требуется выход в интернет, и пользоваться сетью в свое удовольствие. Но без выхода в интернет.

Другие специальные блоки

Есть и другие блоки, которые можно использовать без права выхода в интернет:

  • RFC 5737 — три блока, которые отводятся исключительно для документации. Вы не можете эти адреса использовать на реальных машинах, но можете использовать их в документации для примеров. Они выглядят как публичные, но они не публичные — чисто нарисованные.

  • 100.64.0.0/10 (CGNAT, Carrier-Grade NAT) — сеть для провайдеров. Иногда провайдеры сами делают NAT, предоставляют доступ клиентам, а клиенты тоже делают NAT. Получается двойной NAT. Между провайдерским NAT и пользовательским NAT нужны какие-то адреса. Публичные использовать бессмысленно — зачем тогда провайдерский NAT? Частные адреса 10.0.0.0, 172.16.0.0 и 192.168.0.0 тоже использовать плохо — вдруг у клиента такие адреса? Вот для провайдерского NAT и используется специальный диапазон 100.64.0.0/10. Такие адреса тоже не надо ни с кем согласовывать, но выпускать в интернет их нельзя.

Принцип работы NAT

Что делать, если очень хочется в интернет с частным адресом? Придется адреса перебивать. Вы выпускаете IP-пакет из-под частного адреса, и в тот момент, когда этот пакет начинает выходить в интернет, частный адрес перебивается на публичный.

Как это выглядит

У вас есть IP-пакет, он бежит по сети. Допустим, из-под адреса 192.168.1.1 на внешний адрес 8.8.8.8. Вам нужно, чтобы во внешнем мире никаких 192.168.1.1 не было — это запрещено условиями RFC 1918. И вы перебиваете в IP-пакете адрес источника с 192.168.1.1 на, например, 203.0.113.1.

Этот процесс выполняется на маршрутизаторах параллельно с маршрутизацией. Он не зависит от процесса маршрутизации — это два независимых процесса. Иногда NAT происходит до маршрутизации, иногда после.

Таблица трансляции

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

Перебивка должна быть двусторонней:

  • Исходящие пакеты: частный адрес источника перебивается на публичный
  • Входящие пакеты: публичный адрес назначения перебивается обратно на частный

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

Basic NAT

Для работы классического Basic NAT вам потребуется отдельный публичный адрес на каждый частный адрес:

Частный адрес Публичный адрес
192.168.1.1 203.0.113.1
192.168.1.10 203.0.113.2
192.168.1.200 203.0.113.200

Почему нужен отдельный внешний адрес на каждый частный? Потому что пакеты, которые к вам приходят, нужно понимать, на какой частный адрес их перенаправить. Берете входящий пакет, смотрите: он пришел на 203.0.113.1 — ищете в табличке и находите, что этому адресу сопоставлен частный 192.168.1.1.

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

Терминология Cisco

У Cisco используется следующая терминология. У роутера с NAT есть два адресных пространства:

  • Inside — внутреннее (частное) адресное пространство
  • Outside — внешнее (публичное) адресное пространство

Четыре типа адресов

Термин Значение
Inside Local Адрес источника внутри сети, до трансляции
Inside Global Адрес источника после трансляции (публичный)
Outside Local Адрес назначения до трансляции
Outside Global Адрес назначения после трансляции

Ключевое правило:

  • Inside/Outside — откуда и куда идет пакет
  • Local — до перебивки адресов
  • Global — после перебивки адресов

В типичном случае (выход внутренних пользователей в интернет) правило NAT меняет Inside Local на Inside Global. Адреса Outside Local и Outside Global при этом не меняются.

Для обратных пакетов: пакет идет из Outside в Inside, адрес назначения Inside Global перебивается обратно на Inside Local.

Преимущества NAT

NAT позволяет создать для внутреннего частного адреса псевдоним, под которым он виден из интернета. Это позволяет:

  • Не покупать большую публичную сеть, если нужен выход в интернет только части узлов
  • Экономить публичные адреса — можно купить сетку меньшего размера
  • Реализовать DMZ — серверу с частным адресом назначается псевдоним, под которым он виден в интернете

Недостатки NAT

Требуется много адресов

В Basic NAT каждому внутреннему узлу нужен отдельный внешний публичный адрес. Двум узлам один и тот же псевдоним сделать не получится.

Проблемы с приложениями

При изменении IP-адресов в пакете возникают каскадные последствия:

  1. Контрольная сумма IP — нужно пересчитать
  2. Контрольная сумма TCP/UDP — тоже портится, потому что TCP и UDP считают чек-сумму от псевдозаголовка, включающего IP-адреса
  3. Данные приложений — некоторые протоколы (например, FTP) передают IP-адреса прямо в теле сессии, и их тоже нужно менять

Все это занимает время и загружает процессор, поэтому NAT — достаточно процессорно-интенсивная операция.

ALG (Application Layer Gateway)

Знание того, как устроен конкретный протокол, для корректной работы через NAT, называется ALG — Application Layer Gateway. Для каждого протокола ALG свой: отдельно для FTP, отдельно для SIP и так далее.

Если конкретная модель роутера не поддерживает ALG для какого-то протокола (например, SIP), то этот протокол через NAT будет работать некорректно.

Протоколы, несовместимые с NAT

Бывают протоколы, которые за NAT вообще не работают. Например, IPsec с цифровой подписью пакетов: подпись считается в том числе от IP-адресов. Если адреса меняются, подпись портится, и восстановить ее на роутере невозможно без закрытого ключа.

Нарушение принципа связности end-to-end

NAT нарушает принцип end-to-end connectivity. Протокол IP предполагает, что если у узла есть IP-адрес, на него можно подключиться. Ситуация "у узла есть адрес, но на него нельзя подключиться" в протоколе IP не предусмотрена. ICMP тоже такое не предусматривает — он пришлет сообщение "сеть недоступна", что означает аварию.

NAT — это костыль

В IPv6 NAT отсутствует. NAT — это костыль для экономии IP-адресов. В IPv6 адресов достаточно много, поэтому NAT просто не нужен. Все проблемы с приложениями, с нарушением связности edge-to-edge — в IPv6 их нет.

NAPT (Network Address and Port Translation)

Суть механизма

Чаще всего используется не Basic NAT, а NAPT — Network Address and Port Translation. Другие названия этого механизма:

  • PAT (Port Address Translation) — терминология Cisco
  • NAT Overload
  • Masquerading
  • Many-to-One NAT

Смысл один и тот же: подменяется не просто IP-адрес, а сокет — пара IP-адрес + порт.

Как это работает

Допустим, бежит UDP-датаграмма на 53-й порт 8.8.8.8 (DNS Google) из-под порта источника 54321. При прохождении через NAT меняется сокет: IP-адрес на публичный 203.0.113.1 и, возможно, порт на другой (например, 43210).

Главное преимущество: можно использовать один-единственный публичный адрес и пропускать через него трафик многих разных приложений, различая их по номерам портов.

Ограничения

  • Для TCP — примерно 65 тысяч одновременных трансляций на один IP-адрес
  • Для UDP — примерно 65 тысяч одновременных трансляций на один IP-адрес
  • Порты нужно освобождать, когда приложение перестает ими пользоваться

Реализации NAT обычно стремятся сохранить порт источника. Например, Cisco при совпадении порта пытается назначить порт на единицу больше. Для большинства приложений перебивка порта источника не проблема.

Проблема с NTP

Некоторые приложения требуют фиксированный порт источника. Например, NTP требует порт 123 и для источника, и для назначения. Если NAT перебивает порт источника (а он обязан это делать, если несколько узлов подключаются с одного порта), синхронизация времени не пройдет. Это одна из причин, почему штатная синхронизация времени в Windows иногда выдает ошибку — дело не в Microsoft, а в NAT.

Таймауты трансляций

Стандартного правила отслеживания активности трансляций нет. В Cisco настройка таймаутов выполняется командой:

ip nat translation timeout

Отдельные таймауты для разных типов трафика:

Тип трафика Особенности
DNS Короткий таймаут, вопрос-ответ
TCP SYN Отдельный маленький таймер; если SYN+ACK не пришел — трансляция убивается (около минуты)
TCP (установленная сессия) Длительный таймаут (около суток); после FIN/RST — еще ~30-60 секунд
UDP Сразу большой таймаут, нет понятия сессии
ICMP Около 15 секунд по умолчанию

Короткий ICMP-таймаут создает неудобство при траблшутинге: вы пингуете, бежите на Cisco смотреть show ip nat translation, а там уже пусто — трансляция истекла.

ICMP и NAT

В ICMP нет номеров портов. Для пинга трансляция создается по sequence number и identification number. Для ответных ICMP-сообщений (например, Port Unreachable) умный роутер свяжет их с трансляцией UDP-датаграммы, которая породила ответ. Тупой — просто прибьет пакет.

Порядок обработки: NAT и маршрутизация

На Cisco для обычного NAT:

  • Исходящие пакеты (изнутри наружу): сначала маршрутизация, потом NAT
  • Входящие пакеты (снаружи вовнутрь): сначала NAT, потом маршрутизация

Эти процессы не связаны друг с другом. Если NAT не может отработать (нет свободных адресов, нет свободных портов), пакет не убивается — он просто проходит дальше с неизмененными адресами. NAT не убивает пакеты, NAT перебивает пакеты.

Маршрутизацию никто не отменял: все маршруты должны быть правильными. Адреса, на которые вы перебиваете, должны быть такими, чтобы пакеты на эти адреса приходили на ваш роутер. Все должно быть согласовано с провайдером.

Использование одного IP-адреса (PAT / NAT Overload)

Если у вас всего один публичный адрес (который может быть даже получен по DHCP), вы можете его использовать и для собственных нужд роутера, и для трансляции клиентов. Разница — в портах. Если пакет приходит на порт, где слушает приложение роутера (например, 23-й порт для Telnet) и нет трансляции — это роутеру. Если есть трансляция на определенный порт — перебиваем.

Типы NAT (классификация по поведению)

Full Cone NAT

Самый расслабленный тип. Как только клиент вышел наружу и создалась трансляция, любой внешний узел с любого IP-адреса и порта может подключиться к открытому сокету и попасть на приложение клиента. Сокет внешнего узла не проверяется по таблице трансляций.

Процедура прокусывания (создания pinhole) такого NAT — легкая и приятная.

Address Restricted Cone NAT

Трансляцией может воспользоваться только тот внешний узел, IP-адрес которого совпадает с тем, на который изначально подключался клиент. Порт при этом может быть любым.

Port Restricted Cone NAT

Трансляцией может воспользоваться только тот внешний узел, у которого совпадает и IP-адрес, и порт с теми, на которые изначально подключался клиент.

Symmetric NAT

Самый жесткий тип. Проверяется все: порт источника, порт назначения, IP-адрес источника, IP-адрес назначения. Если хотя бы одно поле не соответствует — создается новая трансляция. Его очень тяжело прокусывать, его очень не любят телефонисты.

Общее для всех типов

Во всех четырех типах NAT внутренний сокет может пользоваться трансляцией для подключения к любому внешнему узлу. Различия только в том, кто из внешних узлов может воспользоваться уже созданной трансляцией.

Определение типа NAT

Teredo Client (Windows)

Встроенный в Windows Teredo-клиент (предназначен для IPv6) позволяет определить, симметричный у вас NAT или нет:

netsh interface teredo show state

STUN-сервер

STUN (Session Traversal Utilities for NAT) — протокол для определения типа NAT и прокусывания. Можно использовать публичный STUN-сервер (например, от Ooma/X-Ten: stun.ooma.net). STUN-клиент согласует с сервером параметры NAT и определит его тип.

TURN-сервер

Если NAT симметричный и прокусить его не удается, используется TURN (Traversal Using Relays around NAT) — фактически UDP-прокси. Голосовые пакеты гоняются через промежуточный сервер в публичном пространстве. Голос от этого страдает, сервер под большой нагрузкой, но за Symmetric NAT по-другому не получится.

NAT и безопасность

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

Никто не мешает злоумышленнику, если у него есть доступ к канальной среде, отправлять пакеты для маршрутизации во внутреннюю сеть. Провайдер тоже может отправить пакеты на 192.168.1.1 — NAT пропустит такие пакеты: у него нет подходящей трансляции, и пакет пройдет внутрь по обычной маршрутизации.

Что NAT защищает, а что нет

  • Symmetric NAT защитит от случайных подключений извне (от "школоты")
  • Full Cone NAT не защитит — например, DNS-клиент будет подвержен атакам: пока вы ждете ответ от DNS-сервера, злоумышленник может спамить поддельные DNS-ответы на открытый порт

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

Max Entries и ограничения производительности

Параметр Max Entries ограничивает максимальный размер таблицы трансляции. У вас может быть 65 тысяч записей на каждый IP-адрес, а IP-адресов может быть много (например, целая сеть /24).

На практике вы вряд ли упретесь в размер таблицы трансляции. NAT настолько процессорно-интенсивная операция, что упираться вы будете в процессор, который не будет успевать все перебивать. Относительно немощный роутер от достаточно небольших потоков ложится в стопроцентную загрузку.


Спасибо за внимание. Многие из разобранных тем можно дополнительно изучить на курсе ICND1 с примерами и лабораторными работами.

Network Education

Бесплатная онлайн-академия сетевых технологий. Видеоуроки, транскрипции и структурированные треки обучения — от основ до продвинутого уровня.

ТрекиКаталогО проекте
© 2026 Network Education