[Sockets\Rede] Como botar 2 pessoas em contato, com uma atrás de uma NAT?

Habilitei um servidor na porta 54321 com um ServerSocket na minha máquina que está numa LAN com o IP 10.1.1.2.

O omeuip.com diz que meu IP é 201.51.116.154, concluo que esse é o IP do modem do Velox que acessa e distribui a internet, que pra mim é o 10.1.1.1.

Como faço para uma pessoa fora da LAN acessar minha máquina?
É possivel fazer isso sem mecher nas configurações do roteador?

Deve ser uma pergunta idiota pra quem entende.
Mas sou novo na história…

Grato

É por isso que existe NAT.
Você tem de mexer no seu roteador para fazer com que todas as conexões na porta 54321 sejam redirecionadas para o seu endereço de NAT.
Como você faz isso deixo ao pessoal que sabe configurar tais roteadores. (Não é difícil mas você precisa tomar um pouco de cuidado; a configuração, é óbvio, depende:

  • Do modelo do roteador;
  • E se você tem a senha do roteador (se não tiver, um abraço).

Saquei. Já tive q habilitar a 80 direto no roteador uma vez fazendo uns testes…

Então não existe a menor possibilidade de fazer uma comunicação entre sockets com alguém atrás de uma NAT?

É claro que há. Você não usa algum software como o eMule, o BitTorrent ou o LimeWire?
Eles usam o protocolo UPNP para fazer essa configuração no roteador, se possível. Com esse protocolo, eles não precisam de senha, mas pode ser que seu roteador tenha o suporte a UPNP desabilitado ou bloqueado.
(Procure por “UPNP” ou “Universal Plug & Play” para mais detalhes).

Valeu!

Dei uma lida por ai e descobri o JINI.

“A tecnologia Jini foi criada para permitir que qualquer tipo de rede composta de serviços e dos clientes destes serviços seja facilmente montado, desmontado e mantido.”

http://www.dancres.org/cottage/service_build.html

…na verdade, depois de muitas testes o JINI consegue fazer RMI com o “NAT\Firewall transversal” … bem distante do q quero.

Alguém pode me dar alguma dica de como fazer um SocketServer e um SocketCliente se comunicarem sendo q existe a possibilidade de um do Server estar atrás de um NAT!?

Se somente um deles q esta atras de Nat, entao faça a maquina q esta como Nat liberado ser o servidor, pois somente eh necessário liberar a porta Nat na conexão servidora. As conexões clientes não há a necessidade tb de liberação. Do mesmo jeito q o msn, google talk, eles sao as conexões clientes e eles nao precisam liberar porta para fazer a conexão com o servidor da Microsoft ou Google. Somente lá nestes servidores q há esta porta liberada!!!

[]'s

Ok. Entendo…

Mas esse é o caso de um sistema centralizado onde todos os clientes se reportam a um servidor mór. Funciona perfeitamente, independente de NAT ou firewall no cliente.

Mas e no caso de um serviço decentralizado, como o gnutella? Um cara na Alemanha liga seu software e pega um conjunto de IPs de outros usuários (clientes\servidores) e se conecta num usuário atrás de uma NAT no Brasil totalmente transparente. Isso é fantástico!! Não consigo conceber um código pra tal funcionalidade?

Cada nó (usuário) é um cliente e servidor que pula a NAT sem problemas… Alguma idéia?

Eu falei do LimeWire, que acessa a rede Gnutella. Se não me engano eles disponibilizam o código-fonte, deve haver lá a implementação do UPNP.