Работа со средствами NAT и брандмауэрами

Зачастую в сетевом подключении между клиентом и сервером отсутствует прямой и открытый путь для взаимодействия. Пакеты фильтруются, перенаправляются, анализируются и преобразуются как на конечных, так и на промежуточных компьютерах в сети. Типичными примерами промежуточных приложений, участвующих в сетевом взаимодействии, служат средства преобразования сетевых адресов (NAT) и брандмауэры.

Транспорты Windows Communication Foundation (WCF) и шаблоны обмена сообщениями (MEPS) реагируют по-разному, на наличие nats и брандмауэров. В этом разделе описано, как работают средства NAT и брандмауэры в типичных топологиях сети. Рекомендации для конкретных сочетаний транспорта WCF и МЕП, которые помогают сделать приложения более надежными для NATs и брандмауэров в сети.

Влияние преобразования сетевых адресов на обмен данными

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

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

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

Влияние брандмауэров на обмен данными

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

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

В типичной конфигурации домашнего пользователя брандмауэр запрещает входящие подключения кроме случаев, когда ранее было установлено исходящее подключение к этому компьютеру. В типичной конфигурации корпоративного пользователя брандмауэр запрещает входящие подключения ко всем портам за исключением группы заданных портов. Примером служит брандмауэр, который запрещает подключения ко всем портам, кроме портов 80 и 443 для предоставления услуг HTTP и HTTPS. Также домашним и корпоративным пользователям предлагаются управляемые брандмауэры, которые разрешают доверенному пользователю или процессу изменять конфигурацию брандмауэра. Управляемые брандмауэры чаще используются домашними пользователями, у которых нет корпоративной политики по контролю за использованием сети.

Использование Teredo

Teredo является технологией перехода на IPv6, позволяющей напрямую обращаться к адресам компьютеров, находящихся за устройством преобразования сетевых адресов (NAT). Teredo опирается на использование сервера, который может публично и глобально маршрутизироваться для объявления возможных подключений. Сервер Teredo служит общей точкой пересечения для клиента и сервера приложения, с помощью которой они могут обмениваться информацией о подключении. Затем компьютеры запрашивают временный адрес Teredo, а пакеты туннелируются по существующей сети. Поддержка Teredo в WCF требует включения поддержки IPv6 и Teredo в операционной системе. Операционные системы Windows XP и более поздних версий поддерживают Teredo. Операционные системы Windows Vista и более поздних версий поддерживают протокол IPv6 по умолчанию и требуют, чтобы пользователь мог включить Teredo. Windows XP с пакетом обновления 2 (SP2) и Windows Server 2003 требуют от пользователя включения IPv6 и Teredo. Дополнительные сведения см. в обзоре Teredo.

Выбор транспорта и шаблона обмена сообщениями

Выбор транспорта и шаблона обмена сообщениями осуществляется в три этапа.

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

  2. Анализ ограничений протокола и портов компьютеров конечной точки. Корпоративные серверы, как правило, находятся за мощными брандмауэрами, которые блокируют многие порты. Однако зачастую открыт порт 80 для трафика HTTP и порт 443 для трафика HTTPS. Ограничения портов у конечных пользователей применяются реже, однако может использоваться брандмауэр, разрешающий только исходящие подключения. В некоторых брандмауэрах предусмотрена возможность избирательного открытия подключений для отдельных приложений на конечной точке.

  3. Выбор транспортов и шаблонов обмена сообщениями с учетом возможности адресации и ограничения портов в сети.

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

  • Не используйте двусторонние транспорты. Двусторонний транспорт открывает больше подключений, что снижает вероятность успешного установления подключения.

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

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

В следующих таблицах рассматриваются односторонние, ответные запросы и дуплексные МЕП, а также стандартные TCP, TCP с Teredo и стандартные и двойные http-транспорты в WCF.

Возможность адресации Прямая адресация сервера Прямая адресация сервера с обходом NAT Сервер NAT Сервер NAT с обходом NAT
Прямая адресация клиента Любой транспорт и шаблон обмена сообщениями Любой транспорт и шаблон обмена сообщениями Не поддерживается. Не поддерживается.
Прямая адресация клиента с обходом NAT Любой транспорт и шаблон обмена сообщениями Любой транспорт и шаблон обмена сообщениями Не поддерживается. TCP с Teredo и любым шаблоном обмена сообщениями. Windows Vista имеет возможность настройки на уровне компьютера для поддержки HTTP с Teredo.
Клиент NAT Любой односторонний транспорт и шаблон обмена сообщениями. Для шаблона дуплексного обмена сообщениями требуется TCP-транспорт. Любой односторонний транспорт и шаблон обмена сообщениями. Для шаблона дуплексного обмена сообщениями требуется TCP-транспорт. Не поддерживается. Не поддерживается.
Клиент NAT с обходом NAT Любой односторонний транспорт и шаблон обмена сообщениями. Для шаблона дуплексного обмена сообщениями требуется TCP-транспорт. Любой транспорт, кроме двустороннего HTTP, и любой шаблон обмена сообщениями. Для шаблона дуплексного обмена сообщениями требуется TCP-транспорт. Для двустороннего TCP-транспорта требуется Teredo. Windows Vista имеет возможность настройки на уровне компьютера для поддержки HTTP с Teredo. Не поддерживается. TCP с Teredo и любым шаблоном обмена сообщениями. Windows Vista имеет возможность настройки на уровне компьютера для поддержки HTTP с Teredo.
Ограничения брандмауэра Открытый сервер Сервер с управляемым брандмауэром Сервер с брандмауэром, разрешающим только трафик HTTP Сервер с брандмауэром, разрешающим только исходящий трафик
Открытый клиент Любой транспорт и шаблон обмена сообщениями Любой транспорт и шаблон обмена сообщениями Любой HTTP-транспорт и шаблон обмена сообщениями Не поддерживается.
Клиент с управляемым брандмауэром Любой односторонний транспорт и шаблон обмена сообщениями. Для шаблона дуплексного обмена сообщениями требуется TCP-транспорт. Любой односторонний транспорт и шаблон обмена сообщениями. Для шаблона дуплексного обмена сообщениями требуется TCP-транспорт. Любой HTTP-транспорт и шаблон обмена сообщениями Не поддерживается.
Клиент с брандмауэром, разрешающим только трафик HTTP Любой HTTP-транспорт и шаблон обмена сообщениями Любой HTTP-транспорт и шаблон обмена сообщениями Любой HTTP-транспорт и шаблон обмена сообщениями Не поддерживается.
Клиент с брандмауэром, разрешающим только исходящий трафик Любой односторонний транспорт и шаблон обмена сообщениями. Для шаблона дуплексного обмена сообщениями требуется TCP-транспорт. Любой односторонний транспорт и шаблон обмена сообщениями. Для шаблона дуплексного обмена сообщениями требуется TCP-транспорт. Любой HTTP-транспорт и любой недуплексный шаблон обмена сообщениями. Не поддерживается.