Administratorska stranica odgovara s telefona na mobilnim podacima, a istekne s prijenosnika pridruženog VPN-u. Ništa na tunelu nije pokvareno, jer zahtjev nikada ne ulazi u njega. Ime hosta razrješava se na javnu adresu pristupnika, a ta je adresa dostupna samo izvan tunela koji on završava. Popravak znači dati usluzi privatni ulaz, umjesto premještati vanjsku krajnju točku.

Stranica se učitava izvana, a ne kroz tunel

Uspoređuju se dva različita zahtjeva. S mobilnih podataka preglednik izravno stiže do javne adrese. Iz unutrašnjosti tunela isto ime razrješava se na istu javnu adresu, a paket sada mora izaći kroz tunel da bi stigao do adrese na vlastitoj dalekoj strani tunela. Isto ime, ista adresa, dva sasvim različita položaja.

Ruta odredišta bira adresu, a ne port. Ništa u tablici usmjeravanja ne zna da je port 443 za administraciju, a port 1194 transport, pa se oba tretiraju kao isto odredište.

Zato stranica ponekad radi, a ponekad ne, ovisno o tome koje je ime i koju mrežu klijent rabio. To je problem putanje, a ne problem autentifikacije. Oba se klijenta sasvim dobro autentificiraju.

Neka vanjska krajnja točka ostane dostupna

Profili punog tunela trebaju izuzetnu rutu za VPN krajnju točku, a OpenVPN opcija redirect-gateway dokumentira upravo to: udaljena krajnja točka zadržava rutu kroz postojeći pristupnik da se tunel ne bi usmjeravao u sebe. Uklonite taj izuzetak i šifrirani transport slijedi tunel, što završava sesiju u petlji. Upravo zbog tog izuzetka adresa krajnje točke ostaje dostupna iz unutrašnjosti tunela.

Posljedica je da javna adresa ostaje dostupna s klijenta, zbog čega i zahtjev preglednika na tu adresu može slijediti isti izuzetak i izaći bez ulaska u tunel. Izuzetak radi svoj posao, a ime pravi štetu.

Pročitajte odluku rute, a ne popis sučelja, prije nego što bilo što promijenite. Naredbe ispod ispisuju odluku, a ne inventar. Pokrenite ih s klijenta koji nije uspio.

ip -4 route get 203.0.113.77
ip -4 rule show
ip -4 route show table all

Ako pretraga pokaže rutu krajnje točke kroz fizički pristupnik, ponašanje je ispravno i administratorska stranica se jednostavno šalje pogrešnim putem. To je točka u kojoj razrješavanje imena postaje popravak.

Dajte usluzi privatno ime

Usluzi treba ime koje se razrješava na adresu pristupnika unutar tunela, uz zadržavanje semantike certifikata i imena hosta koju aplikacija očekuje. Privatni zapis zone za administratorsko ime uobičajen je odgovor, i on ostavlja transportno ime netaknutim.

Ne preusmjeravajte transportno ime na unutarnju adresu, jer bi sljedeće uspostavljanje tunela pokušalo stići do adrese koja postoji samo unutar tunela. Ta pogreška daje VPN koji radi točno jednom.

Provjerite i obje familije adresa, jer zaostali AAAA zapis može poslati preglednik negdje što privatni plan nikada nije pokrio.

dig +short admin.hq.internal
dig +short -t AAAA admin.hq.internal
curl -sS -o /dev/null -w '%{http_code} %{remote_ip}\n' https://admin.hq.internal/

Uskladite politiku s mjestom na kojem proces radi

Do nativnog procesa koji sluša na pristupniku stiže se putanjom lokalnog ulaza, pa ulazni lanac i vezivanje socketa odlučuju prihvaća li se zahtjev. Pravila prosljeđivanja i IP prosljeđivanje ne tjeraju lokalnog slušatelja da odgovori. Dopustite izvore tunela u ulaznoj politici i potvrdite da je proces vezan za adresu do koje tunel može stići.

Kontejner objavljen na portu hosta slijedi drugačiju putanju, jer se paket prevodi po odredištu i prosljeđuje. Taj zahtjev susreće politiku prosljeđivanja hosta i Dockerova vlastita pravila, zato radni nativni slušatelj može postojati uz kontejner koji odbija isti port.

Redoslijed pokretanja važan je u oba slučaja, jer vezivanje za adresu koja se pojavi tek nakon što se tunel digne tiho pada pri podizanju.

Provjerite privatni pristup i odbijenu javnu putanju

Uputite novi imenovani zahtjev s ovlaštenog klijenta uz netaknute vlastite provjere identiteta aplikacije. Zatim pokušajte istu uslugu izvan tunela i potvrdite da ne odgovara. Privatno je ime pogodnost, a ne ograničenje, a slušatelj koji je još vezan za javnu adresu još je izložen. Tu posljednju provjeru većina pregleda preskoči.

Čitajte vezivanja i stanje filtra, a ne ime hosta koje su korisnici dobili. Izloženost je svojstvo socketa, a ne imena. Ta razlika preživi svaku DNS promjenu.

ss -lntp | grep ':443'
nft list ruleset | grep -n 443
curl -sS -m 5 -o /dev/null -w '%{http_code}\n' https://203.0.113.77/

Kada unutarnji zahtjev vrati stranicu, a vanjski istekne, usluga ima jednu namjernu privatnu putanju i transport ostaje dostupan. Kada vanjski zahtjev još odgovara, slušatelj ili objavljeni unos kontejnera mora se suziti prije nego bilo tko opiše uslugu kao samo unutarnju.

Povezani članci