Как получить доступ к серверу Jetty из-за пределов локальной сети?

Я изначально разместил этот вопрос в stackoveflow, но мне посоветовали, что он больше подходит для этого сайта.

Я пытаюсь получить доступ к серверу Jetty, развернутому на одном компьютере, с другого компьютера вне локальной сети, но он не работает. Я прочитал эту ветку и последовал совету, предложенному @Joakim Erdfelt , однако это не сработало. Мой код ниже:

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);

Я попытался получить доступ к серверу с другого удаленного сервера с помощью следующего кода:

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);

...

Однако это вызывает следующее исключение:

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

Что вызывает эту ошибку? Я разрешил доступ к брандмауэру при появлении запроса, поэтому не думаю, что это проблема брандмауэра. Порт 8080 также не используется ни для каких других процессов. Я пробовал несколько портов, но безрезультатно.

Спасибо

0
задан 1 September 2021 в 15:39
1 ответ

Я перенесу некоторые из моих рекомендаций в ответ. Вам не хватает базовых знаний о сетях, попробуйте немного почитать об этом (например, здесь). Некоторые основы:

  • локальные IP-адреса (сети 192.168.x.x, 10.x.x.x и т. д.) недоступны из Интернета, только устройство, которое напрямую подключено к вашему интернет-провайдеру (ваш домашний маршрутизатор), напрямую доступно из Интернета.
  • Когда вы подключены к домашнему маршрутизатору и просматриваете Интернет, происходит несколько вещей: поскольку ваш локальный IP-адрес недоступен из Интернета, ваш домашний маршрутизатор скрывает ваш локальный IP-адрес и заменяет его общедоступным IP-адресом. После этого маршрутизатор принимает к сведению соединение, чтобы иметь возможность обработать ответ. Когда приходит ответ, происходит обратный процесс: если маршрутизатор находит в своей таблице соответствующее соединение для входящего пакета, общедоступный IP-адрес заменяется вашим частным IP-адресом, а ответ перенаправляется на нужное устройство в вашей сети. Этот процесс называется NAT (преобразование сетевых адресов)
  • NAT — это защита ваших устройств в вашей домашней сети (ваши устройства могут подключаться к Интернету, но Интернет не может чтобы получить доступ к вашим устройствам!) - но это также усложняет задачу, если вы хотите, чтобы устройство из вашей домашней сети было доступно из Интернета. Это связано с тем, что ваш маршрутизатор должен знать, что с каждым входящим пакетом данных делать.И значение по умолчанию: Если ни одно устройство в вашей домашней сети не открыло это соединение, входящий пакет данных отбрасывается!

Теперь должно быть понятно, почему у вас несколько IP-адресов: Google видит только ваш общедоступный IP-адрес. Чтобы ваш сервер причала был доступен из Интернета, вам необходимо переадресация портов. По сути, вы создадите правило внутри своего домашнего маршрутизатора « пересылать каждый TCP-пакет, который вы получаете через порт 8080, на внутреннее устройство XY». Вам нужно будет проверить руководство вашего маршрутизатора, чтобы узнать, как это сделать, большинство маршрутизаторов имеют веб-интерфейс для настройки. Я надеюсь, что это прояснит ваше замешательство...

0
ответ дан 1 September 2021 в 18:25

Теги

Похожие вопросы