Trabalhando com NATs e Firewalls
O cliente e o servidor de uma conexão de rede freqüentemente não têm um caminho direto e aberto para comunicação. Os pacotes são filtrados, roteados, analisados e transformados tanto nas máquinas de ponto final quanto por máquinas intermediárias na rede. Traduções de endereços de rede (NATs) e firewalls são exemplos comuns de aplicativos intermediários que podem participar da comunicação de rede.
Os transportes do Windows Communication Foundation (WCF) e os padrões de troca de mensagens (MEPs) reagem de forma diferente à presença de NATs e firewalls. Este tópico descreve como NATs e firewalls funcionam em topologias de rede comuns. São dadas recomendações para combinações específicas de transportes WCF e MEPs que ajudam a tornar seus aplicativos mais robustos para NATs e firewalls na rede.
Como os NATs afetam a comunicação
O NAT foi criado para permitir que várias máquinas compartilhem um único endereço IP externo. Um 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. Muitos usuários domésticos agora têm um endereço IP que é apenas roteável de forma privada e dependem de um NAT para fornecer roteamento global de pacotes.
Um NAT não fornece um limite de segurança. No entanto, as configurações NAT comuns impedem que as máquinas internas sejam endereçadas diretamente. Isso protege as máquinas internas de algumas conexões indesejadas e dificulta a gravação de aplicativos de servidor que devem enviar dados de forma assíncrona de volta para o cliente. O NAT reescreve os endereços em pacotes para fazer parecer que as conexões são originadas na máquina NAT. Isso faz com que o servidor falhe quando tenta abrir uma conexão de volta ao cliente. Se o servidor usar o endereço percebido do cliente, ele falhará porque o endereço do cliente não pode ser roteado publicamente. Se o servidor usa o endereço NAT, ele não consegue se conectar porque nenhum aplicativo está escutando nessa máquina.
Alguns NATs suportam a configuração de regras de encaminhamento para permitir que máquinas externas se conectem a uma determinada máquina interna. As instruções para configurar regras de encaminhamento variam entre diferentes NATs, e pedir aos usuários finais que alterem sua configuração NAT não é recomendado para a maioria dos aplicativos. Muitos usuários finais não podem ou não querem alterar sua configuração NAT para um aplicativo específico.
Como os firewalls afetam a comunicação
Um firewall é um dispositivo de software ou hardware que aplica regras ao tráfego que passa para decidir se permite ou nega a passagem. Você pode configurar firewalls para examinar fluxos de tráfego de entrada e/ou saída. O firewall fornece um limite de segurança para a rede na borda da rede ou no host do ponto final. Os utilizadores empresariais mantêm tradicionalmente os seus servidores protegidos por uma firewall para evitar ataques maliciosos. 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. Isso torna 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 baseadas nos endereços e portas de origem e destino nos pacotes. Os 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 são frequentemente usados para aplicações especializadas.
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 essa máquina anteriormente. Uma configuração comum para um firewall de usuário corporativo é proibir conexões de entrada em todas as portas, exceto em 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ços HTTP e HTTPS. Existem firewalls gerenciados para usuários domésticos e empresariais que permitem que um usuário ou processo confiável na máquina altere a configuração do firewall. Os firewalls gerenciados são mais comuns para usuários domésticos onde não há uma política corporativa controlando o uso da rede.
Usando Teredo
Teredo é uma tecnologia de transição IPv6 que permite a endereçabilidade direta de máquinas por trás de um NAT. O Teredo depende do uso de um servidor que pode ser roteado pública e globalmente para anunciar possíveis conexões. O servidor Teredo fornece ao cliente do aplicativo e ao servidor um ponto de encontro comum no qual eles podem trocar informações de conexão. Em seguida, as máquinas solicitam um endereço Teredo temporário e os pacotes são encapsulados através da rede existente. O suporte a Teredo no WCF requer a habilitação do suporte a IPv6 e Teredo no sistema operacional. Windows XP e sistemas operacionais posteriores suportam Teredo. O Windows Vista e sistemas operacionais posteriores suportam 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 obter mais informações, consulte a Visão geral do Teredo.
Escolhendo um padrão de transporte e troca de mensagens
A seleção de um transportador e um eurodeputado é um processo em três etapas:
Analise a endereçabilidade das máquinas de ponto final. Os servidores corporativos geralmente têm endereçabilidade direta, enquanto os usuários finais geralmente têm sua endereçabilidade bloqueada por NATs. Se ambos os pontos de extremidade estiverem por trás de um NAT, como em cenários ponto a ponto entre usuários finais, talvez você precise de uma tecnologia como Teredo para fornecer endereçabilidade.
Analise as restrições de protocolo e porta das máquinas de ponto final. Os servidores corporativos normalmente estão protegidos por firewalls fortes que bloqueiam muitas portas. No entanto, a porta 80 está frequentemente aberta para permitir tráfego HTTP e a porta 443 está aberta para permitir tráfego HTTPS. Os usuários finais são menos propensos a ter restrições de porta, mas podem estar atrás de um firewall que permite apenas conexões de saída. Alguns firewalls permitem o gerenciamento por aplicativos no endpoint para abrir conexões seletivamente.
Calcule os transportes e MEPs que a endereçabilidade e as restrições portuárias da rede permitem.
Uma topologia comum para aplicativos cliente-servidor é ter clientes que estão atrás de um NAT sem Teredo com um firewall somente de saída e um servidor que é diretamente endereçável com um firewall forte. Nesse cenário, o transporte TCP com um MEP duplex e um transporte HTTP com um MEP solicitação-resposta funcionam bem. Uma topologia comum para aplicativos ponto a ponto é ter ambos os pontos de extremidade por trá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 utilize 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 através da conexão de origem. Usar canais traseiros, como no TCP duplex, abre menos conexões, o que aumenta a chance de conexão bem-sucedida.
Utilize um serviço acessível para registrar pontos de extremidade ou retransmitir tráfego. Usar um serviço de conexão globalmente acessível, como um servidor Teredo, aumenta muito a chance de conexão bem-sucedida quando a topologia de rede é restritiva ou desconhecida.
As tabelas a seguir examinam os MEPs unidirecionais, de solicitação-resposta e duplex e os transportes TCP padrão, TCP com Teredo e HTTP padrão e duplo no WCF.
Endereçabilidade | Servidor Direto | Server Direct com NAT transversal | NAT do servidor | NAT do servidor com NAT transversal |
---|---|---|---|---|
Direto ao cliente | Todos os transportes e eurodeputado | Todos os transportes e eurodeputado | Não suportado. | Não suportado. |
Cliente direto com NAT transversal | Qualquer transporte e eurodeputado. | Qualquer transporte e eurodeputado. | Não suportado. | TCP com Teredo e qualquer eurodeputado. O Windows Vista tem uma opção de configuração em toda a máquina para oferecer suporte a HTTP com Teredo. |
NAT do cliente | Qualquer transporte não dual e eurodeputado. O Duplex MEP requer transporte TCP. | Qualquer transporte não dual e eurodeputado. O Duplex MEP requer transporte TCP. | Não suportado. | Não suportado. |
NAT do cliente com NAT transversal | Qualquer transporte não dual e eurodeputado. O Duplex MEP requer transporte TCP. | Todos, exceto HTTP duplo e qualquer eurodeputado. O Duplex MEP requer transporte TCP. O transporte TCP duplo requer Teredo. O Windows Vista tem uma opção de configuração em toda a máquina para oferecer suporte a HTTP com Teredo. | Não suportado. | TCP com Teredo e qualquer eurodeputado. O Windows Vista tem uma opção de configuração em toda a máquina para oferecer suporte a HTTP com 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 eurodeputado. | Qualquer transporte e eurodeputado. | Qualquer transporte HTTP e MEP. | Não suportado. |
Cliente com firewall gerenciado | Qualquer transporte não dual e eurodeputado. O Duplex MEP requer transporte TCP. | Qualquer transporte não dual e eurodeputado. O Duplex MEP requer transporte TCP. | Qualquer transporte HTTP e MEP. | Não suportado. |
Cliente com firewall somente HTTP | Qualquer transporte HTTP e MEP. | Qualquer transporte HTTP e MEP. | Qualquer transporte HTTP e MEP. | Não suportado. |
Cliente com firewall somente de saída | Qualquer transporte não dual e eurodeputado. O Duplex MEP requer transporte TCP. | Qualquer transporte não dual e eurodeputado. O Duplex MEP requer transporte TCP. | Qualquer transporte HTTP e qualquer MEP não duplex. | Não suportado. |