Trabalhando com NATs e firewalls

O cliente e o servidor de uma conexão de rede não costumam ter um caminho direto e aberto para comunicação. Os pacotes são filtrados, roteados, analisados e transformados nos computadores de ponto de extremidade e por computadores intermediários na rede. NATs (conversões de endereço de rede) e firewalls são exemplos comuns de aplicativos intermediários que podem participar da comunicação de rede.

Os transportes do WCF (Windows Communication Foundation) e os MEPs (padrões de troca de mensagens) reagem de forma diferente à presença de NATs e firewalls. Este tópico descreve como os NATs e firewalls funcionam em topologias de rede comuns. Fornecemos recomendações para combinações específicas de transportes de WCF e MEPs para ajudar a tornar seus aplicativos mais robustos para NATs e firewalls na rede.

Como NATs afetam a comunicação

NAT foi criada para permitir que vários computadores compartilhem um único endereço IP externo. Uma NAT de remapeamento de porta mapeia um endereço IP interno e uma porta para uma conexão com um endereço IP externo com um novo número de porta. O novo número de porta permite que o NAT correlacione o tráfego de retorno com a comunicação original. Agora, muitos usuários domésticos têm um endereço IP que só é roteável de forma privada e dependem de uma NAT para fornecer roteamento global de pacotes.

Uma NAT não fornece um limite de segurança. No entanto, as configurações comuns de NAT impedem que os computadores internos sejam abordados diretamente. Isso protege os computadores internos de algumas conexões indesejadas e dificulta a gravação de aplicativos de servidor que devem enviar dados de forma assíncrona ao cliente. A NAT reescreve os endereços em pacotes para fazer parecer que as conexões estão se originando no computador NAT. Isso faz com que o servidor falhe quando tenta abrir uma conexão de volta para o cliente. Se o servidor usar o endereço percebido do cliente, falhará porque o endereço do cliente não pode ser roteado publicamente. Se o servidor usar o endereço NAT, ele não se conectará porque nenhum aplicativo está escutando nesse computador.

Algumas NATs dão suporte à configuração de regras de encaminhamento para permitir que computadores externos se conectem a um computador interno específico. As instruções para configurar regras de encaminhamento variam entre NATs diferentes, e a solicitar que os usuários finais alterem sua configuração de NAT não é recomendado para a maioria dos aplicativos. Muitos usuários finais não podem ou não querem alterar a configuração de NAT para um aplicativo específico.

Como os firewalls afetam a comunicação

Um firewall é um dispositivo de hardware ou software que aplica regras ao tráfego que passa para decidir se deseja permitir ou negar passagem. Você pode configurar firewalls para examinar fluxos de entrada e/ou saída de tráfego. O firewall fornece um limite de segurança para a rede na borda da rede ou no host do ponto de extremidade. Os usuários corporativos tradicionalmente mantiveram seus servidores atrás de um firewall para evitar ataques mal-intencionados. Desde a introdução do firewall pessoal no Windows XP, o número de usuários domésticos por trás de um firewall também aumentou muito. Assim, é provável que uma ou ambas as extremidades de uma conexão tenham um firewall examinando pacotes.

Os firewalls variam muito em termos de complexidade e capacidade de examinar pacotes. Firewalls simples aplicam regras com base nos endereços e portas de origem e de destino em pacotes. Firewalls inteligentes também podem examinar o conteúdo dos pacotes para tomar decisões. Esses firewalls vêm em muitas configurações diferentes e geralmente são usados para aplicativos especializados.

Uma configuração comum para um firewall de usuário doméstico é proibir conexões de entrada, a menos que uma conexão de saída tenha sido feita com esse computador anteriormente. Uma configuração comum para um firewall de usuário corporativo é proibir conexões de entrada em todas as portas, exceto um grupo especificamente identificado. Um exemplo é um firewall que proíbe conexões em todas as portas, exceto nas portas 80 e 443, para fornecer serviço HTTP e HTTPS. Há firewalls gerenciados para usuários domésticos e empresariais que permitem que um usuário ou processo confiável no computador altere a configuração do firewall. Firewalls gerenciados são mais comuns para usuários domésticos, em que não há política corporativa que controle o uso da rede.

Uso de Teredo

Teredo é uma tecnologia de transição IPv6 que permite a o endereçamento direto de computadores por trás de uma NAT. Teredo depende do uso de um servidor que pode ser roteado publicamente e globalmente para anunciar possíveis conexões. O servidor Teredo fornece ao cliente e ao servidor do aplicativo um ponto de reunião comum no qual podem trocar informações de conexão. Em seguida, os computadores solicitam um endereço Teredo temporário e os pacotes são encapsulados por meio da rede existente. O suporte ao Teredo no WCF exige a habilitação do suporte a IPv6 e Teredo no sistema operacional. Os sistemas operacionais Windows XP e posteriores dão suporte ao Teredo. O Windows Vista e sistemas operacionais posteriores dão suporte a IPv6 por padrão e exigem apenas que o usuário habilite o Teredo. O Windows XP SP2 e o Windows Server 2003 exigem que o usuário habilite o IPv6 e o Teredo. Para saber mais, confira Visão geral do Teredo.

Escolha de um padrão de troca de mensagens

A seleção de um transporte e um MEP é um processo de três etapas:

  1. Analise a capacidade de endereçamento dos computadores de ponto de extremidade. Os servidores empresariais geralmente têm a capacidade de endereçamento direta, enquanto os usuários finais geralmente têm sua capacidade de endereçamento bloqueada por NATs. Se os dois pontos de extremidade estiverem por trás de uma NAT, como em cenários ponto a ponto entre os usuários finais, talvez você precise de uma tecnologia como o Teredo para fornecer capacidade de endereçamento.

  2. Analise as restrições de protocolo e porta dos computadores de ponto de extremidade. Os servidores empresariais normalmente estão por trás de firewalls fortes que bloqueiam muitas portas. No entanto, a porta 80 é frequentemente aberta para permitir o tráfego HTTP e a porta 443 está aberta para permitir o tráfego HTTPS. Os usuários finais são menos propensos a ter restrições de porta, mas podem estar por trás de um firewall que permite apenas conexões de saída. Alguns firewalls permitem que o gerenciamento por aplicativos no ponto de extremidade abra seletivamente conexões.

  3. Compute os transportes e os MEPs que a capacidade de endereçamento e as restrições de porta da rede permitem.

Uma topologia comum para aplicativos cliente-servidor é ter clientes que estão por trás de uma NAT sem Teredo com um firewall somente de saída e um servidor que seja diretamente endereçável com um firewall forte. Nesse cenário, o transporte TCP com um MEP duplex e um transporte HTTP com um MEP de solicitação-resposta funcionam bem. Uma topologia comum para aplicativos ponto a ponto é ter pontos de extremidade atrás de NATs e firewalls. Nesse cenário, e em cenários em que a topologia de rede é desconhecida, considere as seguintes recomendações:

  • Não use transportes duplos. Um transporte duplo abre mais conexões, o que reduz a chance de conexão bem-sucedida.

  • Suporte ao estabelecimento de canais de retorno pela conexão de origem. O uso de canais de retorno, como no TCP duplex, abre menos conexões, o que aumenta a chance de se conectar com êxito.

  • Empregue um serviço acessível para registrar pontos de extremidade ou retransmitir o tráfego. O uso de um serviço de conexão globalmente acessível, como um servidor Teredo, aumenta consideravelmente a chance de se conectar com êxito quando a topologia de rede é restritiva ou desconhecida.

As tabelas a seguir examinam os MEPs unidirecionais, de solicitação e duplex, e o TCP padrão, o TCP com Teredo e os transportes HTTP padrão e duplo no WCF.

Capacidade de endereçamento Servidor direto Servidor Direto com passagem por NAT NAT do servidor NAT do servidor com passagem por NAT
Cliente direto Qualquer transporte e MEP Qualquer transporte e MEP Não há suporte. Não há suporte.
Cliente direto com passagem por NAT Qualquer transporte e MEP. Qualquer transporte e MEP. Não há suporte. TCP com Teredo e qualquer MEP. O Windows Vista tem uma opção de configuração em todo o computador para dar suporte a HTTP com o Teredo.
NAT do cliente Qualquer transporte não duplo e MEP. MEP duplex requer transporte TCP. Qualquer transporte não duplo e MEP. MEP duplex requer transporte TCP. Não há suporte. Não há suporte.
NAT do cliente com passagem por NAT Qualquer transporte não duplo e MEP. MEP duplex requer transporte TCP. Todos exceto HTTP duplo e qualquer MEP. MEP duplex requer transporte TCP. O transporte TCP duplo requer Teredo. O Windows Vista tem uma opção de configuração em todo o computador para dar suporte a HTTP com o Teredo. Não há suporte. TCP com Teredo e qualquer MEP. O Windows Vista tem uma opção de configuração em todo o computador para dar suporte a HTTP com o Teredo.
Restrições de firewall Servidor aberto Servidor com firewall gerenciado Servidor com firewall somente HTTP Servidor com firewall somente de saída
Cliente aberto Qualquer transporte e MEP. Qualquer transporte e MEP. Qualquer transporte HTTP e MEP. Não há suporte.
Cliente com firewall gerenciado Qualquer transporte não duplo e MEP. MEP duplex requer transporte TCP. Qualquer transporte não duplo e MEP. MEP duplex requer transporte TCP. Qualquer transporte HTTP e MEP. Não há suporte.
Cliente com firewall somente HTTP Qualquer transporte HTTP e MEP. Qualquer transporte HTTP e MEP. Qualquer transporte HTTP e MEP. Não há suporte.
Cliente com firewall somente de saída Qualquer transporte não duplo e MEP. MEP duplex requer transporte TCP. Qualquer transporte não duplo e MEP. MEP duplex requer transporte TCP. Qualquer transporte HTTP e qualquer MEP não duplex. Não há suporte.