Como as conexões são diferenciadas dos roteadores NAT?

2

Background: Eu tenho um programa de servidor muito simples escrito em PHP. Está funcionando principalmente, mas somente enquanto não houver mais de um cliente por site.

Perguntas:

  1. Como um roteador NAT (roteador SOHO típico) sabe qual cliente interno enviará o tráfego de retorno?
  2. Quais métodos eu devo usar para diferenciar entre vários clientes por trás dos roteadores NAT?
por user1833028 06.03.2013 / 09:55

2 respostas

2

Os roteadores NAT reescreveriam a tupla orig-ip: orig-port dos pacotes UDP de saída para nat-ip: nat-port e manteriam uma tabela de relações entre < em> orig-ip: orig-port e nat-ip: nat-port para que os pacotes de resposta UDP cheguem com nat-ip: nat-port como o destino pode ser mapeado de volta para o destino orig-ip: orig-port . Para detalhes sobre como uma implementação NAT pode lidar com as coisas, dê uma olhada em como o rastreamento de conexão é implementado no Linux .

Se a sua implementação não permitir um número de porta de cliente em mudança, simplesmente não seria garantido que funcionasse por trás dos roteadores NAT. Ele pode estar funcionando para um cliente, já que muitas implementações tentariam usar o mesmo número de porta de origem que o pacote original, se disponível, então nat-port seria igual a orig-port para a conexão do primeiro cliente. Mas à medida que essa porta se torna indisponível, as tentativas subseqüentes levam inevitavelmente a uma condição em que nat-port é diferente de orig-port .

Assim, a "chave" básica que você precisaria para diferenciar entre clientes diferentes seria a porta UDP de origem do cliente. Seu aplicativo de bate-papo do servidor precisa gerar pacotes UDP indo para a mesma porta de destino que recebeu um pacote de cliente iniciando a conexão de bate-papo - criando praticamente a mesma situação que você tem com sessões TCP estabelecidas.

    
por 06.03.2013 / 10:26
2

O roteador da rede 192.168.1.x atribui a cada conexão de saída uma porta de origem única no lado da Internet. Quando o roteador obtém uma resposta, ele procura a porta para a qual o pacote foi enviado em sua tabela NAT e informa qual IP e porta colocar como o destino no lado da LAN.

Quando um pacote é enviado do lado da LAN para o lado da Internet, o roteador verifica sua tabela NAT. Se não houver entrada correspondente ao endereço IP de origem local, porta de origem local, endereço IP remoto e porta remota, será criada uma. Um novo endereço de porta de destino é atribuído. O pacote é enviado para a Internet com o IP de origem regravado para o IP da Internet do roteador e a porta de origem é reconfigurada para a porta de origem atribuída.

Quando um pacote é recebido no lado da Internet, o roteador verifica a porta de destino em sua tabela NAT. Se não houver nenhuma entrada correspondente àquele IP remoto e porta de destino, o pacote é descartado (a menos que algo que o roteador esteja fazendo o queira). Se estiver, o endereço IP de destino é alterado para o endereço IP local correto, a porta de destino é alterada para a porta de origem local original e o pacote é enviado para a LAN.

O "ID único" de que você fala é a combinação do endereço IP remoto com o qual a máquina local deseja se comunicar e a porta de origem local escolhida pelo roteador.

    
por 27.01.2014 / 21:00

Tags