NAT Traversal

NAT Traversal (прохождение NAT) — это набор возможностей, позволяющих сетевым приложениям определять, что они находятся «под защитой» устройства NAT, узнавать внешний IP-адрес и выполнять сопоставление портов для пересылки пакетов из внешнего порта NAT во внутренний порт, используемый приложением; все это выполняется автоматически, так что пользователю не приходится вручную настраивать сопоставления портов или какие-либо другие параметры.

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

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

Поддержка NAT Traversal в шлюзах Интернета

Поддержка NAT Traversal в шлюзах Интернета реализована в виде поддержки спецификации IGD (Internet Gateway Device). Производители шлюзов должны иметь в виду, что API-интерфейсы NAT Traversal, включенные в Windows, исходят из следующих предположений о работе устройств IGD.

1. Устройства IGD объявляют в каждый момент времени только один внешний интерфейс. Хотя с технической точки зрения допустимо объявление нескольких внешних интерфейсов, API-функции NAT Traversal будут использовать только первый из них.

2. IGD поддерживают сопоставления портов, обеспечивающие пересылку пакетов с любого удаленного IP-адреса внутренним клиентам.

3. IGD поддерживают сопоставления портов, в которых в качестве клиента указан широковещательный адрес.

4. IGD поддерживают различные номера для внешнего порта NAT и внутреннего порта клиента.

5. IGD генерируют объявления с номером версии 1.

6. Статические сопоставления портов действуют неограниченно долго, невзирая на перезагрузки, изменения IP-адресов и присутствие клиента на сервере.

Недостатки NAT Traversal

Хотя NAT Traversal позволяет решить ряд проблем, связанных с подключением через устройства NAT, некоторые проблемы все же остаются. Они перечислены ниже:

1. NAT Traversal использует модель открытых доверительных отношений. Это означает, что все приложения в частной сети имеют доступ ко всем сопоставлениям портов, установленным в NAT. В результате значительно повышается гибкость администрирования (точек управления становится больше), однако приложения лишаются прав монопольного владения своими сопоставлениями.

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

3. NAT Traversal не решает проблемы Интернет-провайдеров, которые сами распределяют частные адреса и используют NAT для подключения клиентов. В этом случае NAT оказывается снаружи шлюза Интернета, фактически в сети провайдера. Средство NAT Traversal в домашней или небольшой офисной сети не сможет работать, если устройство NAT в клиентской сети защищено ещё одним таким же устройством NAT. Поэтому Интернет-провайдерам не рекомендуется развертывать NAT в своих сетях.

4. Изначально приложение не имеет доступа к NAT Traversal — его необходимо изменить, чтобы можно было вызывать функции API, или сопроводить соответствующим сценарием. Впрочем, это вполне осуществимая задача для разработчика, особенно учитывая тот факт, что как только механизмы NAT Traversal интегрированы в приложение, оно приобретает способность работать с множеством различных шлюзов Интернета.

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

6. Шлюз Интернета, на котором установлены средства NAT, должен поддерживать спецификацию Universal Plug and Play Internet Gateway Device версии 0.9 или более поздней.