Puncte:0

Cum să accesezi Jetty Server din afara rețelei LAN?

drapel es

Am postat inițial această întrebare pe stackoveflow, dar am fost informat că ar fi mai potrivită pentru acest site.

Încerc să accesez un server Jetty implementat pe o mașină de pe o altă mașină în afara rețelei LAN, dar nu funcționează. am citit acest fir și a urmat sfatul oferit de @Joakim Erdfelt totusi nu a functionat. Codul meu este mai jos:

Server server = server nou();
    

    
// Conector HTTP
ServerConnector serverConnector = nou ServerConnector(server, 1, 1);
serverConnector.setHost("0.0.0.0"); <-
serverConnector.setPort(8080);
serverConnector.setIdleTimeout(30000);
    
    
 
 // Setați conectorul
 server.addConnector(serverConnector);

Am încercat să accesez serverul de pe un alt server la distanță cu următorul cod:

String postUrl = "http://" + myIP + ":8080"; // myIP este setat la adresa IP publică a Jetty Server

System.out.println("Adresa URL a postării: " + postUrl);

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



încercați (CloseableHttpClient httpClient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build();) {

HttpPost httpPostRequest = HttpPost nou (postUrl);

...

Cu toate acestea, aceasta aruncă următoarea excepție:

HttpPostConnectException: Conectare la 123.4.56.78:8080.. eșuat: Conexiune refuzată: conectare

Ce cauzează această eroare? Am permis accesul Firewall-ului atunci când mi s-a cerut, așa că nu cred că este o problemă de Firewall. Portul 8080 De asemenea, nu este utilizat pentru niciun alt proces. Am încercat mai multe porturi fără rezultat.

Mulțumiri

Martin avatar
drapel kz
vă rugăm să ne spuneți ceva despre infrastructura dvs. de rețea de server.Serverul debarcaderului dvs. este direct în posesia IP-ului public pe care îl utilizați sau există un router între ele? Eroarea „conexiune refuzată” înseamnă, în majoritatea cazurilor, că nu există niciun serviciu care ascultă pe acel port specific pe care îl adresezi (8080 în acest caz).
Bradford Griggs avatar
drapel es
@Martin „Serverele” sunt doar două mașini Windows care rulează în rețeaua mea de acasă. În acest moment, amândoi folosesc aceeași conexiune la internet (se conectează la același router), dar odată ce mă pot conecta local, plănuiesc să mă conectez la o mașină locală de la un server la distanță. Cu toate acestea, nici măcar nu mă pot conecta când ambele mașini se află în spatele aceleiași adrese IP (folosind aceeași conexiune la internet/router). Nu sunt sigur că înțeleg ce vrei să spui prin „Serverul tău de la debarcader deține direct IP-ul public pe care îl folosești” Cred că este, deoarece pur și simplu mă conectez la internet folosind WiFi-ul meu de acasă.
Martin avatar
drapel kz
Ce am vrut să spun cu „în posesiune”: dacă aș încerca să deschid o conexiune la IP-ul tău public, aș termina la routerul tău de acasă. Dacă doriți ca acea conexiune să se termine la serverul debarcaderului, va trebui să instalați o redirecționare a portului de la routerul de acasă la mașina Windows din rețeaua privată. Dar v-aș sugera să încercați mai întâi să vă conectați local - utilizați IP-ul corect? aflați IP-ul mașinii dvs. Windows care rulează serverul (```ipconfig /all``` de exemplu) și verificați dacă vă conectați folosind ip-ul corect.
Bradford Griggs avatar
drapel es
@Martin Wow! Ești un geniu! Am `ipconfig /all` și am luat adresa IP de la: `Adresa IPv4. . . . . . . . . . . : 188.XXX.XX.XXX(De preferat)` și a funcționat! Până acum, mă conectam folosind **IP-ul public** pe care l-am obținut de la Google după ce am căutat pe Google _Care este adresa mea IP_. Bănuiesc că acesta este IP greșit de folosit? Acum că vreau să mă conectez de la un server la distanță la mașina mea locală (în loc de la două mașini care rulează pe aceeași rețea) ar trebui să folosesc IP-ul afișat în Power Shell sau cel afișat pe Google? În general, de ce sunt afișate două IP-uri diferite? Multumesc mult!
Puncte:0
drapel kz

Voi muta unele dintre recomandările mele la un răspuns. Vă lipsesc cunoștințele de bază despre rețele, vă rugăm să încercați să citiți puțin despre ele (Aici de exemplu). Câteva elemente de bază:

  • IP-urile locale (rețele 192.168.x.x, 10.x.x.x etc.) nu sunt accesibile de pe internet, doar dispozitivul care este conectat direct la furnizorul dvs. de internet (routerul dvs. de acasă) este accesibil direct de pe internet.
  • când sunteți conectat la routerul dvs. de acasă și navigați pe internet, se întâmplă mai multe lucruri: deoarece IP-ul dvs. local este inaccesibil de pe internet, routerul dvs. de acasă ascunde IP-ul local și îl înlocuiește cu IP-ul dvs. public. După ce face acest lucru, routerul ia notă de conexiune pentru a putea gestiona un răspuns. Când sosește un răspuns, același proces este invers: dacă routerul găsește o conexiune potrivită în tabelul său pentru pachetul de intrare, IP-ul public este înlocuit cu IP-ul tău privat, iar răspunsul este redirecționat către dispozitivul corect din rețea. Acest proces se numește NAT (traducerea adresei de rețea)
  • NAT este o protecție pentru dispozitivele dvs. din interiorul rețelei dvs. de domiciliu (dispozitivele dvs. pot ajunge la internet, dar internetul nu poate ajunge la dispozitivele dvs.!) - dar, de asemenea, îngreunează dacă doriți ca un dispozitiv din rețeaua dvs. de domiciliu să fie accesibil de pe internet. Acest lucru se datorează faptului că routerul dvs. trebuie să știe pentru fiecare pachet de date primit ce să facă cu el. Și implicit este: dacă niciun dispozitiv din rețeaua dvs. de domiciliu nu a deschis acea conexiune, pachetul de date primit este eliminat!

Acum ar trebui să fie clar de ce aveți mai multe IP-uri: Google vă poate vedea doar IP-ul public. Pentru ca serverul debarcaderului dvs. să fie accesibil de pe internet, aveți nevoie port forwarding. Practic, veți crea o regulă în interiorul routerului dvs. de acasă "redirecționați fiecare pachet TCP pe care îl primiți pe portul 8080 către dispozitivul intern XY". Va trebui să verificați manualul routerului pentru a afla cum să faceți acest lucru, majoritatea routerelor au o interfață web pentru configurare. Sper că asta îți va clarifica confuzia...

Bradford Griggs avatar
drapel es
Multumesc pentru raspuns. Voi încerca să redirecționez portul și voi accepta răspunsul puțin mai târziu. Sunt doar curios, deschiderea unui port pentru Jetty Server mă ​​expune la vreun risc de securitate? Adică, este posibil ca un atacator să-mi compromită rețeaua cu portul deschis sau, deoarece este deschis doar pentru un Jetty Server cel mult, va avea acces la funcționalitatea serverului, dar nimic mai mult? Mulțumiri.
Martin avatar
drapel kz
deschiderea unui port de rețea la internet este *întotdeauna* un risc de securitate. Fiecare software are erori, iar dacă serverul debarcader are unele, atacatorul ar putea să iasă din software, preluând mașina dvs. Windows. S-ar putea să vă gândiți să deschideți portul la internet numai atunci când este necesar și să luați un port non-standard în acest scop... acest lucru nu face serverul dvs. mai sigur, dar mai puțin probabil să fie descoperit.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.