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

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

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

В процессе подготовки обзора наткнулся на отличный, на мой взгляд, перевод описания Технологии трансляции адресов от Sisco на сайте Санкт-Перербургской компании «Техно-СПб«.
Этот перевод настолько соответствует тому, как я представлял себе обзор технологии NAT, что я решил не изобретать велосипед и опубликовать его здесь в оригинальном виде.


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

Трансляция сетевых адресов имеет несколько приложений. Целесеобразно применять ее в следующих целях:

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

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

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

Маршрутизатор, осуществляющий адресную трасляцию, должен иметь, по крайней мере, один внутренний и один внешний интерфейс. В обычных условиях NAT конфигурируется на граничном маршрутизаторе, являющимся для данной локальной сети выходом в глобальную, точкой подключения к сетевой магистрали. Когда пакет покидает внутреннюю область, NAT транслирует локальный адрес источника в глобально уникальный адрес. Когда пакет входит в локальную сеть извне, NAT транслирует глобальный адрес назначения в локальный. Если существует более одной выходной точки в глобальную сеть, все устройства, работающие с NAT, должны иметь идентичные таблицы трансляции. Если программное обеспечение не может транслировать адрес, вследствие того, что имеющееся глобальное адресное пространство полностью занято, оно уничтожает пакет и посылает сообщение ICMP Host Unreachable.

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

Как было упомянуто ранее, термин внутренний относится к сетям, которыми владеет данная организация и к которым должна применяться адресная трансляция. Внутри этой области станции будут иметь адреса из одного адресного пространства, в то время, с точки зрения внешнего мира, они будут иметь адреса из другого пространства, если трансляция сконфигурирована. Первое адресное пространство называется локальным, а второе — глобальным.

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

Обобщая, перечислим понятия, используемые при механизме NAT:

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

Трансляция внутренних адресов источника

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

  • Статическая трансляция устанавливает взаимооднозначное соответствие между вашими внутренними локальными адресами и внутренними глобальными адресами. Статическая трансляция полезна, когда внутренняя станция должна быть доступна извне по фиксированному адресу.
  • Динамическая трансляция устанавливает соответствие между внутренними локальными адресами и некоторым множеством глобальных адресов.

На Рис. 6 показан маршрутизатор, транслирующий адрес источника при переходе пакета из внутренней сети во внешний мир.

Рис. 6 : Трансляция внутренних адресов

Следующие шаги описывают трансляцию внутренних адресов источника, в соответствии с Рис. 6:

Шаг 1 Пользователь на Станции 1.1.1.1 открывает соединение со Станцией B.

Шаг 2 Первый пакет, полученный маршрутизатором от Станции 1.1.1.1, заставляет его свериться со своей NAT-таблицей.

  • Если статическая трансляция была сконфигурирована, маршрутизатор следует на Шаг 3.
  • Если соответствующей записи в таблице не существует, маршрутизатор определяет, что адрес источника (source address — SA) 1.1.1.1 должен транслироваться динамически, выбирает легальный, глобальный адрес из динамического адресного диапазона и создает строку в таблице трансляции. Этот тип записи называется простой записью.

Шаг 3 Маршрутизатор заменяет внутренний локальный адрес источника — Станции 1.1.1.1 — на глобальный адрес, в соответствии с записью в таблице, и посылает пакет по назначению.

Шаг 4 Станция B получает пакет и отвечает Станции 1.1.1.1, используя глобальный IP-адрес назначения (destination address — DA) 2.2.2.2.

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

Шаг 6 Станция 1.1.1.1 получает пакет и продолжает диалог со Станцией B. Для каждого пакета маршрутизатор повторяет действия шагов со 2-го по 5-й.

Перекрывание глобальных адресов

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

Рис. 7 иллюстрирует механизм адресной трансляции, когда один глобальный адрес представляет несколько внутренних локальных адресов. Номер порта TCP играет роль отличительного признака.

Рис. 7 : Перекрывание глобальных адресов в NAT

При перекрывании глобальных адресов, как показано на Рис. 7, осуществляются следующие шаги. И Станция B, и Станция C думают, что они говорят с одной и той же станцией по адресу 2.2.2.2. Реально же, они сообщаются с разными станциями; номер порта различает их. В самом деле, многие внутренние станции смогли бы делить между собой один глобальный IP-адрес, используя несколько номеров портов.

Шаг 1 Пользователь на Станции 1.1.1.1 открывает соединение со Станцией B.

Шаг 2 Первый пакет, который маршрутизатор получает от Станции 1.1.1.1, заставляет его свериться со своей NAT-таблицей.

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

Шаг 3 Маршрутизатор заменяет локальный адрес источника 1.1.1.1 на выбранный глобальный апдрес и отправляет пакет.

Шаг 4 Станция B получает пакет и отвечает Станции 1.1.1.1, используя глобальный IP-адрес 2.2.2.2.

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

Шаг 6 Станция 1.1.1.1 получает пакет и продолжает сетевой диалог. Для каждого пакета маршрутизатор повторяет действия шагов со 2-го по 5-й.

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

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

Рис. 8 показывает, как NAT транслирует перехлестывающиеся сети.

Рис. 8 : Трансляция при перехлесте адресов

При этой схеме действия маршрутизатор следующие:

Шаг 1 Пользователь на Станция 1.1.1.1 открывает соединение со Станцией C по имени, адресуя запрос к DNS-серверу.

Шаг 2 Маршрутизатор принимает ответ от DNS и транслирует разрешенный адрес, если возникает перехлест (т.е. полученный легальный адрес находится нелегальным образом и во внутренней сети). Чтобы оттранслировать адрес, маршрутизатор создает простую запись в таблице трансляции, ставящую в соответствие перехлестывающемуся адресу 1.1.1.3 адрес из отдельно сконфигурированного диапазона внешних локальных адресов.

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

Шаг 3 Станция 1.1.1.1 открывает соединение по адресу 3.3.3.3.

Шаг 4 Маршрутизатор осуществляет трансляцию внутренних локального и глобального адресов друг в друга и внешних локального и глобального адресов друг в друга.

Шаг 5 Маршрутизатор заменяет адрес источника на внутренний глобальный адрес, а адрес назначения — на внешний глобальный адрес.

Шаг 6 Станция C получает пакет и продолжает сетевой диалог.

Шаг 7 Маршрутизатор сверяется с таблицей, заменяет адрес назначения на внутренний локальный адрес, а адрес источника — на внешний локальный адрес.

Шаг 8 Станция 1.1.1.1 получает пакет и диалог продолжается с помощью этого трансляционного процесса.

Распределение TCP-трафика

Другой вариант применения NAT не связан с Интернет-адресами. Ваша организация может иметь несколько узлов, которые должны активно взаимодействовать со станциями извне. С помощью NAT вы можете создать во внутренней сети один виртуальный узел, который будет координировать распределение загрузки между реальными сетевыми узлами. Адреса назначения, подходящие определенному списку доступа, заменяются на адреса из другого множества адресов. Адреса из этого диапазона подставляются по «карусельной» схеме и только когда открывается новое соединение из внешней сети. Трафик, имеющий не TCP-происхождение, проходит через маршрутизатор без трансляции (если другие механизмы трансляции не включены). Рис. 9 иллюстрирует эту возможность.

Рис. 9 : Распределение TCP-загрузки с помощью NAT

Маршрутизатор совершает следующие действия:

Шаг 1 Пользователь на Станции B (9.6.7.3) открывает соединение с виртуальной станцией по адресу 1.1.1.127.

Шаг 2 Маршрутизатор получает запрос на соединение и создает новую запись в таблице трансляции, выбирая в качестве локального адреса следующий по очереди из определенного диапазона внутренних адресов- 1.1.1.1.

Шаг 3 Маршрутизатор заменяет адрес назначения на выбранный адрес реальной станции и отправляет пакет.

Шаг 4 Станция 1.1.1.1 получает пакет и отвечает на него.

Шаг 5 Маршрутизатор получает пакет, сверяется с NAT-таблицей, используя локальный адрес и номер порта как ключ. Затем он транслирует адрес источника в адрес виртуального узла и отправляет пакет.

Следующий запрос на соединение приведет к тому, что марщрутизатор выберет адрес 1.1.1.2 в качестве внутреннего локального адреса.

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

Другие материалы по технологии NAT:

Поделиться этой статьей

Comments (2)

  • Игорь Хальметов

    Ух, офигенски! Благодарю, кажется нонял! Запомнить бы ещё…

    27.12.2009 at 12:55
  • Андрей

    Конкретика)
    Спасибо Автору, очень порадовал материал! То что искал и то чего мало в просторах всемирной паутины!

    07.01.2016 at 22:41

Комментарии закрыты.