NAT: как один адрес обслуживает целую сеть
NAT: как один адрес обслуживает целую сеть
У тебя дома роутер, к нему подключено 10 устройств: ноутбук, телефон, телевизор, планшет, умная колонка... Все они выходят в интернет. Но провайдер выдал тебе только один публичный IP-адрес. Как 10 устройств делят один адрес и при этом каждое получает свои данные, не путая их с чужими? Ответ — NAT (Network Address Translation, трансляция сетевых адресов).
Проблема, которую решает NAT
Представь: ты на ноутбуке открываешь YouTube, а с телефона в этот же момент — Instagram. Оба запроса уходят через домашний роутер в интернет. Серверы YouTube и Instagram видят один и тот же IP-адрес отправителя — публичный адрес твоего роутера. Когда ответы возвращаются, как роутер понимает, какой пакет — ноутбуку, а какой — телефону?
Без NAT это было бы невозможно. Каждому устройству нужен был бы собственный публичный IP, а их больше нет в природе.
Как NAT работает: таблица трансляций
Роутер с NAT ведёт таблицу трансляций (NAT table), в которой запоминает, какой внутренний адрес и порт какому внешнему соединению соответствует. Рассмотрим по шагам:
- Ноутбук (
192.168.1.10, порт50001) отправляет запрос к серверу YouTube (142.250.185.206, порт443). - Роутер видит: это пакет во внешнюю сеть. Он подменяет адрес отправителя на свой публичный (
5.18.200.7) и присваивает соединению свободный внешний порт, скажем,60001. В таблицу добавляется запись:
Внутренний адрес:порт Внешний адрес:порт
192.168.1.10:50001 → 5.18.200.7:60001 (YouTube)
- Сервер YouTube отправляет ответ на
5.18.200.7:60001. - Роутер заглядывает в таблицу: «
60001— это соединение для192.168.1.10:50001». Подменяет адрес получателя обратно на192.168.1.10и отправляет пакет ноутбуку.
Для телефона в это же время создаётся другая запись, с другим внешним портом:
192.168.1.15:50002 → 5.18.200.7:60002 (Instagram)
Именно порты (числа от 0 до 65535) позволяют NAT различать соединения десятков устройств через один IP-адрес. Это называется PAT (Port Address Translation) или NAT overload — самый распространённый тип NAT в домашних роутерах.
Типы NAT
Существует несколько вариантов NAT:
- Static NAT. Однозначное соответствие: внутренний адрес
192.168.1.10всегда транслируется во внешний5.18.200.10. Используется, когда к внутреннему устройству нужно достучаться извне (например, к серверу в офисе). - Dynamic NAT. Внутренний адрес получает любой свободный внешний из пула. Нет жёсткой привязки.
- PAT (NAT Overload). Много внутренних адресов транслируются на один внешний с разными портами. То, что стоит в каждом домашнем роутере.
NAT как файрвол (побочный эффект)
Одно из следствий NAT — устройства из интернета не могут инициировать соединение с устройством внутри твоей локальной сети. Они просто не знают его настоящего адреса, а в таблице NAT нет записи для такого соединения. Только когда внутреннее устройство само начинает общение, роутер создаёт временную запись.
Это не было задумано как функция безопасности, но на практике NAT служит мощным барьером: твой ноутбук не виден из интернета напрямую. Чтобы внешнее устройство могло достучаться до внутреннего, нужна специальная настройка — проброс портов (port forwarding).
Проброс портов: когда нужно впустить гостя
Допустим, ты запустил на домашнем компьютере игровой сервер и хочешь, чтобы друзья подключались к нему через интернет. Публичный IP у твоего роутера — 5.18.200.7. Но друзья не могут просто подключиться к этому адресу — NAT не пропустит пакет внутрь.
Решение — проброс портов: ты настраиваешь роутер так, чтобы все входящие пакеты на порт 25565 (стандартный порт Minecraft) пересылались на внутренний адрес 192.168.1.10:25565. Теперь в таблице NAT появляется постоянная запись, и друзья могут подключаться к твоему публичному IP.
Ограничения NAT
NAT — гениальный «костыль», но у него есть недостатки:
- Ломает сквозную связность. Идея интернета в том, что любое устройство может связаться с любым. NAT эту модель ломает — внешние устройства не могут инициировать связь.
- Усложняет peer-to-peer приложения. Торренты, видеозвонки, онлайн-игры вынуждены использовать обходные техники (STUN, TURN) для соединения двух устройств за NAT'ами.
- Роутер хранит состояние. Таблица трансляций потребляет память. При большом количестве соединений это может быть проблемой.
- Усложняет протоколы. Разработчикам протоколов приходится учитывать NAT, что добавляет сложности.
IPv6 решает проблему фундаментально: адресов столько, что NAT больше не нужен. Каждое устройство получает собственный глобально маршрутизируемый адрес. Но пока мир не перешёл на IPv6 полностью, NAT остаётся неотъемлемой частью интернета.
Проверь себя
- Сколько устройств могут одновременно выходить в интернет через один публичный IP с NAT?
- Может ли кто-то из интернета просто так подключиться к твоему ноутбуку за NAT?
- Что такое проброс портов и зачем он нужен?
- Теоретически до 65535 одновременных соединений на каждый публичный адрес (ограничено количеством портов). На практике — тысячи устройств, если у каждого не очень много активных соединений.
- Нет. NAT не пропустит входящее соединение, для которого нет записи в таблице трансляций. Сначала внутреннее устройство должно инициировать связь.
- Проброс портов — это постоянная запись в таблице NAT, которая говорит: «все пакеты на порт X пересылай на внутренний адрес Y». Нужен, чтобы к устройству за NAT можно было достучаться извне (сервер, игра, видеонаблюдение).
Что унести с урока
- NAT позволяет множеству устройств с приватными IP делить один публичный адрес.
- Роутер подменяет адрес отправителя и запоминает соответствие в таблице трансляций.
- Порты — ключ к идентификации соединений. PAT (NAT Overload) — стандарт для домашних роутеров.
- NAT работает как файрвол: входящие соединения без «приглашения» не проходят.
- Проброс портов — способ впустить трафик извне к конкретному внутреннему устройству.
NAT — это последний кусочек пазла об IP-адресации. Теперь перейдём от теории к практике. В следующем уроке познакомимся с командой ping — самым простым инструментом диагностики сети, доступным на любом компьютере.