Existe uma maneira de unir duas conexões TCP de saída para contornar firewalls e NAT?

1

Estamos todos familiarizados com o problema de encaminhamento de porta e NAT: se você quiser expor algo a aceitar uma conexão de entrada, você precisa configurar o encaminhamento de porta no roteador ou conjurar alguma outra mágica preta para "dar um soco". buracos "no firewall usando UDP ou algo assim. Eu sou relativamente novo em todo o conceito de "perfuração" para alguém explicar como funciona?

Essencialmente, eu gostaria de entender como o furo funcionaria e a teoria por trás dele, assim como se duas conexões TCP pudessem ser conectadas através de terceiros. Como não há nenhum problema com as conexões TCP de saída, uma vez que ele é tratado com NAT, um terceiro poderia fazer a ponte entre as conexões para que as duas partes ainda estivessem conectadas, mas sem o custo de largura de banda do tráfego de terceiros? / p>     

por Naftuli Kay 10.08.2011 / 22:05

1 resposta

2

Isso não é realmente uma coisa de stackoverflow, mas certamente pode ser feito e eu escrevi programas para fazer isso.

Essencialmente você tem um programa, vou descrever a solução de thread. Dois threads aceitam (mesma porta, portas diferentes, o que for). Quando ambos os segmentos têm uma conexão, eles entram em um modo onde eles lêem de seu soquete e escrevem no outro soquete. Quando um recebe EOF, o outro é shutdown () para que conexões semiabertas sejam suportadas.

Simples e fácil.

Karl faz uma boa observação que eu interpretei mal a pergunta. Ele não queria que o tráfego passasse por um terceiro. Bem, isso é um problema solucionável. Se você tiver conectividade UDP de saída sem o mapeamento de porta de origem, poderá solicitar que ambas as partes enviem um pacote UDP que permita a conectividade UDP de um lado para outro. Executar algo como openvpn sobre esse canal UDP e está tudo pronto.

Se você não tiver conectividade UDP, então, realisticamente, só poderá fazê-lo se puder observar o tráfego externo (postar NAT) e tiver acesso a um terceiro que possa forjar pacotes arbitrários. Esse terceiro pode forjar um SYN-ACK em ambas as direções e ambos os lados pensariam que o outro era o servidor. Isso não funciona se a porta de origem for alterada por ambos os sistemas NAT, pois a outra parte não pode determinar deterministicamente a porta de destino adequada a ser usada.

    
por 10.08.2011 / 22:17