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

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

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

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

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также не используется для других процессов. Я пробовал несколько портов, но безрезультатно.

Спасибо

решение1

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

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

Теперь должно быть понятно, почему у вас несколько IP: Google видит только ваш публичный IP. Для того, чтобы ваш сервер jetty был доступен из интернета, вам нужноПеренаправление порта. По сути, вы создадите правило внутри вашего домашнего маршрутизатора.пересылать каждый TCP-пакет, полученный через порт 8080, на внутреннее устройство XY". Вам нужно будет проверить руководство по вашему маршрутизатору, чтобы узнать, как это сделать, большинство маршрутизаторов имеют веб-интерфейс для настройки. Надеюсь, это прояснит ваше недоумение...

Связанный контент