stringtranslate.com

Трансляция сетевых адресов

Трансляция сетевых адресов между частной сетью и Интернетом

Трансляция сетевых адресов ( NAT ) — это метод отображения одного пространства IP-адресов в другое путем изменения информации о сетевых адресах в заголовке IP- пакетов во время их передачи через устройство маршрутизации трафика . [1] Первоначально этот метод использовался для обхода необходимости назначать новый адрес каждому хосту при перемещении сети или при замене вышестоящего интернет-провайдера , который не мог маршрутизировать адресное пространство сети. Он стал популярным и важным инструментом для сохранения глобального адресного пространства в условиях исчерпания адресов IPv4 . Один маршрутизируемый в Интернете IP-адрес шлюза NAT может использоваться для всей частной сети . [2]

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

История

IPv4 использует 32-битные адреса, способные однозначно адресовать около 4,3 миллиарда устройств. К 1992 году стало очевидно, что этого будет недостаточно. RFC  1631 1994 года описывает NAT как «краткосрочное решение» двух наиболее насущных проблем, с которыми столкнулся IP-интернет в то время: истощение IP-адресов и масштабирование маршрутизации. К 2004 году NAT получил широкое распространение. [3]

Базовый NAT

Самый простой тип NAT обеспечивает трансляцию IP-адресов один к одному (RFC 1631). RFC  2663 называет этот тип NAT базовым NAT ; его также называют один к одному NAT . В этом типе NAT изменяются только IP-адреса, контрольная сумма заголовка IP и любые контрольные суммы более высокого уровня, включающие IP-адрес. Базовый NAT можно использовать для соединения двух IP-сетей с несовместимой адресацией. [2]

NAT «один ко многим»

Сопоставление сетевых адресов

Большинство трансляторов сетевых адресов сопоставляют несколько частных хостов с одним публично доступным IP-адресом.

Вот типичная конфигурация:

  1. Локальная сеть использует одну из назначенных частных подсетей IP-адресов (RFC 1918 [4] ).
  2. В сети есть маршрутизатор, имеющий как частный, так и публичный адрес. Частный адрес используется маршрутизатором для связи с другими устройствами в частной локальной сети. Публичный адрес (обычно назначаемый поставщиком услуг Интернета ) используется маршрутизатором для связи с остальной частью Интернета.
  3. Когда трафик проходит из сети в Интернет, маршрутизатор преобразует исходный адрес в каждом пакете из частного адреса в собственный публичный адрес маршрутизатора. Маршрутизатор отслеживает основные данные о каждом активном соединении (в частности, адрес назначения и порт ). Когда маршрутизатор получает входящий трафик из Интернета, он использует данные отслеживания соединения, которые он сохранил во время исходящей фазы, чтобы определить, на какой частный адрес (если таковой имеется) он должен переслать ответ. [2]

Все IP-пакеты имеют исходный IP-адрес и IP-адрес назначения. Обычно пакеты, проходящие из частной сети в общедоступную сеть, будут иметь измененный исходный адрес, в то время как пакеты, проходящие из общедоступной сети обратно в частную сеть, будут иметь измененный адрес назначения. Чтобы избежать неоднозначности в том, как переводятся ответы, требуются дополнительные изменения пакетов. Большая часть интернет-трафика использует протокол управления передачей (TCP) или протокол пользовательских датаграмм (UDP). Для этих протоколов номера портов изменяются таким образом, чтобы комбинация IP-адреса (в заголовке IP ) и номера порта (в заголовке транспортного уровня ) в возвращенном пакете могла быть однозначно сопоставлена ​​с соответствующим пунктом назначения частной сети. RFC 2663 использует термин « трансляция сетевого адреса и порта » ( NAPT ) для этого типа NAT. [4] Другие названия включают трансляцию адреса порта ( PAT ), IP-маскировку , перегрузку NAT и NAT «многие к одному» . Это наиболее распространенный тип NAT, который стал синонимом термина NAT в общепринятом использовании.

Этот метод позволяет осуществлять связь через маршрутизатор только тогда, когда разговор происходит в частной сети, поскольку первоначальная исходная передача — это то, что устанавливает требуемую информацию в таблицах перевода. Таким образом, веб-браузер в частной сети сможет просматривать веб-сайты, которые находятся за пределами сети, тогда как веб-браузеры за пределами сети не смогут просматривать веб-сайт, размещенный внутри. [a] Протоколы, не основанные на TCP и UDP, требуют других методов перевода.

Дополнительным преимуществом NAT «один ко многим» является то, что он смягчает проблему нехватки адресов IPv4 , позволяя подключать целые сети к Интернету с использованием одного публичного IP-адреса. [b]

Методы перевода

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

Для этой цели RFC 3489 в 2003 году определил протокол под названием Simple Traversal of UDP over NATs ( STUN ). Он классифицировал реализации NAT как NAT с полным конусом , NAT с ограниченным (адресом) конусом , NAT с ограниченным портом или симметричный NAT и предложил методологию для тестирования устройства соответственно. Однако с тех пор эти процедуры были исключены из статуса стандартов, поскольку методы неадекватны для правильной оценки многих устройств. RFC 5389 стандартизировал новые методы в 2008 году, и аббревиатура STUN теперь представляет новое название спецификации: Session Traversal Utilities for NAT .

Многие реализации NAT объединяют эти типы, поэтому лучше ссылаться на конкретное индивидуальное поведение NAT вместо использования терминологии Cone/Symmetric. RFC 4787 пытается устранить путаницу, вводя стандартизированную терминологию для наблюдаемых поведений. Для первого маркера в каждой строке приведенной выше таблицы RFC будет характеризовать NAT с полным конусом, ограниченным конусом и ограниченным портом конусом как имеющие сопоставление, независимое от конечной точки , тогда как он будет характеризовать симметричный NAT как имеющий сопоставление, зависящее от адреса и порта . Для второго маркера в каждой строке приведенной выше таблицы RFC 4787 также обозначил бы Full-Cone NAT как имеющий Endpoint-Independent Filtering , Restricted-Cone NAT как имеющий Address-Dependent Filtering , Port-Restricted Cone NAT как имеющий Address and Port-Dependent Filtering , а Symmetric NAT как имеющий Address-Dependent Filtering или Address and Port-Dependent Filtering . Другие классификации поведения NAT, упомянутые в RFC, включают сохранение портов, когда и как обновляются сопоставления, могут ли внешние сопоставления использоваться внутренними хостами (т. е. его поведение привязки ), и уровень детерминизма, который NAT демонстрируют при применении всех этих правил. [2] В частности, большинство NAT объединяют симметричный NAT для исходящих соединений со статическим сопоставлением портов , где входящие пакеты, адресованные на внешний адрес и порт, перенаправляются на определенный внутренний адрес и порт.

Отображение NAT против фильтрации NAT

RFC 4787 [2] проводит различие между отображением NAT и фильтрацией NAT.

Раздел 4.1 RFC охватывает сопоставление NAT и определяет, как внешний IP-адрес и номер порта должны быть преобразованы во внутренний IP-адрес и номер порта. Он определяет сопоставление, независимое от конечной точки, сопоставление, зависящее от адреса и сопоставление, зависящее от адреса и порта, объясняет, что эти три возможных варианта не связаны с безопасностью NAT, поскольку безопасность определяется поведением фильтрации, а затем указывает, что «NAT ДОЛЖЕН иметь поведение „независимое от конечной точки“ сопоставление».

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

Некоторые устройства NAT пока не соответствуют RFC 4787, поскольку они обрабатывают сопоставление и фильтрацию NAT одинаково, поэтому их параметр конфигурации для изменения метода фильтрации NAT также изменяет метод сопоставления NAT (например, Netgate TNSR). Для брандмауэра PF доступен патч для включения поддержки RFC 4787, но он еще не был объединен.

Тип NAT и обход NAT, роль сохранения порта для TCP

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

Пробивка отверстий TCP требует, чтобы NAT следовал схеме сохранения портов для TCP. Для заданной исходящей TCP-связи одни и те же номера портов используются с обеих сторон NAT. Сохранение портов NAT для исходящих TCP-соединений имеет решающее значение для обхода TCP NAT, поскольку в TCP один порт может использоваться только для одной связи за раз. Программы, которые привязывают отдельные TCP-сокеты к эфемерным портам для каждой TCP-связи, делают прогнозирование портов NAT невозможным для TCP. [2]

С другой стороны, для UDP NAT не требуется сохранение порта. Действительно, несколько UDP-сообщений (каждое с отдельной конечной точкой ) могут происходить на одном и том же порту источника, и приложения обычно повторно используют один и тот же UDP-сокет для отправки пакетов на разные хосты. Это упрощает прогнозирование порта, поскольку для каждого пакета это один и тот же порт источника.

Более того, сохранение порта в NAT для TCP позволяет протоколам P2P обеспечивать меньшую сложность и меньшую задержку, поскольку нет необходимости использовать третью сторону (например, STUN) для обнаружения порта NAT, поскольку само приложение уже знает порт NAT. [2] [5]

Однако если два внутренних хоста попытаются связаться с одним и тем же внешним хостом, используя один и тот же номер порта, NAT может попытаться использовать другой внешний IP-адрес для второго соединения или может потребоваться отказаться от сохранения порта и переназначить порт. [2] : 9 

По состоянию на 2006 год , около 70% клиентов в сетях P2P использовали ту или иную форму NAT. [6]

Выполнение

Установление двусторонней связи

При двунаправленном NAT сеанс может быть установлен как изнутри, так и извне областей.

Каждый пакет TCP и UDP содержит номер порта источника и номер порта назначения. Каждый из этих пакетов инкапсулируется в IP-пакет, заголовок IP которого содержит IP-адрес источника и IP-адрес назначения. Тройка IP-адрес/протокол/номер порта определяет связь с сетевым сокетом .

Для общедоступных служб, таких как веб- и почтовые серверы, важен номер порта. Например, порт 443 подключается через сокет к программному обеспечению веб-сервера , а порт 465 — к демону SMTP почтового сервера . [7] IP-адрес публичного сервера также важен, по своей глобальной уникальности он похож на почтовый адрес или номер телефона. И IP-адрес, и номер порта должны быть правильно известны всем хостам, желающим успешно взаимодействовать.

Частные IP-адреса, описанные в RFC 1918, можно использовать только в частных сетях, не подключенных напрямую к Интернету. Порты являются конечными точками связи, уникальными для этого хоста, поэтому соединение через устройство NAT поддерживается комбинированным сопоставлением порта и IP-адреса. Частный адрес внутри NAT сопоставляется с внешним публичным адресом. Трансляция адресов портов (PAT) разрешает конфликты, возникающие, когда несколько хостов используют один и тот же номер исходного порта для установления разных внешних подключений в одно и то же время.

Аналогия расширения телефонного номера

Устройство NAT похоже на телефонную систему в офисе, которая имеет один публичный телефонный номер и несколько добавочных номеров. Исходящие телефонные звонки из офиса кажутся поступающими с одного и того же телефонного номера. Однако входящий звонок, в котором не указан добавочный номер, не может быть автоматически переведен на человека внутри офиса. В этом сценарии офис представляет собой частную локальную сеть, основной телефонный номер — публичный IP-адрес, а индивидуальные добавочные номера — уникальные номера портов. [8]

Процесс перевода

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

Когда компьютер в частной (внутренней) сети отправляет IP-пакет во внешнюю сеть, устройство NAT заменяет внутренний исходный IP-адрес в заголовке пакета на внешний IP-адрес устройства NAT. Затем PAT может назначить соединению номер порта из пула доступных портов, [c] вставив этот номер порта в поле исходного порта. Затем пакет пересылается во внешнюю сеть. Затем устройство NAT делает запись в таблице трансляции, содержащей внутренний IP-адрес, исходный исходный порт и преобразованный исходный порт. Последующие пакеты с того же внутреннего исходного IP-адреса и номера порта преобразуются в тот же внешний исходный IP-адрес и номер порта. Компьютер, получающий пакет, прошедший NAT, устанавливает соединение с портом и IP-адресом, указанными в измененном пакете, не обращая внимания на тот факт, что предоставленный адрес преобразуется.

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

Приложения

Маршрутизация
Трансляция сетевых адресов может использоваться для смягчения перекрытия IP-адресов. [9] [10] Перекрытие адресов происходит, когда хосты в разных сетях с одинаковым пространством IP-адресов пытаются достичь одного и того же хоста назначения. Чаще всего это неправильная конфигурация и может быть результатом слияния двух сетей или подсетей, особенно при использовании частной сетевой адресации RFC 1918. Хост назначения получает трафик, по-видимому, поступающий из той же сети, и промежуточные маршрутизаторы не имеют возможности определить, куда следует направлять ответный трафик. Решением является либо перенумерация для устранения перекрытия, либо трансляция сетевых адресов.
Балансировка нагрузки
В клиент-серверных приложениях балансировщики нагрузки пересылают клиентские запросы на набор серверных компьютеров для управления рабочей нагрузкой каждого сервера. Трансляция сетевых адресов может использоваться для сопоставления репрезентативного IP-адреса кластера серверов с определенными хостами, которые обслуживают запрос. [11] [12] [13] [14]

Связанные методы

IEEE Reverse Address and Port Translation (RAPT или RAT) позволяет хосту, реальный IP-адрес которого время от времени меняется, оставаться доступным в качестве сервера через фиксированный домашний IP-адрес. [15] Реализация RAPT Cisco представляет собой перегрузку PAT или NAT и сопоставляет несколько частных IP-адресов с одним публичным IP-адресом. Несколько адресов могут быть сопоставлены с одним адресом, поскольку каждый частный адрес отслеживается по номеру порта. PAT использует уникальные номера исходных портов на внутреннем глобальном IP-адресе для различения трансляций. [d] PAT пытается сохранить исходный порт источника. Если этот исходный порт уже используется, PAT назначает первый доступный номер порта, начиная с начала соответствующей группы портов 0–511, 512–1023 или 1024–65535. Когда больше нет доступных портов и настроено более одного внешнего IP-адреса, PAT переходит к следующему IP-адресу, чтобы попытаться снова выделить исходный порт источника. Этот процесс продолжается до тех пор, пока не закончатся доступные порты и внешние IP-адреса.

Mapping of Address and Port — это предложение Cisco, которое объединяет преобразование адресов и портов с туннелированием пакетов IPv4 по внутренней сети IPv6 провайдера ISP . По сути, это (почти) безгосударственная альтернатива NAT операторского класса и DS-Lite , которая полностью переносит функцию преобразования адресов IPv4 /портов (и поддержание состояния NAT) в существующую реализацию NAT на оборудовании клиента . Таким образом, избегая проблем NAT444 и состояния NAT операторского класса, а также предоставляя механизм перехода для развертывания собственного IPv6 в то же время с очень небольшой дополнительной сложностью.

Проблемы и ограничения

Хосты за маршрутизаторами с поддержкой NAT не имеют сквозного соединения и не могут участвовать в некоторых интернет-протоколах. Службы, требующие инициирования TCP -соединений из внешней сети или использующие протоколы без сохранения состояния, такие как UDP , могут быть нарушены. Если маршрутизатор NAT не предпримет специальных усилий для поддержки таких протоколов, входящие пакеты не смогут достичь своего назначения. Некоторые протоколы могут размещать один экземпляр NAT между участвующими хостами ( например, FTP в пассивном режиме ), иногда с помощью шлюза уровня приложений (см. § Приложения, затронутые NAT), но терпят неудачу, когда обе системы отделены от Интернета NAT. Использование NAT также усложняет протоколы туннелирования, такие как IPsec , поскольку NAT изменяет значения в заголовках, которые мешают проверкам целостности, выполняемым IPsec и другими протоколами туннелирования.

Сквозное соединение было основным принципом Интернета, поддерживаемым, например, Советом по архитектуре Интернета . Текущие документы по архитектуре Интернета отмечают, что NAT является нарушением принципа сквозного соединения , но что NAT играет значимую роль в тщательном проектировании. [16] Значительно больше беспокойства вызывает использование IPv6 NAT, и многие архитекторы IPv6 считают, что IPv6 был предназначен для устранения необходимости в NAT. [17]

Реализация, которая отслеживает только порты, может быть быстро исчерпана внутренними приложениями, которые используют несколько одновременных подключений, например, HTTP- запрос для веб-страницы со множеством встроенных объектов. Эту проблему можно смягчить, отслеживая IP-адрес назначения в дополнение к порту, таким образом разделяя один локальный порт со многими удаленными хостами. Это дополнительное отслеживание увеличивает сложность реализации и вычислительные ресурсы на устройстве трансляции.

Поскольку все внутренние адреса замаскированы за одним общедоступным адресом, внешние хосты не могут напрямую инициировать соединение с определенным внутренним хостом. Такие приложения, как VOIP , видеоконференции и другие одноранговые приложения, должны использовать методы обхода NAT для работы.

Фрагментация и контрольные суммы

Чистый NAT, работающий только на IP, может или не может правильно анализировать протоколы с полезной нагрузкой, содержащей информацию об IP, например ICMP . Это зависит от того, интерпретируется ли полезная нагрузка хостом внутри или снаружи трансляции . Базовые протоколы, такие как TCP и UDP, не могут функционировать должным образом, если NAT не предпринимает действий за пределами сетевого уровня.

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

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

В качестве альтернативы исходный хост может выполнить обнаружение MTU пути , чтобы определить размер пакета, который может быть передан без фрагментации, а затем установить бит don't fragment (DF) в соответствующем поле заголовка пакета. Это только одностороннее решение, поскольку отвечающий хост может отправлять пакеты любого размера, которые могут быть фрагментированы до достижения NAT.

Варианты терминов

ДНКАТ

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

DNAT обычно используется для публикации сервиса, расположенного в частной сети на общедоступном IP-адресе. Такое использование DNAT также называется переадресацией портов или DMZ , когда используется на всем сервере , который становится открытым для WAN, становясь аналогом незащищенной военной демилитаризованной зоны (DMZ).

СНАТ

Значение термина SNAT различается в зависимости от поставщика: [18] [19] [20]

Безопасная трансляция сетевых адресов (SNAT) является частью Microsoft Internet Security and Acceleration Server и представляет собой расширение драйвера NAT, встроенного в Microsoft Windows Server . Он обеспечивает отслеживание и фильтрацию подключений для дополнительных сетевых подключений, необходимых для протоколов FTP , ICMP , H.323 и PPTP , а также возможность настройки прозрачного HTTP- прокси-сервера .

Динамическая трансляция сетевых адресов

Как работает динамический NAT.

Динамический NAT, как и статический NAT, не распространен в небольших сетях, но встречается в крупных корпорациях со сложными сетями. В то время как статический NAT обеспечивает сопоставление внутренних и публичных статических IP-адресов один к одному, динамический NAT использует группу публичных IP-адресов. [24] [25]

NAT-прикрепление

NAT hairpinning , также известный как NAT loopback или NAT reflection , [26] является функцией многих потребительских маршрутизаторов [27] , где машина в локальной сети может получить доступ к другой машине в локальной сети через внешний IP-адрес локальной сети/маршрутизатора (с переадресацией портов, настроенной на маршрутизаторе для направления запросов на соответствующую машину в локальной сети). Это понятие официально описано в 2008 году, RFC  5128.

Ниже описан пример сети:

Если пакет отправляется на 203.0.113.1 компьютером с адресом 192.168.1.100 , пакет обычно направляется на шлюз по умолчанию (маршрутизатор) [e] Маршрутизатор с функцией NAT loopback определяет, что 203.0.113.1 является адресом его интерфейса WAN, и обрабатывает пакет так, как будто он исходит с этого интерфейса. Он определяет пункт назначения для этого пакета на основе правил DNAT (переадресация портов) для пункта назначения. Если данные были отправлены на порт 80 и существует правило DNAT для порта 80, направленное на 192.168.1.2 , то хост по этому адресу получает пакет.

Если применимое правило DNAT недоступно, маршрутизатор отбрасывает пакет. Может быть отправлен ответ ICMP Destination Unreachable . Если какие-либо правила DNAT присутствовали, преобразование адресов все еще действует; маршрутизатор все еще перезаписывает исходный IP-адрес в пакете. Локальный компьютер ( 192.168.1.100 ) отправляет пакет как приходящий с 192.168.1.100 , но сервер ( 192.168.1.2 ) получает его как приходящий с 203.0.113.1 . Когда сервер отвечает, процесс идентичен внешнему отправителю. Таким образом, возможна двусторонняя связь между хостами внутри сети LAN через публичный IP-адрес.

NAT в IPv6

Трансляция сетевых адресов обычно не используется в IPv6, поскольку одной из целей разработки IPv6 является восстановление сквозного сетевого соединения. [28] Большое адресное пространство IPv6 устраняет необходимость сохранения адресов, и каждому устройству может быть назначен уникальный глобально маршрутизируемый адрес. Использование уникальных локальных адресов в сочетании с трансляцией сетевых префиксов может дать результаты, аналогичные NAT.

Большое адресное пространство IPv6 все еще может быть побеждено в зависимости от фактической длины префикса, предоставленной оператором. Нередко бывает так, что для всей домашней сети выдается префикс /64 — наименьшая рекомендуемая подсеть, — требующая использования различных методов для ручного разделения диапазона, чтобы все устройства оставались доступными. [29] Даже фактическое преобразование сетевых адресов IPv6 в IPv6, NAT66, может иногда оказаться полезным: в блоге APNIC описывается случай, когда автору был предоставлен только один адрес (/128). [30]

Приложения, на которые влияет NAT

Некоторые протоколы уровня приложений , такие как протокол передачи файлов (FTP) и протокол инициирования сеанса (SIP), отправляют явные сетевые адреса в своих данных приложения. Например, протокол передачи файлов в активном режиме использует отдельные соединения для трафика управления (команд) и для трафика данных (содержимого файлов). При запросе передачи файла хост, делающий запрос, идентифицирует соответствующее соединение данных по адресам сетевого уровня и транспортного уровня . Если хост, делающий запрос, находится за простым брандмауэром NAT, трансляция IP-адреса или номера порта TCP делает информацию, полученную сервером, недействительной. SIP обычно управляет голосовыми вызовами по IP и страдает от той же проблемы. SIP и сопутствующий ему протокол описания сеанса могут использовать несколько портов для установки соединения и передачи голосового потока через транспортный протокол реального времени . IP-адреса и номера портов кодируются в данных полезной нагрузки и должны быть известны до прохождения NAT. Без специальных методов, таких как STUN , поведение NAT непредсказуемо, и связь может быть нарушена. Программное обеспечение или оборудование шлюза уровня приложений (ALG) могут исправить эти проблемы. Программный модуль ALG, работающий на устройстве брандмауэра NAT, обновляет любые данные полезной нагрузки, которые стали недействительными из-за трансляции адресов. ALG должны понимать протокол более высокого уровня, который им нужно исправить, поэтому для каждого протокола с этой проблемой требуется отдельный ALG. Например, во многих системах Linux существуют модули ядра, называемые трекерами соединений , которые служат для реализации ALG. Однако ALG не может работать, если данные протокола зашифрованы.

Другим возможным решением этой проблемы является использование методов обхода NAT с использованием таких протоколов, как STUN или Interactive Connectivity Establishment (ICE), или фирменных подходов в контроллере границ сеанса . Обход NAT возможен в приложениях на основе как TCP, так и UDP, но метод на основе UDP проще, более понятен и более совместим с устаревшими NAT. [ необходима цитата ] В любом случае протокол высокого уровня должен быть разработан с учетом обхода NAT, и он не работает надежно через симметричные NAT или другие устаревшие NAT с плохим поведением.

Другими возможностями являются протокол управления портами (PCP), [31] протокол сопоставления портов NAT (NAT-PMP) или протокол устройства интернет-шлюза , но для их реализации требуется устройство NAT.

Однако большинство клиент-серверных протоколов (главным исключением является FTP [f] ) не отправляют контактную информацию уровня 3 и не требуют какой-либо специальной обработки со стороны NAT. Фактически, избежание осложнений NAT является практически обязательным требованием при разработке новых протоколов более высокого уровня сегодня.

NAT также могут вызывать проблемы, когда применяется шифрование IPsec и в случаях, когда несколько устройств, таких как SIP-телефоны, находятся за NAT. Телефоны, которые шифруют свою сигнализацию с помощью IPsec, инкапсулируют информацию о порте в зашифрованный пакет, что означает, что устройства NAT не могут получить доступ к порту и преобразовать его. В этих случаях устройства NAT возвращаются к простым операциям NAT. Это означает, что весь трафик, возвращающийся в NAT, сопоставляется с одним клиентом, что приводит к сбою обслуживания более чем одного клиента за NAT. Есть несколько решений этой проблемы: одно — использовать TLS , который работает на уровне 4 и не маскирует номер порта; другое — инкапсулировать IPsec в UDP — последнее решение было выбрано TISPAN для достижения безопасного обхода NAT или NAT с поддержкой «IPsec Passthru» ; другое — использовать пограничный контроллер сеанса для облегчения обхода NAT .

Интерактивное установление соединения — это метод обхода NAT, который не зависит от поддержки ALG.

Уязвимость протокола DNS, о которой Дэн Камински объявил 8 июля 2008 г. [32] , косвенно затрагивается сопоставлением портов NAT. Чтобы избежать отравления кэша DNS , крайне желательно не транслировать номера исходных портов UDP исходящих запросов DNS с сервера DNS за брандмауэром, реализующим NAT. Рекомендуемый обходной путь для уязвимости DNS — заставить все кэширующие серверы DNS использовать рандомизированные исходные порты UDP. Если функция NAT дерандомизирует исходные порты UDP, сервер DNS становится уязвимым.

Примеры программного обеспечения NAT

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

Примечания

  1. ^ Большинство устройств NAT сегодня позволяют сетевому администратору настраивать статические записи таблицы трансляции для подключений из внешней сети во внутреннюю замаскированную сеть. Эту функцию часто называют статическим NAT . Она может быть реализована двумя типами: переадресация портов , которая перенаправляет трафик с определенного внешнего порта на внутренний хост на указанном порту, и назначение хоста DMZ , который передает весь трафик, полученный на внешнем интерфейсе (на любом номере порта), на внутренний IP-адрес, сохраняя порт назначения. Оба типа могут быть доступны в одном и том же устройстве NAT.
  2. ^ Более распространенная схема заключается в том, что компьютерам, которым требуется сквозное соединение, назначается маршрутизируемый IP-адрес, в то время как другие компьютеры, не предоставляющие услуги внешним пользователям, находятся за NAT и имеют всего несколько IP-адресов, используемых для доступа в Интернет.
  3. ^ Поскольку маршрутизатор NAT выделяет индивидуальный порт для каждого исходящего соединения, огромное количество исходящих соединений может переполнить диапазон доступных портов. Поскольку порты обычно освобождаются, когда соединение не производит больше трафика в течение определенного времени, максимальное количество активных соединений ограничено примерно 64K.
  4. ^ Номера портов — это 16-битные целые числа. Общее количество внутренних адресов, которые могут быть преобразованы в один внешний адрес, теоретически может достигать 65 536 на IP-адрес. Реально количество портов, которым может быть назначен один IP-адрес, составляет около 4000.
  5. ^ Если в таблицах маршрутизации компьютера не задан явный маршрут .
  6. ^ Эту проблему можно обойти, используя SFTP вместо FTP.

Ссылки

  1. ^ Справочник по сетевым протоколам (2-е изд.). Javvin Technologies Inc. 2005. стр. 27. ISBN 9780974094526. Получено 16.09.2014 .
  2. ^ abcdefghi Франсуа Оде; Каллен Дженнингс (январь 2007 г.). Требования к поведению трансляции сетевых адресов (NAT) для одноадресной передачи UDP. IETF . дои : 10.17487/RFC4787 . РФК 4787.
  3. ^ Джефф Хьюстон (сентябрь 2004 г.). "Анатомия: взгляд изнутри на трансляторы сетевых адресов" (PDF) . The Internet Protocol Journal .
  4. ^ ab Wing, Dan (2010-07-01). «Трансляция сетевых адресов: расширение адресного пространства Интернета». IEEE Internet Computing . 14 (4): 66–70. doi :10.1109/MIC.2010.96. ISSN  1089-7801. S2CID  31082389.
  5. ^ «Характеристика и измерение прохождения TCP через NAT и брандмауэры». Декабрь 2006 г.
  6. ^ "Освещая тени: оппортунистические сети и веб-измерения". Декабрь 2006 г. Архивировано из оригинала 24-07-2010.
  7. ^ RFC  8314
  8. ^ "The Audio over IP Instant Expert Guide" (PDF) . Tieline. Январь 2010 г. Архивировано из оригинала (PDF) 2011-10-08 . Получено 2011-08-19 .
  9. ^ «Использование NAT в перекрывающихся сетях». Август 2005 г.
  10. ^ «Сценарий проблемы VPN с перекрывающимися подсетями». Сентябрь 2017 г.
  11. ^ Шрисуреш, Пида; Ган, Дер-Хва (август 1998 г.). Распределение нагрузки с использованием преобразования сетевых адресов IP . RFC 2391 . 
  12. ^ «Что такое балансировка нагрузки уровня 4?». Июнь 2020 г.
  13. ^ «Что такое балансировка нагрузки?». Ноябрь 2018 г.
  14. ^ «Настройка балансировки нагрузки сервера с использованием динамического NAT». Июнь 2018 г.
  15. ^ Сингх, Р.; Тай, ЙК; Тео, ВТ; Йеоу, С.В. (1999). «RAT: быстрый (и грязный?) толчок для поддержки мобильности». Труды WMCSA'99. Второй семинар IEEE по мобильным вычислительным системам и приложениям . стр. 32–40. CiteSeerX 10.1.1.40.461 . doi :10.1109/MCSA.1999.749275. ISBN  978-0-7695-0025-6. S2CID  7657883.
  16. ^ Буш, Р.; Мейер, Д. (2002). Некоторые принципы и философия архитектуры Интернета. IETF . doi : 10.17487/RFC3439 . RFC 3439.
  17. ^ Вельде, Г. Ван де; Хайн, Т.; Дромс, Р.; Карпентер, Б.; Кляйн, Э. (2007). Защита локальной сети для IPv6. IETF . doi : 10.17487/RFC4864 . RFC 4864.
  18. ^ "Повышенная устойчивость IP с использованием Cisco Stateful NAT". Cisco .
  19. ^ "Использование NAT для публичного доступа к серверам с частными IP-адресами в частной сети (пример конфигурации WatchGuard)" (PDF) . www.watchguard.com . Архивировано из оригинала (PDF) 2013-01-17.
  20. ^ "K7820: Обзор функций SNAT". AskF5 . 28 августа 2007 г. . Получено 24 февраля 2019 г. .
  21. ^ "Повышенная устойчивость IP с использованием Cisco Stateful NAT". Cisco .
  22. ^ "Использование NAT для публичного доступа к серверам с частными IP-адресами в частной сети (пример конфигурации WatchGuard)" (PDF) . www.watchguard.com . Архивировано из оригинала (PDF) 2013-01-17.
  23. ^ "K7820: Обзор функций SNAT". AskF5 . 28 августа 2007 г. . Получено 24 февраля 2019 г. .
  24. ^ "Динамический NAT". 26 января 2016 г. Получено 19 апреля 2022 г.
  25. ^ "Динамический NAT" . Получено 2022-04-19 .
  26. ^ "Что такое NAT Reflection/NAT Loopback/NAT Hairpinning?". NYC Networkers. 2014-11-09 . Получено 2017-04-27 .
  27. ^ "NAT Loopback Routers – OpenSim" ( MediaWiki ) . OpenSimulator . 2013-10-21 . Получено 2014-02-21 .
  28. ^ Ильич ван Бейнум (2008-07-23). ​​«После упорного сопротивления NAT может в конце концов перейти на IPv6». Ars Technica . Получено 2014-04-24 .
  29. ^ Дюпон, Каспер (18 августа 2015 г.). "подсеть - подсеть IPv6 /64 - что сломается и как это обойти?". Ошибка сервера . Получено 20 апреля 2023 г.
  30. ^ Cilloni, Marco (2018-02-01). "NAT66: The good, the bad, the ugly". Блог APNIC . Получено 20 апреля 2023 г.
  31. ^ Д. Винг, Эд; Чешир, С.; Бокадайр, М.; Пенно, Р.; Селкирк, П. (2013). Протокол управления портами (PCP). IETF . doi : 10.17487/RFC6887 . RFC 6887.
  32. ^ Мессмер, Эллен (2008-07-08). «Крупный недостаток DNS может нарушить работу Интернета». Network World . Архивировано из оригинала 2009-02-13 . Получено 14 июня 2021 г.

Внешние ссылки