Doći do web sučelja unutar VPN kontejnera: odaberite vlasnika porta
Aplikacija dijeli VPN imenski prostor, pa port pripada VPN kontejneru. Ispravno vežite osluškivač, objavite na vlasniku, držite put uskim.
S aplikacijom ništa nije u redu i s tunelom ništa nije u redu, a nadzorna ploča se ipak ne učitava. Kada usluga radi s network_mode: service:vpn, ona dijeli mrežni imenski prostor VPN kontejnera, što znači da njezin osluškivač i objavljeni portovi pripadaju tom imenskom prostoru, a ne usluzi. Iz toga slijede tri odluke: gdje se aplikacija veže, koji kontejner objavljuje port i koliko je uzak put upravljanja. Poredajte ih pogrešnim redom i svaka pojedina postavka izgleda ispravno, dok kombinacija ne može raditi.
Kome pripada imenski prostor porta
U dijeljenom imenskom prostoru dodavanje unosa ports: zavisnoj usluzi ne čini ništa korisno, a nekoliko mrežnih opcija za nju nije podržano po dizajnu. Umjesto toga objavite na kontejneru koji posjeduje imenski prostor. Taj kontejner je i onaj čija se adresa pojavljuje na hostu, pa se mapiranje čita kao jedan unos, a ne po jedan za svaku uslugu.
services:
vpn:
image: vpn-client-image
cap_add: [NET_ADMIN]
ports:
- "127.0.0.1:8080:8080"
app:
network_mode: "service:vpn"
Obratite pozornost na adresu lijevo od mapiranja. Vezivanje na 127.0.0.1 zadržava objavljeni port na loopbacku hosta, što je obično ono što upravljačko sučelje želi. Vezivanje na 0.0.0.0 izlaže ga na svakom sučelju hosta, i to je druga sigurnosna odluka, a ne pogodnost.
Neka aplikacija sluša gdje imenski prostor očekuje
Osluškivač vezan na 127.0.0.1 unutar imenskog prostora dostupan je samo iz njegove unutrašnjosti. Objavljeni portovi hosta dolaze izvana, pa se aplikacija mora vezati na širu adresu da bi mapiranje radilo. To je promjena u jednom retku u većini servera i upravo taj korak ljudi preskoče nakon kopiranja vodiča za očvršćivanje pisanog za postavljanje bez kontejnera.
docker compose exec app ss -lntp
docker port vpn
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/
Popis osluškivača unutar aplikacije govori istinu o adresi vezivanja, a docker port govori što je vlasnik stvarno objavio. Ako prvi pokazuje 127.0.0.1, a drugi pokazuje mapiranje na hostu, našli ste nesklad bez diranja VPN konfiguracije.
Odaberite kako put upravljanja ulazi
Postoje tri razumne postavke. Objavite na VPN kontejneru i dođite do njega s hosta ili iz lokalne mreže. Stavite obrnuti proxy ispred imenskog prostora i dajte proxyju jedini izloženi port. Ili držite nadzornu ploču dostupnom samo iz imenskog prostora kroz exec sesiju ili SSH tunel, što je najmanja izloženost i najmanja udobnost.
Koja odgovara zavisi od toga kome i odakle treba sučelje. Jednom administratoru na istom hostu dovoljno je vezivanje na loopback. Tim koji mu pristupa preko VPN-a treba promišljen put i imenovanog vlasnika. Odabir proxy opcije donosi TLS i zapisnike pristupa, uz cijenu još jedne komponente koju treba održavati.
Otvorite upravljački port bez otvaranja svega
Vlastita politika lokalnog pristupa ili zaključavanja VPN klijenta može odbaciti dolazni upravljački zahtjev i dok odlazni tunel radi besprijekorno. Dopustite jednu dokumentiranu iznimku za predviđeni izvor i port, pa potvrdite da uobičajena zaštita tunela nije promijenjena. Isključivanje sigurnosne sklopke da bi se nadzorna ploča učitala mijenja stvarnu kontrolu za jednu karticu preglednika.
Ostavite vlastitu autentifikaciju aplikacije uključenom. Biti unutar VPN-om povezanog stacka ne daje ovlaštenje svakom lokalnom korisniku ni svakom uređaju koji može doći do hosta, a administrativna ploča bez autentifikacije iza tunela ostaje administrativna ploča bez autentifikacije.
Provjerite s upravljačkog uređaja, pa provjerite ponovno kasnije
Testirajte sa stroja koji će stvarno upravljati uslugom, ne s hosta, a zatim odvojeno provjerite internetski put koji aplikacija zahtijeva. Uspjeh u upravljanju dokazuje jedan smjer i ništa ne govori o izlaznom prometu.
Ponovno testirajte nakon što se stack ponovno stvori. Zamijenjeni mrežni vlasnik mijenja imenski prostor na koji se aplikacija pričvršćuje, a URL koji je radio prije ažuriranja može nakon njega ne pokazivati nikamo. Zapišite objavljeno mapiranje i adresu vezivanja kako bi sljedeća ponovna izgradnja bila dvominutna provjera umjesto ponovne istrage.