Pasiekti žiniatinklio sąsają VPN konteineryje: pasirinkite prievado savininką
Programa bendrina VPN pavadinimų erdvę, todėl prievadas priklauso VPN konteineriui. Tinkamai susiekite klausytoją, skelbkite savininko pusėje ir palikite kelią siaurą.
Su programa viskas gerai ir su tuneliu viskas gerai, bet prietaisų skydelis vis tiek neįkeliamas. Kai paslauga veikia su network_mode: service:vpn, ji bendrina VPN konteinerio tinklo pavadinimų erdvę, o tai reiškia, kad jos klausytojas ir paskelbti prievadai priklauso tai erdvei, o ne paslaugai. Iš to kyla trys sprendimai: kur programa susisieja, kuris konteineris skelbia prievadą ir koks siauras yra valdymo kelias. Sudėliokite juos netinkama tvarka ir kiekvienas atskiras nustatymas atrodys teisingas, nors derinys negalės veikti.
Kam priklauso prievado pavadinimų erdvė
Bendroje pavadinimų erdvėje ports: įrašo pridėjimas priklausomai paslaugai nieko naudingo neduoda, o kelios tinklo parinktys jai pagal projektą nepalaikomos. Skelbkite vietoj to konteineryje, kuriam priklauso pavadinimų erdvė. Tas konteineris taip pat yra tas, kurio adresas matomas pagrindiniame kompiuteryje, todėl susiejimas skaitomas kaip vienas įrašas, o ne po vieną kiekvienai paslaugai.
services:
vpn:
image: vpn-client-image
cap_add: [NET_ADMIN]
ports:
- "127.0.0.1:8080:8080"
app:
network_mode: "service:vpn"
Atkreipkite dėmesį į adresą kairėje susiejimo pusėje. Susiejimas su 127.0.0.1 palieka paskelbtą prievadą pagrindinio kompiuterio loopback sąsajoje, ko paprastai nori valdymo sąsaja. Susiejimas su 0.0.0.0 atskleidžia jį visose pagrindinio kompiuterio sąsajose, ir tai yra kitas saugumo sprendimas, o ne patogumas.
Leiskite programai klausytis ten, kur pavadinimų erdvė to tikisi
Klausytojas, susietas su 127.0.0.1 pavadinimų erdvės viduje, pasiekiamas tik iš tos erdvės vidaus. Paskelbti pagrindinio kompiuterio prievadai ateina iš išorės, todėl programa turi susieti platesnį adresą, kad susiejimas veiktų. Daugumoje serverių tai vienos eilutės pakeitimas, ir būtent šį žingsnį žmonės praleidžia nukopijavę sukietinimo vadovą, parašytą diegimui be konteinerių.
docker compose exec app ss -lntp
docker port vpn
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/
Klausytojų sąrašas programos viduje pasako tiesą apie susiejimo adresą, o docker port parodo, ką savininkas iš tikrųjų paskelbė. Jei pirmasis rodo 127.0.0.1, o antrasis rodo susiejimą pagrindiniame kompiuteryje, radote neatitikimą nelietę VPN konfigūracijos.
Pasirinkite, kaip patenka valdymo kelias
Yra trys pagrįsti išdėstymai. Skelbkite VPN konteineryje ir pasiekite jį iš pagrindinio kompiuterio arba vietinio tinklo. Pastatykite atvirkštinį tarpinį serverį prieš pavadinimų erdvę ir duokite jam vienintelį atvirą prievadą. Arba palikite prietaisų skydelį pasiekiamą tik iš pavadinimų erdvės vidaus per exec sesiją arba SSH tunelį, o tai yra mažiausias atskleidimas ir mažiausias patogumas.
Kuris tinka, priklauso nuo to, kam ir iš kur reikia sąsajos. Vienam administratoriui tame pačiame pagrindiniame kompiuteryje pakanka loopback susiejimo. Komandai, kuri pasiekia jį per VPN, reikia apgalvoto kelio ir pavadinto savininko. Pasirinkus tarpinio serverio variantą gaunate TLS ir prieigos žurnalus, bet už tai reikia dar vieno komponento, kurį reikia atnaujinti.
Atidarykite valdymo prievadą neatidarydami visko
VPN kliento vietinės prieigos arba užrakinimo politika gali atmesti gaunamą valdymo užklausą net tada, kai išeinantis tunelis veikia nepriekaištingai. Leiskite vieną dokumentuotą išimtį numatytam šaltiniui ir prievadui, tada patvirtinkite, kad įprasta tunelio apsauga nepakitusi. Avarinio jungiklio išjungimas tam, kad įsikeltų prietaisų skydelis, iškeičia tikrą kontrolę į naršyklės kortelę.
Palikite pačios programos autentifikavimą įjungtą. Buvimas su VPN sujungtoje krūvoje nesuteikia teisės kiekvienam vietiniam naudotojui ar kiekvienam įrenginiui, kuris gali pasiekti pagrindinį kompiuterį, o administratoriaus skydelis be autentifikavimo už tunelio vis tiek lieka skydelis be autentifikavimo.
Patikrinkite iš valdymo įrenginio, o vėliau patikrinkite dar kartą
Išbandykite iš mašinos, kuri iš tikrųjų valdys paslaugą, o ne iš pagrindinio kompiuterio, ir tada atskirai patikrinkite programai reikalingą interneto kelią. Valdymo sėkmė įrodo vieną kryptį ir nieko nesako apie išėjimą.
Išbandykite dar kartą po to, kai krūva sukuriama iš naujo. Pakeistas tinklo savininkas pakeičia pavadinimų erdvę, prie kurios jungiasi programa, o URL, kuris veikė prieš atnaujinimą, po jo gali nieko nerodyti. Užsirašykite paskelbtą susiejimą ir susiejimo adresą, kad kitas perdarymas būtų dviejų minučių patikra, o ne pakartotas tyrimas.