Scrie un nume de gazdă într-un browser și schema decide portul de destinație: 80 pentru http, 443 pentru https. Nimic dintr-un răspuns DNS nu anulează asta, iar nicio regulă de redirecționare de pe mașina ta nu poate inventa un ascultător la marginea furnizorului. Când un furnizor VPN îți dă un port public înalt, cum ar fi 45000, un URL explicit funcționează, iar unul curat nu. Decalajul este la punctul de intrare, nu în interiorul aplicației.

Parcurge o dată calea de la browser la proces, iar cele trei opțiuni de publicare nu mai par misterioase.

Vezi unde merge de fapt cererea

Browserul rezolvă numele într-o adresă, apoi se conectează la acea adresă pe portul implicit al schemei, dacă URL-ul nu indică altul. Marginea furnizorului tău decide ce se întâmplă cu conexiunea care sosește. Dacă tabelul ei de redirecționare mapează doar 45000 la adresa ta internă, o conexiune la 80 nu are unde să meargă și este refuzată sau abandonată înainte ca mașina ta să fie implicată.

Acest refuz are loc la margine, de aceea jurnalele aplicației tale nu arată nimic. Absența jurnalelor este dovada locului unde s-a oprit pachetul, nu dovada că aplicația este stricată.

De ce o regulă locală nu poate repara marginea

O redirecționare sau o regulă DNAT pe gazda aplicației acționează asupra pachetelor care au sosit deja. Pachetele trimise la portul 80 la furnizor nu ajung niciodată, așa că regula nu este niciodată evaluată. Aceasta este ora cea mai des irosită din întreaga problemă.

Nici DNS nu poate transporta portul. specificația HTTP definește valorile implicite ale schemei, iar o înregistrare A sau AAAA returnează o adresă, în timp ce un CNAME returnează alt nume. Browserul concatenează în continuare portul schemei, așa că doar un port explicit în URL schimbă destinația.

Opțiunea unu: păstrează portul explicit

Adesea răspunsul corect este cel nespectaculos. Publică URL-ul complet cu portul, termină TLS pe o intrare care îl acceptă și asigură-te că fiecare link generat păstrează aceeași origine. Pentru un public mic și controlat acest lucru este complet și nu costă nimic dincolo de un număr de port vizibil.

Verifică redirecționările și domeniul cookie-urilor cât timp ești acolo, fiindcă un backend care își scrie propriul nume de gazdă într-un antet Location anulează aranjamentul.

Opțiunea doi: obține o intrare reală pe portul implicit

Unii furnizori și soluții de găzduire redirecționează 80 și 443 pe o adresă partajată sau dedicată ca serviciu documentat. Întreabă ce este inclus de fapt, în loc să presupui că o adresă publică de ieșire implică porturi de intrare arbitrare. O adresă de ieșire dedicată nu spune nimic despre redirecționarea de intrare.

Confirmă în scris proprietatea și disponibilitatea, inclusiv ce se întâmplă cu intrarea când tunelul se reconectează cu o altă adresă. O intrare care se mișcă odată cu tunelul produce întreruperi care arată ca defecțiuni DNS.

Opțiunea trei: pune un frontend în față

Un proxy invers pe o adresă accesibilă poate să asculte pe 443 și să termine TLS și poate deschide o conexiune separată către backend prin VPN. Vizitatorii văd numele și portul implicit ale frontendului, în timp ce frontendul vorbește cu portul înalt al backendului în numele tău. Aceasta funcționează pentru că schimbă arhitectura în loc să lupte cu punctul de intrare. Backendul nu mai are nevoie atunci de niciun port de intrare pe internetul public.

Se schimbă și ceea ce operezi. Frontendul deține TLS-ul public, politica de acces, jurnalele și disponibilitatea și trebuie să limiteze selecția backendului la serviciul dorit. Dacă saltul de la frontend la backend folosește HTTPS, păstrează validarea certificatului pe acel salt.

Păstrează o singură origine

Numele public de gazdă, schema și portul frontendului formează originea folosită de vizitatori, așa că configurează URL-ul extern al aplicației, redirecționările și cookie-urile pentru acea origine. Trimite gazda originală și schema redirecționată dacă aplicația construiește linkuri absolute. Un răspuns care îi trimite pe utilizatori la un nume privat sau la un port înalt anulează intrarea curată pe care tocmai ai construit-o.

Apoi decide având în minte publicul. Un URL scurt poate justifica un frontend administrat, și nu merită să transformi accidental un serviciu privat doar pentru VPN într-unul public.

Articole similare