Работа со средствами NAT и брандмауэрами
Зачастую в сетевом подключении между клиентом и сервером отсутствует прямой и открытый путь для взаимодействия. Пакеты фильтруются, перенаправляются, анализируются и преобразуются как на конечных, так и на промежуточных компьютерах в сети. Типичными примерами промежуточных приложений, участвующих в сетевом взаимодействии, служат средства преобразования сетевых адресов (NAT) и брандмауэры.
При наличии средств NAT и брандмауэров транспорты и шаблоны обмена сообщениями (MEP) Windows Communication Foundation (WCF) работают по другому. В этом разделе описано, как работают средства NAT и брандмауэры в типичных топологиях сети. Также приведены рекомендации по конкретным комбинациям транспортов WCF и MEP, которые помогают повысить надежность приложений при наличии в сети средств NAT и брандмауэров.
Влияние преобразования сетевых адресов на обмен данными
Преобразование сетевых адресов позволяет нескольким компьютерам использовать один внешний IP-адрес. При преобразовании сетевых адресов с сопоставлением портов внутреннему IP-адресу и порту подключения сопоставляется внешний IP-адрес с новым номером порта. Новый номер порта позволяет сопоставлять возвращаемый трафик с исходной передачей данных. В настоящее время многие домашние пользователи имеют один личный маршрутизируемый IP-адрес и используют преобразование сетевых адресов для глобальной маршрутизации пакетов.
Преобразование сетевых адресов не обеспечивает периметр безопасности. Однако в распространенных конфигурациях NAT прямая адресация внутренних компьютеров не поддерживается. Это, с одной стороны, позволяет защитить внутренние компьютеры от некоторых нежелательных подключений, а, с другой стороны, затрудняет создание серверных приложений, которым требуется асинхронно отправлять данные назад клиенту. Средство NAT переписывает адреса в пакетах таким образом, чтобы они напоминали подключения, исходящие от компьютера NAT. Это приводит к сбою сервера при попытке открытия обратного подключения к клиенту. Если сервер использует полученный адрес клиента, происходит сбой, поскольку отсутствует возможность открытой маршрутизации на адрес клиента. Если сервер использует адрес NAT, происходит сбой из-за отсутствия прослушивающего приложения на этом компьютере.
Некоторые средства NAT поддерживают настройку правил переадресации, чтобы разрешить внешним компьютерам подключаться к определенному внутреннему компьютеру. Инструкции по настройке правил переадресации различаются в разных системах NAT, поэтому в большинстве случаев не рекомендуется обращаться к конечным пользователям с просьбой изменить конфигурацию NAT. Кроме того, многие конечные пользователи не смогут или не захотят изменять конфигурацию NAT ради одного приложения.
Влияние брандмауэров на обмен данными
Брандмауэр — это программная или аппаратная система, которая применяет правила к трафику, проходящему через эту систему, с целью определить, разрешить или запретить прохождение такого трафика. Брандмауэры можно настроить для проверки входящего или исходящего трафика. Брандмауэр создает в сети периметр безопасности либо на границе сети, либо на узле конечной точки. Корпоративные пользователи традиционно размещали свои серверы за брандмауэром для предотвращения вредоносных атак. С появлением персонального брандмауэра в Windows XP с пакетом обновления 2 (SP2) также значительно увеличилось количество домашних пользователей, защищенных брандмауэром. Скорее всего, одна или обе конечных точки подключения снабжены брандмауэром, проверяющим пакеты.
Брандмауэры очень сильно различаются по своей сложности и возможностям проверки пакетов. Простые брандмауэры применяют правила на основании исходного и конечного адресов и портов, указанных в пакетах. Более сложные брандмауэры также проверяют содержимое пакетов. Такие брандмауэры поставляются в различных конфигурациях и часто используются для специализированных приложений.
В типичной конфигурации домашнего пользователя брандмауэр запрещает входящие подключения кроме случаев, когда ранее было установлено исходящее подключение к этому компьютеру. В типичной конфигурации корпоративного пользователя брандмауэр запрещает входящие подключения ко всем портам за исключением группы заданных портов. Примером служит брандмауэр, который запрещает подключения ко всем портам, кроме портов 80 и 443 для предоставления услуг HTTP и HTTPS. Также домашним и корпоративным пользователям предлагаются управляемые брандмауэры, которые разрешают доверенному пользователю или процессу изменять конфигурацию брандмауэра. Управляемые брандмауэры чаще используются домашними пользователями, у которых нет корпоративной политики по контролю за использованием сети.
Использование Teredo
Teredo — это технология туннелирования для IP версии 6, которая обеспечивает прямую адресацию компьютеров, находящихся за средством 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 Overview.
Выбор транспорта и шаблона обмена сообщениями
Выбор транспорта и шаблона обмена сообщениями осуществляется в три этапа.
Анализ возможности адресации компьютеров конечной точки. В большинстве случаев для корпоративных серверов доступна прямая адресация, а возможность адресации конечных пользователей блокируется средствами NAT. Если обе конечные точки защищены средствами NAT, например в одноранговых сценариях взаимодействия между конечными пользователями, для обеспечения возможности адресации может потребоваться использование такой технологии, как Teredo.
Анализ ограничений протокола и портов компьютеров конечной точки. Корпоративные серверы, как правило, находятся за мощными брандмауэрами, которые блокируют многие порты. Однако зачастую открыт порт 80 для трафика HTTP и порт 443 для трафика HTTPS. Ограничения портов у конечных пользователей применяются реже, однако может использоваться брандмауэр, разрешающий только исходящие подключения. В некоторых брандмауэрах предусмотрена возможность избирательного открытия подключений для отдельных приложений на конечной точке.
Выбор транспортов и шаблонов обмена сообщениями с учетом возможности адресации и ограничения портов в сети.
В типичной топологии клиент-серверных приложений клиенты расположены за средством 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-транспорт и любой недуплексный шаблон обмена сообщениями. |
Не поддерживается |