Работа со средствами 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.
Выбор транспорта и шаблона обмена сообщениями
Выбор транспорта и шаблона обмена сообщениями осуществляется в три этапа.
Анализ возможности адресации компьютеров конечной точки. В большинстве случаев для корпоративных серверов доступна прямая адресация, а возможность адресации конечных пользователей блокируется средствами 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-транспорт и любой недуплексный шаблон обмена сообщениями. | Не поддерживается. |