Возможности, обеспечиваемые технологиями NAT Traversal и UPnP в системе Windows XP
Введение
С ростом числа компьютеров, устанавливаемых дома и на предприятиях малого бизнеса, становятся очевидными преимущества сетевой среды, предоставляющей широкие возможности совместного использования компьютерных ресурсов. Подключение к интернету является одним из наиболее ценных ресурсов в сети, и потому естественно стремление организовать общий доступ к нему. Развертывание шлюзов интернета позволяет решить эту задачу и построить недорогую, легко управляемую домашнюю или небольшую офисную сеть. В шлюзах интернета, как правило, используется технология NAT (Network Address Translation — преобразование сетевых адресов), которое обеспечивает подключение нескольких узлов к интернету с использованием одного общего
В связи с этим и была разработана технология NAT Traversal («прохождение NAT»), которая позволяет сетевым приложениям определять, присутствует ли в сети локальное устройство NAT. Обнаружив устройство, приложение может настроить NAT и установить необходимые соответствия между портами, устраняющие проблемы несовместимости.
Данный документ носит обзорный характер и знакомит пользователей и разработчиков сетевых приложений с возможностями NAT; в нем отмечаются основные проблемы, связанные с использованием NAT, и описывается, каким образом технология NAT Traversal помогает решать эти проблемы. Техническое описание
Реализация NAT Traversal в устройстве NAT опирается на поддержку технологии UPnP (Universal Plug and Play), спецификации которой определены Рабочим комитетом IGD (Internet Gateway Device — шлюзовое устройство интернета), действующим в рамках Форума UPnP. Информация о технологии UPnP публикуется на
Наличие поддержки UPnP и NAT Traversal является важной характеристикой шлюза интернета. Настоятельно рекомендуется покупать только те устройства, которые оснащены такой поддержкой, поскольку это гарантирует наибольшие удобства для пользователя, снижение затрат на техническую поддержку и доступ к новейшим службам и приложениям.
Добавление в шлюз интернета поддержки NAT Traversal на базе UPnP не требует от производителя чрезмерных усилий или расходов. Используя технологию UPnP, которая, в свою очередь, основывается на стандартах и протоколах интернета, производитель шлюза интернета может без труда решить проблему прохождения NAT практически для любых приложений, обращающихся к его устройству. Такой подход резко контрастирует с «одноразовыми» решениями, которые сегодня вынуждены предлагать многие разработчики приложений и изготовители шлюзов. Настоящий документ не следует рассматривать как подробное руководство для производителей оборудования, намеревающихся реализовать механизм NAT Traversal в своих шлюзах интернета. За подобной информацией лучше обратиться на
Знание архитектуры 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, но и образует дополнительную защиту частной сети, поскольку с точки зрения любого узла, находящегося вне сети, связь с ней осуществляется лишь через один, совместно используемый

Рис. 1. Пример сети, использующей устройство NAT для доступа в интернет. Устройством NAT может служить компьютер, а также надежный кабельный модем или модем DSL
Общие принципы работы NAT
Клиентам сети, находящимся с внутренней стороны устройства NAT, назначаются частные
На стороне клиента
Приложение, собирающееся установить связь с сервером, открывает сокет, определяемый
Исходящий пакет в устройстве NAT
Устройство NAT перехватывает исходящий пакет и производит сопоставление порта, используя
Устройство NAT ведет таблицу сопоставлений портов и сохраняет созданное сопоставление в этой таблице. Внешние
Затем устройство NAT «транслирует» пакет, преобразуя в пакете поля источника: частные, внутренние
Преобразованный пакет пересылается по внешней сети и в итоге попадает на заданный сервер.

Рис. 2. Пример преобразования исходящего пакета
На стороне сервера
Получив пакет, сервер полагает, что имеет дело с
Входящий пакет в устройстве NAT
NAT принимает эти пакеты от сервера и анализирует их содержимое на основе своей таблицы сопоставления портов. Если в таблице будет найдено сопоставление порта, для которого
Затем NAT отправляет пакет клиенту по внутренней сети. Однако если NAT не находит подходящего сопоставления портов, входящий пакет отвергается и соединение разрывается.
Благодаря устройству NAT клиент получает возможность передавать данные в глобальной среде интернета, используя лишь частный
Однако не все сетевые приложения пользуются протоколами, способными взаимодействовать с NAT. В
Проблемы взаимодействия NAT и приложений
Средство NAT успешно обеспечивает совместное использование единого глобального
Службы во внутренней сети
Многие сетевые службы и серверы исходят из того, что если они установили прослушивающий сокет, то любой клиент в интернете сможет инициировать с ними контакт. Если на периферии сети размещено устройство NAT, то для прохождения входящего трафика к службам внутренней сети потребуется наличие соответствующего сопоставления портов. Поэтому такая служба будет доступна только клиентам частной сети, но не остальным узлам интернета.
Чаще всего эту проблему обходят, вручную настраивая сопоставление портов, которое позволяет устройству NAT передавать трафик, адресованный в NAT с указанием неких внешних
Когда такое сопоставление установлено, служба может получать входящие пакеты и становится доступной для клиентов, внешних по отношению к частной сети. Пока сопоставление портов не выполнено, связь с сетью не поддерживается.
Настроить сопоставление портов вручную, как правило, довольно сложно; это требует определенного опыта. Поэтому многие индивидуально работающие пользователи и сотрудники небольших офисов не могут работать с нужными им приложениями и службами без посторонней помощи и вынуждены в поисках решения проблемы обращаться в службу технической поддержки своего
Вложенные адреса и порты
Некоторые сетевые приложения предполагают, что
Если сервер попытается ответить, используя вложенные
Приложения, использующие различные сокеты
Некоторые сетевые приложения отправляют трафик на сервер или в другой узел, используя сокет в одном порте “X”, а ожидают ответа с сервера на другом, прослушивающем сокете в порте “Y”. NAT изучает исходящий трафик и производит сопоставление порта “X”, но не знает о том, что нужно еще выполнить сопоставление портов для возвращающихся пакетов, адресованных в порт “Y”. Входящие пакеты, адресованные в порт “Y”, отбрасываются.
Ожидание доступа к портам
Некоторые сетевые протоколы исходят из того, что нужный им порт, широко известный и допускающий глобальную маршрутизацию, всегда будет для них доступен. Когда несколько клиентов сообща используют один
Использование нескольких устройств NAT
Если клиент находится с внутренней стороны устройства NAT, которое, в свою очередь, защищено еще одним устройством NAT, возникают новые проблемы, суть которых выходит за рамки настоящего документа.
Последствия для пользователей и для отрасли
Выше описывались технические аспекты проблем прохождения NAT. По отношению к пользователю эти проблемы проявляются очень просто: применяя NAT, он не сможет работать с нужными ему службами или приложениями.
Большинство пользователей сегодня и не подозревают, что становятся «жертвами» NAT. Они знают одно: когда они пытаются сыграть в коллективную игру или воспользоваться приложениями одноранговой связи (например, средствами общения в режиме реального времени), им это не удается. На экране появляется сообщение об ошибке (
В некоторых случаях пользователь, подключающийся к интернету через обычный модем удаленного доступа, не будет сталкиваться с подобными неполадками. Но если он станет абонентом службы широкополосного доступа и перейдет на модем DSL или кабельный модем, проблемы станут неизбежны. Пользователи, рассчитывавшие на более эффективную связь через интернет, будут озадачены внезапно появившимися помехами, не дающими им играть в игры и применять другие службы.
Это может привести к росту недовольства среди пользователей, которое будет направлено на изготовителей компьютеров,
Но это проблема касается не только пользователя. Это также проблема производителей, предоставляющих пользователю продукты и услуги. Обращения в службу поддержки, вызванные проблемами NAT, означают повышение расходов и могут неблагоприятно отразиться на прибылях производителя или продавца продукта. В итоге
Учитывая все эти факторы, следует признать, что решение проблемы NAT становится важнейшей задачей для всей отрасли.
Что такое NAT Traversal?
NAT Traversal (прохождение NAT) — это набор возможностей, позволяющих сетевым приложениям определять, что они находятся «под защитой» устройства NAT, узнавать внешний
Данная технология представляет собой более целостное решение проблем связи, обусловленных применением устройств NAT, по сравнению с использовавшимися раньше методами, ориентированными на конкретные приложения. До сих пор подобные специализированные решения требовали либо наличия у пользователя технических знаний, либо специальной доработки со стороны создателя приложения или производителя шлюза интернета, либо всего этого вместе.
Хотя средство прохождения NAT направлено на решение некоторых проблем, связанных с NAT, оно не являются панацеей и не способно разрешить ВСЕ проблемы. Тем не менее его воплощение в автоматизированном виде представляет собой существенный шаг вперед в деле более полного удовлетворения пользователей, снижения нагрузки на службу технической поддержки и продвижения новейших служб и приложений, особенно в среде домашней сети.
Технологию NAT Traversal следует рассматривать как подручный механизм, который должен использоваться в случае необходимости, а не во всех ситуациях подряд. Потребность в NAT и, следовательно, в технологии NAT Traversal отпадет с появлением IPv6, когда каждый клиент получит
Принципы работы NAT Traversal
NAT Traversal в своей работе опирается на протоколы обнаружения и управления, входящие в спецификации, установленные Форумом UPnP (Universal Plug and Play). В составе Форума UPnP имеется рабочий комитет, занимающийся составлением протокола управления шлюзовыми устройствами интернета (Internet Gateway Device, IGD) и определением служб для этих устройств.
Шлюзы интернета, поддерживающие обязательные элементы протокола управления устройствами IGD, будут объявлять о своем присутствии и публиковать
NAT Traversal API
Когда сетевому приложению нужно обнаружить устройство NAT и отрегулировать параметры его работы, приложение может воспользоваться интерфейсом NAT Traversal API, входящим в комплект Windows (и полностью описанным в материалах пакета Platform SDK), и выполнить следующие функции:
- определить, присутствует ли устройство NAT;
- получить внешний
IP-адрес NAT; - получить данные о статическом сопоставлении конкретного внешнего порта, если таковое существует;
- добавить статическое сопоставление портов, если внешний порт не был ранее назначен;
- включить или отключить конкретное сопоставление портов, не удаляя его;
- изменить описание статического сопоставление портов, понятное для пользователя;
- удалить статическое сопоставление портов;
- получить список статических сопоставлений портов для локальной сети.
С помощью этих функций приложения могут обходить многие проблемы, вызываемые наличием NAT. Следует учесть, что
API-интерфейсы NAT Traversal в составе Windows XP
NAT Traversal в Windows 2000 на данный момент не поддерживается.
Поддержка NAT Traversal в шлюзах интернета
Поддержка NAT Traversal в шлюзах интернета реализована в виде поддержки спецификации IGD (Internet Gateway Device), определенной Рабочим комитетом по шлюзам интернета в рамках Форума UPnP. Производители шлюзов должны иметь в виду, что
- Устройства IGD объявляют в каждый момент времени только один внешний интерфейс. Хотя с технической точки зрения допустимо объявление нескольких внешних интерфейсов,
API-функции NAT Traversal будут использовать только первый из них. - IGD поддерживают сопоставления портов, обеспечивающие пересылку пакетов с любого удаленного
IP-адреса внутренним клиентам. - IGD поддерживают сопоставления портов, в которых в качестве клиента указан широковещательный адрес.
- IGD поддерживают различные номера для внешнего порта NAT и внутреннего порта клиента.
- IGD генерируют объявления с номером версии 1.
- Статические сопоставления портов действуют неограниченно долго, невзирая на перезагрузки, изменения
IP-адресов и присутствие клиента на сервере.
На момент написания данного документа уже несколько ведущих производителей объявили о планах начать в 2001 г. поставки поддерживающих эти спецификации UPnP шлюзовых устройств интернета, совместимых с
Чем больше производителей шлюзов интернета осознают преимущества технологии UPnP как средства обхода проблем NAT и чем больше пользователей знакомятся с этими средствами, тем выше шансы на то, что решение NAT Traversal на базе UPnP станет непременным атрибутом устройств данной категории.
Производителям шлюзов интернета следует вступать в ряды Форума UPnP — так они смогут быстрее узнать о том, как добиться совместимости своих устройств со стандартами UPnP.
Следует заметить, что средство общего доступа к подключению интернета в Windows XP поддерживает версию 0.9 стандарта UPnP IGD. Ожидается, что версия 1.0 будет совместима с версией 0.9.
Как приложения используют NAT Traversal
Способ использования NAT Traversal приложением зависит от ряда факторов, например, от того, каким должен быть срок действия сопоставления портов и сколько клиентов или служб используют данный порт. Очень важно, чтобы приложения в конце уничтожали («очищали») создаваемые ими статические сопоставления портов, чтобы освобождать порты для других приложений.
Если приложение представляет собой сетевую службу (например,
Если приложение не будет работать постоянно или нет гарантии, что его статические сопоставления портов будут все время поддерживаться сетью, оно может резервировать
И в этом случае изменение внешнего
Если один и тот же внутренний номер порта используется сразу несколькими приложениями разных клиентов частной сети, эти приложения придется немного изменить, чтобы обеспечить работу нескольких клиентов. В каждый момент времени только один клиент может сопоставлять внешнему порту этот внутренний номер порта. Рекомендуется такой режим: право на использование порта получает первый клиент. Остальные клиенты должны запрашивать асимметричные сопоставления, в которых внутренний порт отличался бы от внешнего.
Следует рассмотреть такой особый случай: несколько клиентов могут прослушивать один и тот же внешний порт с единственной целью — быть обнаруженными удаленными узлами. Входящие пакеты могут преобразовываться так, чтобы в качестве внутреннего
Если службе необходимо прослушивать произвольный порт в течение короткого промежутка времени, она должна запросить статическое сопоставление порта в приложении, а не в сценарии. Закончив работу, служба должна сразу же выполнить очистку (удалить сопоставление). В приложении следует вести учет собственных действующих сопоставлений портов. В итоге если произойдет сбой приложения и оно не успеет закрыть сопоставления портов, при следующем запуске приложения оно сможет получить все данные, необходимые для очистки.
Если приложение должно выйти из сети без очистки своих сопоставлений портов, они будут сохранены, и ответственность за очистку перекладывается на пользователя. В настоящее время в Windows механизм очистки отсутствует, поскольку трудно определить, когда приложение заканчивает пользоваться сопоставлением.
Недостатки NAT Traversal
Хотя NAT Traversal позволяет решить ряд проблем, связанных с подключением через устройства NAT, некоторые проблемы все же остаются. Они перечислены ниже.
- NAT Traversal использует модель открытых доверительных отношений. Это означает, что все приложения в частной сети имеют доступ ко всем сопоставлениям портов, установленным в NAT. В результате значительно повышается гибкость администрирования (точек управления становится больше), однако приложения лишаются прав монопольного владения своими сопоставлениями.
- Разрешение конфликтов является обязанностью приложений. Если приложение пытается сопоставить порт, уже сопоставленный другому клиенту, следует либо найти другой порт, либо соответственно изменить программный код.
- NAT Traversal не решает проблемы
интернет-провайдеров, которые сами распределяют частные адреса и используют NAT для подключения клиентов. В этом случае NAT оказывается снаружи шлюза интернета, фактически в сети провайдера. Средство NAT Traversal в домашней или небольшой офисной сети не сможет работать, если устройство NAT в клиентской сети защищено еще одним таким же устройством NAT. Поэтомуинтернет-провайдерам не рекомендуется развертывать NAT в своих сетях. - Изначально приложение не имеет доступа к NAT Traversal — его необходимо изменить, чтобы можно было вызывать функции API, или сопроводить соответствующим сценарием. Впрочем, это вполне осуществимая задача для разработчика, особенно учитывая тот факт, что как только механизмы NAT Traversal интегрированы в приложение, оно приобретает способность работать с множеством различных шлюзов интернета.
- Приложения, закончив работу с сопоставлениями портов, должны выполнить после себя очистку. Статические сопоставления сохраняются неопределенно долго и наиболее всего подходят для служб, которые собираются прослушивать широко известные порты на протяжении всего существования приложения.
- Шлюз интернета, на котором установлены средства NAT, должен поддерживать спецификацию Universal Plug and Play Internet Gateway Device версии 0.9 или более поздней.
Заключение
NAT представляет собой одобренное группой IETF решение проблемы исчерпания пространства имен IPv4. Шлюзы интернета, использующие NAT, часто устанавливаются дома и в небольших офисах. Они применяются потому, что дешевы, легко управляемы и не требуют установки специального программного обеспечения.
Недостатком использования NAT является то, что оно препятствует применению коллективных игр, служб общения в режиме реального времени и приложений одноранговой связи. Это объясняется тем, что сетевые протоколы действуют исходя из предположений об архитектуре сети, которые с появлением NAT перестают выполнятся.
Технология NAT Traversal позволяет приложениям обнаружить устройство NAT, определить совместно используемый
Основные тезисы данного документа:
- Производители шлюзов интернета должны реализовывать технологию UPnP в своих устройствах, чтобы обеспечить поддержку NAT Traversal.
- Разработчики сетевых приложений должны использовать
API-интерфейсы Windows NAT Traversal для обнаружения NAT и предусмотреть в своих приложениях возможность прохождения NAT в случае необходимости. - Пользователи, желающие добиться наиболее эффективной работы приложений, должны выбирать для себя шлюзы интернета, поддерживающие технологии UPnP и NAT Traversal.
- Провайдеры широкополосного доступа (через DSL и кабельные модемы) должны организовать продажу и аренду шлюзов интернета, поддерживающих UPnP NAT Traversal.
NAT Traversal будет существовать в той или иной форме до тех пор, пока с появлением IPv6 не отпадет необходимо

Набор бесплатных утилит, облегчающих работу администратора Microsoft ISA Server.
Программа для контроля Интернет-канала организации и учета трафика, проходящего через Microsoft ISA Server
и другие прокси-серверы. Позволяет отслеживать кто, когда, куда, откуда и зачем выходил в Интернет.
Программа для учета трафика и контроля эффективности работы Microsoft Exchange Server и других почтовых серверов.
Позволяет отслеживать сколько, кто, кому, когда отправлял электронных писем.
Программа для мониторинга принтеров Вашей организации. Позволяет отслеживать кто, когда и сколько распечатал страниц.
RSS