UDP NAT Punching

1

Eu tenho os dois problemas a seguir. Por favor me ajude a resolvê-los:

  1. No NAT simétrico, como eu sei, o nó oculto local (atrás do NAT) deve iniciar a conexão para criar uma janela no NAT para permitir que os pacotes do host remoto retornem à rede local. Alguém pode me dar uma idéia de como eu posso fazer isso?

  2. Como um aplicativo pode aprender que existem NATs no caminho entre a origem e o destino?

por pradeepchhetri 21.11.2011 / 05:27

2 respostas

1

Eu posso te dar um lugar para começar (2): Ferramenta de monitoramento passivo p0f de Michal Zalewski . Parece apoiar algum modo de adivinhar que a origem de um TCP "SYN" está por trás de um NAT.

    
por 21.11.2011 / 22:38
1

Como o UDP é sem conexão, a implementação NAT não pode saber onde a comunicação UDP realmente termina, portanto, apenas cria uma entrada na tabela de conversão no primeiro pacote passado. Por exemplo, o host oculto com IP 10.0.0.2 envia um pacote para o host 2.2.2.2 via roteador NAT com o endereço 1.1.1.1, a porta de origem é 10000, o destino - 20000. Na chegada do pacote, o NAT cria uma entrada como esta:

10.0.0.2 10000 - 1.1.1.1 10000 - 2.2.2.2 20000

O número da porta no segundo campo pode ser diferente se já estiver sendo usado por outra entrada de tradução. Após essa entrada ser criada, todos os pacotes UDP de 2.2.2.2:20000 a 1.1.1.1:10000 serão redirecionados para 10.0.0.2:10000.

Na segunda pergunta: se houver um NAT entre a origem e o destino, os endereços remotos informados por getpeername(2) e relatados diretamente pelo terminal remoto (na carga útil do UDP) serão diferentes.

Existem mais informações e links sobre o NAT na perfuração .

    
por 22.11.2011 / 10:23