Como acessar o Jetty Server de fora da LAN?

Como acessar o Jetty Server de fora da LAN?

Postei originalmente esta pergunta no stackoveflow, mas fui informado de que seria mais adequado para este site.

Estou tentando acessar um Jetty Server implantado em uma máquina de outra máquina fora da LAN, mas não está funcionando. Eu lieste tópicoe segui o conselho oferecido por@Joakim Erdfeltno entanto, não funcionou. Meu código está abaixo:

Server server = new Server();
    

    
// HTTP connector
ServerConnector serverConnector = new ServerConnector(server, 1, 1);
serverConnector.setHost("0.0.0.0"); <-
serverConnector.setPort(8080);
serverConnector.setIdleTimeout(30000);
    
    
 
 // Set the connector
 server.addConnector(serverConnector);

Tentei acessar o servidor de outro servidor remoto com o seguinte código:

String postUrl = "http://" + myIP + ":8080"; // myIP is set to the public IP address of Jetty Server

System.out.println("Post URL: " + postUrl);

RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(120 * 1000).build();



try (CloseableHttpClient httpClient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build();) {

HttpPost httpPostRequest = new HttpPost(postUrl);

...

No entanto, isso gera a seguinte exceção:

HttpPostConnectException: Connect to 123.4.56.78:8080.. failed: Connection refused: connect

O que está causando esse erro? Permiti o acesso ao Firewall quando solicitado, então não acho que seja um problema do Firewall. A porta 8080também não está sendo usada para nenhum outro processo. Tentei várias portas sem sucesso.

Obrigado

Responder1

Passarei algumas de minhas recomendações para uma resposta. Você está faltando conhecimento básico de rede, tente ler um pouco sobre isso (aquipor exemplo). Alguns princípios básicos:

  • IPs locais (redes 192.168.xx, 10.xxx, etc) não são acessíveis pela Internet, apenas o dispositivo que está diretamente conectado ao seu provedor de Internet (seu roteador doméstico) pode ser acessado diretamente pela Internet.
  • quando você está conectado ao seu roteador doméstico e navega na Internet, várias coisas acontecem: como o seu IP local está inacessível pela Internet, o seu roteador doméstico oculta o seu IP local e o substitui pelo seu IP público. Depois de fazer isso, o roteador anota a conexão para poder lidar com uma resposta. Quando uma resposta chega, o mesmo processo é revertido: se o roteador encontrar uma conexão correspondente dentro de sua tabela para o pacote recebido, o IP público será substituído pelo seu IP privado e a resposta será encaminhada para o dispositivo correto dentro da sua rede. Este processo é chamadoNAT(Tradução do Endereço da Rede)
  • NAT é uma proteção para seus dispositivos dentro da sua rede doméstica (seus dispositivos podem acessar a Internet, mas a Internet não consegue alcançá-los!) - mas também dificulta se você deseja que um dispositivo da sua rede doméstica seja acessível da internet. Isso ocorre porque seu roteador deve saber, para cada pacote de dados recebido, o que fazer com ele. E o padrão é: Se nenhum dispositivo dentro da sua rede doméstica abriu essa conexão, o pacote de dados recebido está sendo descartado!

Agora deve estar claro por que você tem vários IPs: o Google só consegue ver seu IP público. Para que seu servidor jetty possa ser acessado pela Internet, você precisaencaminhamento de porta. Basicamente, você estará criando uma regra dentro do seu roteador doméstico"encaminhe cada pacote TCP recebido na porta 8080 para o dispositivo interno XY". Você precisará verificar o manual do seu roteador para saber como fazer isso, a maioria dos roteadores possui uma interface web para configuração. Espero que isso esclareça sua confusão...

informação relacionada