Для того чтобы наши устройства из частной сети могли выходить в Интернет, им нужен общедоступный (публичный) IP-адрес. При этом внутри нашей собственной локальной сети мы можем спокойно использовать частные IP-адреса. В этой ситуации на помощь приходит Network Address Translation (NAT) (преобразование сетевых адресов) — технология, которая позволяет множеству устройств в локальной сети получать доступ к Интернету через один общий публичный IP-адрес.
Идея NAT заключается в том, чтобы осуществлять перевод частного локального IP-адреса в общедоступный глобальный IP-адрес и наоборот. Это необходимо для обеспечения доступа к Интернету локальным узлам, использующим частные адреса.
Также в данном процессе выполняется преобразование номеров портов. В контексте сетевых протоколов, таких как TCP и UDP, порт — это числовой идентификатор, который определяет, с каким приложением или службой должен быть ассоциирован определенный сетевой пакет. То есть номер порта устройства внутри локальной сети маскируется (заменяется) другим номером порта в пакете данных, который будет направлен к месту назначения. Таким образом, даже если несколько устройств в локальной сети используют один и тот же общедоступный IP-адрес, перевод портов позволяет отличать трафик от каждого устройства.
После выполнения перевода IP-адресов и портов, NAT создает соответствующие записи в своей таблице. Эта таблица содержит информацию о соответствии между локальными и глобальными адресами, а также номерами портов.
В основном, NAT реализуется на маршрутизаторах или брандмауэрах, которые являются центральными узлами в сети. Они отслеживают и управляют этими переводами адресов, обеспечивая тем самым удобство использования частных адресов внутри сети, сохраняя при этом единственный общедоступный адрес для взаимодействия с внешним миром.
Принцип работы Network Address Translation (NAT)
Как правило, граничный маршрутизатор настроен для NAT, то есть маршрутизатор, который имеет один интерфейс в локальной (внутренней, inside) сети и один интерфейс в глобальной (внешней, outside) сети. Когда пакет проходит за пределы локальной (inside) сети, NAT преобразует локальный (частный, private) IP-адрес в глобальный (публичный, public) IP-адрес. Когда пакет входит в локальную сеть, глобальный (public) IP-адрес преобразуется в локальный (private) IP-адрес. Граничный маршрутизатор выступает в роли шлюза между внутренней корпоративной сетью и внешней сетью, например, Интернетом.
Если у NAT заканчиваются адреса, то есть в пуле не осталось ни одного адреса, то пакеты будут отброшены, и отправителю будет отправлен пакет Internet Control Message Protocol (ICMP) (протокола управления сообщениями в Интернете) с уведомлением о недоступности хоста.
Зачем маскировать номера портов?
Предположим, в сети подключены два хоста A и B. Затем оба они использовали один и тот же номер порта в своих запросах к внешнему узлу или ресурсу в Интернете, например, порт 1000. Поскольку номера портов уникально идентифицируют процессы или соединения, использование одного и того же порта A и B может создать конфликт при последующей обработке ответов от удаленного ресурса.
Когда NAT видит такие запросы с одинаковыми исходными номерами портов от разных хостов, то он сталкивается с проблемой отслеживания, конкретно какому из них принадлежит каждый ответ от удаленного сервера. Это может вызвать путаницу, поскольку NAT использует данные исходные номера портов для определения, куда направлять входящие пакеты внутри локальной сети.
Для решения проблемы, NAT маскирует (изменяет) исходные номера портов вместе с IP-адресами при выполнении трансляции, чтобы гарантировать уникальность идентификаторов каждого хоста в локальной сети. Это также позволяет NAT создавать соответствующие записи в своей таблице, чтобы правильно направлять ответы на определенный хост внутри локальной сети.
Внутренние и внешние адреса NAT
Внутренние адреса — это адреса, которые должны быть преобразованы. Внутренние адреса присваиваются устройствам, находящимся внутри границ локальной сети, и они не уникальны в глобальном масштабе. Внешние адреса находятся за пределами локальной сети и не управляются самой организацией. Внутренние адреса (Inside) должны быть переведены во внешние адреса (Outside), чтобы устройства в локальной сети могли взаимодействовать с внешними ресурсами, такими как веб-сайты в Интернете. Процесс перевода адресов (NAT) позволяет использовать набор приватных внутренних адресов для нескольких устройств в локальной сети и предоставлять им доступ в Интернет через один или несколько общедоступных внешних адресов.
Внутренний локальный адрес — IP-адрес, назначенный хосту во внутренней (локальной) сети. Обычно это приватный IP-адрес, который не является общедоступным в Интернете. Например, адрес вашего компьютера в домашней сети.
Внутренний глобальный адрес — IP-адрес, который представляет один или несколько внутренних локальных IP-адресов внешнему миру (в глобальной сети). Когда внутренний хост из локальной сети отправляет запрос в Интернет, его внутренний локальный адрес заменяется на внутренний глобальный адрес, который виден снаружи. Внутренний глобальный адрес является тем адресом, который виден для внешних устройств и сетей. Внутренний глобальный адрес служит маскировкой внутренних локальных адресов, обеспечивая взаимодействие устройств внутри локальной сети с внешней сетью, сохраняя при этом приватность внутренних адресов от внешнего воздействия.
Внешний локальный адрес — видимый из внешней сети адрес получателя. Он становится видимым для внешних сетей после прохождения процесса трансляции адресов при использовании NAT. Этот адрес служит для корректного маршрутизирования ответов от внешнего ресурса обратно в локальную сеть. Когда устройство в локальной сети отправляет запрос в Интернет, NAT изменяет его локальный IP-адрес на временный внешний локальный адрес. Этот временный адрес используется внутри сети и является адресом, к которому направляется ответ от внешнего ресурса после прохождения NAT.
Внешний глобальный адрес — IP-адрес внешнего хоста, видимый из внешней сети. Этот адрес представляет вашу локальную сеть в глобальной сети (например, Интернете) и используется для идентификации вашей сети во внешнем мире. Внешний глобальный адрес - это адрес маршрутизатора или шлюза, соединенного с Интернетом. Когда устройство из вашей локальной сети отправляет запрос в Интернет, маршрутизатор использует свой внешний глобальный адрес в качестве отправителя запроса. Этот адрес остается постоянным для внешних ресурсов и позволяет им отправлять ответы обратно в вашу локальную сеть. Часто совпадает с локальным внешним адресом.
Типы трансляции сетевых адресов (NAT)
Есть 3 способа настройки NAT:
Статический NAT — В этом случае один незарегистрированный (частный, Private) IP-адрес мапирован с официально зарегистрированным (публичным, Public) IP-адресом, т.е. происходит прямое отображение (один к одному) между локальным и глобальным адресами. Обычно используется для веб-хостинга. Однако в организациях статический NAT не практичен, поскольку требует покупки публичных IP-адресов для каждого устройства, нуждающегося в доступе в Интернет.
Допустим, если есть 3000 устройств, которым нужен доступ в Интернет, организации придется купить 3000 публичных адресов, что очень дорого.
Динамический NAT (Dynamic NAT) — несколько локальных устройств используют общий пул зарегистрированных глобальных (Public) IP-адресов для доступа в Интернет. Если в пуле нет свободного IP-адреса, то пакет будет отброшен, так как только фиксированное количество частных IP-адресов может быть преобразовано в публичные.
Допустим, если в пуле содержится 2 публичных IP-адреса, то в данный момент времени могут быть транслированы только 2 частных IP-адреса. Если третий частный IP-адрес хочет получить доступ в Интернет, то пакет будет отброшен, так как доступен только ограниченный пул общедоступных IP-адресов. Поэтому множество частных IP-адресов сопоставляется с пулом общедоступных IP-адресов. Применение Network Address Translation (NAT) имеет смысл, когда количество пользователей, желающих выходить в Интернет, фиксировано. Однако такой подход становится затратным, поскольку организации приходится приобретать большое количество глобальных IP-адресов для формирования пула.
Используется в случаях, когда необходимо обеспечить доступ в Интернет для нескольких устройств, но не требуется прямого однозначного соответствия локальных и глобальных адресов.
Трансляция с использованием портов PAT (Port Address Translation) — этот способ также известен как перегрузка (overload) NAT. PAT является разновидностью динамического NAT, где несколько устройств в локальной сети применяют один зарегистрированный IP-адрес, а номера портов используются для идентификации конкретных соединений. Данный способ используется наиболее часто, поскольку он экономически эффективен, так как тысячи пользователей могут быть подключены к Интернету, используя только один реальный глобальный (public) IP-адрес.
Преимущества Network Address Translation (NAT)
Экономия официально зарегистрированных IP-адресов.
NAT позволяет экономить официально зарегистрированные IP-адреса, которые являются ограниченным и важным ресурсом. Вместо того чтобы каждому устройству в локальной сети присваивать уникальный общедоступный IP-адрес, NAT использует набор частных IP-адресов внутри сети, а затем выполняет трансляцию этих адресов в один или несколько публичных IP-адресов при выходе в Интернет.
Обеспечение конфиденциальности.
NAT позволяет обеспечить конфиденциальность, так как IP-адрес устройства, отправляющего и принимающего трафик, скрывается. Внутренние устройства в локальной сети используют частные IP-адреса, и при взаимодействии с внешними ресурсами их IP-адреса транслируются в публичный адрес.
Устраняет перенумерацию адресов в процессе развития сети.
NAT избавляет от необходимости перенумерации адресов при изменении сетевой архитектуры или добавлении новых устройств в сеть. Так как внутренние устройства могут использовать частные IP-адреса, изменения внутри локальной сети не требуют изменения глобальных IP-адресов, используемых для взаимодействия с внешними сетями.
Недостатки Network Address Translation (NAT)
Задержки в пути из-за преобразования.
Процесс перевода IP-адресов в рамках NAT может вносить дополнительные задержки при передаче данных. Так происходит из-за того, что каждый сетевой пакет, покидающий локальную сеть и направляющийся в Интернет, должен пройти процесс перевода адресов на граничном маршрутизаторе. Это дополнительное действие может увеличивать время передачи данных.
Некоторые приложения не функционируют при включенном NAT.
Например, приложения, которые применяют передачу данных с использованием определенных портов или требуют прямого взаимодействия с уникальными IP-адресами, могут столкнуться с проблемами при работе через сеть с включенным NAT.
Сложности с туннелированием протоколов, таких как IPsec.
Протоколы туннелирования, такие как IPsec (IP Security), могут испытывать сложности при работе с сетями, использующими NAT. Причина в том, что NAT изменяет заголовки пакетов, а это может привести к проблемам с корректной передачей зашифрованных данных.
Манипуляции с портами на уровне маршрутизатора.
Маршрутизатор, будучи устройством сетевого уровня, не должен изменять номера портов (транспортный уровень), но ему приходится это делать из-за NAT, он вынужден манипулировать портами для поддержки перевода адресов. Это может создавать сложности при использовании приложений, которые полагаются на конкретные порты для правильной работы.
В целом, хотя NAT предоставляет ряд преимуществ, включая экономию IP-адресов, обеспечение конфиденциальности и упрощение изменений в сети, он также сопровождается рядом недостатков, которые могут повлиять на производительность и функциональность определенных приложений и протоколов.
В завершение приглашаем всех желающих на открытое занятие сегодня вечером, на котором поговорим об использовании /31 префикса в IPv4. Записаться на урок можно на странице онлайн-курса "Network Engineer".