Рейтинг:0

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

флаг es

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

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

Сервер сервер = новый сервер();
    

    
// HTTP-коннектор
ServerConnector serverConnector = новый ServerConnector(сервер, 1, 1);
serverConnector.setHost("0.0.0.0"); <-
serverConnector.setPort(8080);
serverConnector.setIdleTimeout(30000);
    
    
 
 // Устанавливаем коннектор
 server.addConnector(serverConnector);

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

Строка postUrl = "http://" + myIP + ":8080"; // myIP устанавливается на общедоступный IP-адрес Jetty Server

System.out.println("URL публикации: " + postUrl);

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



попробуйте (CloseableHttpClient httpClient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build();) {

HttpPost httpPostRequest = новый HttpPost(postUrl);

...

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

HttpPostConnectException: подключение к 123.4.56.78:8080.. не удалось: подключение отклонено: подключение

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

Спасибо

Martin avatar
флаг kz
пожалуйста, расскажите нам что-нибудь о сетевой инфраструктуре вашего сервера.Ваш сервер причала непосредственно владеет общедоступным IP-адресом, который вы используете, или между ними есть маршрутизатор? Ошибка «отказ в соединении» в большинстве случаев означает, что на этом конкретном порту, к которому вы обращаетесь (в данном случае 8080), нет прослушивающей службы.
Bradford Griggs avatar
флаг es
@Martin «Серверы» - это всего лишь две машины с Windows, работающие в моей домашней сети. Прямо сейчас они оба используют одно и то же подключение к Интернету (подключение к одному и тому же маршрутизатору), но как только я смогу подключиться локально, я планирую подключиться к локальной машине с удаленного сервера. Однако я даже не могу подключиться, когда обе машины находятся за одним и тем же IP-адресом (используя одно и то же интернет-соединение/маршрутизатор). Я не уверен, что понимаю, что вы имеете в виду под «Является ли ваш сервер причала непосредственно владельцем общедоступного IP-адреса, который вы используете». Я полагаю, что это так, поскольку я просто подключаюсь к Интернету, используя свой домашний WiFi.
Martin avatar
флаг kz
Что я имел в виду под «во владении»: если бы я попытался открыть соединение с вашим общедоступным IP-адресом, я бы остановился на вашем домашнем маршрутизаторе. Если вы хотите, чтобы это соединение заканчивалось на вашем сервере причала, вам нужно будет установить переадресацию портов с вашего домашнего маршрутизатора на ваш компьютер с Windows в вашей частной сети. Но я бы посоветовал вам сначала попробовать подключиться локально - вы используете правильный IP-адрес? узнайте IP-адрес вашего компьютера с Windows, на котором запущен сервер (например, ```ipconfig /all```), и убедитесь, что вы подключаетесь, используя правильный IP-адрес.
Bradford Griggs avatar
флаг es
@Мартин Вау! Вы великолепны! Я `ipconfig /all` и получил IP-адрес из: `IPv4 Address. . . . . . . . . . . : 188.XXX.XX.XXX(предпочтительно)` и это сработало! До сих пор я подключался, используя **общедоступный IP-адрес**, который я получил от Google после поиска в Google _Какой у меня IP-адрес_. Я предполагаю, что это неправильный IP для использования? Теперь, когда я хочу подключиться с удаленного сервера к моей локальной машине (а не с двух машин, работающих в одной сети), должен ли я использовать IP-адрес, отображаемый в Power Shell, или тот, который отображается в Google? Вообще, почему отображаются два разных IP? Большое спасибо!
Рейтинг:0
флаг kz

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

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

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

Bradford Griggs avatar
флаг es
Спасибо за ответ. Я собираюсь попробовать перенаправить порт и принять ответ чуть позже. Просто любопытно, открытие порта для Jetty Server подвергает меня каким-либо рискам безопасности? Это означает, что злоумышленник может скомпрометировать мою сеть с открытым портом или, поскольку она открыта только для сервера Jetty, максимум он получит доступ к функциям сервера, но не более того? Спасибо.
Martin avatar
флаг kz
открытие сетевого порта в Интернет *всегда* является угрозой безопасности. В каждом программном обеспечении есть ошибки, и если они есть на вашем пристань-сервере, злоумышленник может вырваться из программы, захватив вашу машину с Windows. Вы можете рассмотреть возможность открытия порта для Интернета только при необходимости и использовать для этой цели нестандартный порт... это не сделает ваш сервер более безопасным, но с меньшей вероятностью его обнаружат.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.