С ростом числа компьютеров, устанавливаемых дома и на предприятиях малого бизнеса, становятся очевидными преимущества сетевой среды, предоставляющей широкие возможности совместного использования компьютерных ресурсов. Подключение к интернету является одним из наиболее ценных ресурсов в сети, и потому естественно стремление организовать общий доступ к нему. Развертывание шлюзов интернета позволяет решить эту задачу и построить недорогую, легко управляемую домашнюю или небольшую офисную сеть. В шлюзах интернета, как правило, используется технология NAT (Network Address Translation — преобразование сетевых адресов), которое обеспечивает подключение нескольких узлов к интернету с использованием одного общего IP-адреса. К сожалению, такое решение препятствует нормальной работе многих сетевых приложений, о чем будет подробно рассказано в этом документе.
В связи с этим и была разработана технология NAT Traversal («прохождение NAT»), которая позволяет сетевым приложениям определять, присутствует ли в сети локальное устройство NAT. Обнаружив устройство, приложение может настроить NAT и установить необходимые соответствия между портами, устраняющие проблемы несовместимости.
Данный документ носит обзорный характер и знакомит пользователей и разработчиков сетевых приложений с возможностями NAT; в нем отмечаются основные проблемы, связанные с использованием NAT, и описывается, каким образом технология NAT Traversal помогает решать эти проблемы. Техническое описание API-интерфейсов NAT Traversal, входящих в Windows, планировалось включить в пакет Windows Platform SDK в начале лета 2001 г.; здесь разработчики смогут подробнее узнать, как использовать эти новые возможности операционной системы, действие которых распространяется и на шлюзовые устройства независимых производителей.
Реализация NAT Traversal в устройстве NAT опирается на поддержку технологии UPnP (Universal Plug and Play), спецификации которой определены Рабочим комитетом IGD (Internet Gateway Device — шлюзовое устройство интернета), действующим в рамках Форума UPnP. Информация о технологии UPnP публикуется на веб-сайте UPnP, а более подробные сведения содержатся в части сайта, доступной только для участников форума.
Наличие поддержки UPnP и NAT Traversal является важной характеристикой шлюза интернета. Настоятельно рекомендуется покупать только те устройства, которые оснащены такой поддержкой, поскольку это гарантирует наибольшие удобства для пользователя, снижение затрат на техническую поддержку и доступ к новейшим службам и приложениям.
Добавление в шлюз интернета поддержки NAT Traversal на базе UPnP не требует от производителя чрезмерных усилий или расходов. Используя технологию UPnP, которая, в свою очередь, основывается на стандартах и протоколах интернета, производитель шлюза интернета может без труда решить проблему прохождения NAT практически для любых приложений, обращающихся к его устройству. Такой подход резко контрастирует с «одноразовыми» решениями, которые сегодня вынуждены предлагать многие разработчики приложений и изготовители шлюзов. Настоящий документ не следует рассматривать как подробное руководство для производителей оборудования, намеревающихся реализовать механизм NAT Traversal в своих шлюзах интернета. За подобной информацией лучше обратиться на веб-сайт Форума UPnP.
Знание архитектуры Windows, принципов сетевой обработки и технологии UPnP поможет лучше понять содержание данного документа, но это требование не является обязательным.
Что такое NAT?
NAT (Network Address Translation — преобразование сетевых адресов) представляет собой стандарт IETF (Internet Engineering Task Force — рабочая группа разработки технологий интернета), с помощью которого несколько компьютеров частной сети (с частными адресами из таких диапазонов, как 10.0.x.x, 192.168.x.x, 172.x.x.x) могут совместно пользоваться одним адресом IPv4, обеспечивающим выход в глобальную сеть. Основная причина растущей популярности NAT связана со все более обостряющимся дефицитом адресов протокола IPv4. Средство общего доступа к подключению интернета в операционных системах Windows XP и Windows Me, а также многие шлюзы интернета активно используют NAT, особенно для подключения к широкополосным сетям, например, через DSL или кабельные модемы.
NAT дает немедленное, но временное решение проблемы дефицита адресов IPv4, которая рано или поздно отпадет сама собой с появлением протокола IPv6. Сейчас эта проблема особенно актуальна в Азии и некоторых других регионах; вскоре она заявит о себе и в Северной Америке. Поэтому понятен интерес к использованию IPv6 в качестве более долговременного решения проблемы дефицита адресов.
NAT не только позволяет сократить число необходимых адресов IPv4, но и образует дополнительную защиту частной сети, поскольку с точки зрения любого узла, находящегося вне сети, связь с ней осуществляется лишь через один, совместно используемый IP-адрес. NAT — это не то же самое, что брандмауэр или прокси-сервер, но это, тем не менее, важный элемент безопасности.
Рис. 1. Пример сети, использующей устройство NAT для доступа в интернет.
Устройством NAT может служить компьютер, а также надежный кабельный модем или модем DSL.
Общие принципы работы NAT
Клиентам сети, находящимся с внутренней стороны устройства NAT, назначаются частные IP-адреса; обычно это делается через службу DHCP (Dynamic Host Configuration Protocol — протокол динамической настройки узлов) или путем статической настройки, выполняемой администратором. В ходе сеанса связи с узлом, находящимся снаружи этой частной сети, обычно происходит следующее.
На стороне клиента
Приложение, собирающееся установить связь с сервером, открывает сокет, определяемый IP-адресом источника, портом источника, IP-адресом назначения, портом назначения и сетевым протоколом. Эти параметры идентифицируют обе конечные точки, между которыми будет происходить сеанс связи. Когда приложение передает данные через сокет, частный IP-адрес клиента (IP-адрес источника) и клиентский порт (порт источника) вставляются в пакет в поля параметров источника. Поля параметров пункта назначения будут содержать IP-адрес сервера (IP-адрес назначения — удаленный узел) и порт сервера. Поскольку пункт назначения пакета находится вне частной сети, клиент направляет его в основной шлюз. В данном сценарии роль основного шлюза играет устройство NAT.
Исходящий пакет в устройстве NAT
Устройство NAT перехватывает исходящий пакет и производит сопоставление порта, используя IP-адрес назначения (адрес сервера), порт назначения, внешний IP-адрес устройства NAT, внешний порт, сетевой протокол, а также внутренние IP-адрес и порт клиента.
Устройство NAT ведет таблицу сопоставлений портов и сохраняет созданное сопоставление в этой таблице. Внешние IP-адрес и порт — это общие IP-адрес и порт, которые будут использоваться в текущем сеансе передачи данных вместо внутренних IP-адреса и порта клиента.
Затем устройство NAT «транслирует» пакет, преобразуя в пакете поля источника: частные, внутренние IP-адрес и порт клиента заменяются общими, внешними IP-адресом и портом устройства NAT.
Преобразованный пакет пересылается по внешней сети и в итоге попадает на заданный сервер.
Рис. 2. Пример преобразования исходящего пакета.