Hvers vegna Docker-gámur kemst ekki að hýslum bak við VPN
Brúargámur hafa sitt eigið nafnrými, svo göng hýsilsins eru þeim ósýnileg. Berðu saman net hýsilsins, tun-tæki og macvlan áður en þú breytir DNS.
Gámur sem kemst ekkert bak við fyrirtækjavpn-ið býr venjulega í öðru netnafnrými en göngin. Slóðir, DNS-þjónar og eldveggsmerkingar biðlarans á hýsilnum tilheyra staflanum hans; brúargámur hefur sinn eigin. Þessi eina staðreynd útskýrir flestar tilkynningar sem berast vettvangsliði, og hún er líka ástæðan fyrir því að „vpn-ið er bilað“ og „Docker fer fram hjá vpn-inu“ geta verið bæði röng á sama tíma. Tvær mjög ólíkar uppsetningar leynast bak við eitt einkenni, svo greindu hvora þú hefur áður en þú breytir stillingu.
Finndu út hvers nafnrými á göngin
Á Docker Desktop fyrir macOS eða Windows keyra gámarnir inni í Linux sýndarvél. Vpn-biðlari sem er uppsettur á skjáborðinu býr til göng í stýrikerfi skjáborðsins, og sýndarvélin sér þau aldrei. Engin gámauppsetning lagar það, því viðmótið sem gámurinn þyrfti er alls ekki til í netnafnrými hans.
Á Linux-hýsil býr göngin í nafnrými hýsilsins, og brúargámur komast venjulega að þeim í gegnum leiðartöflu hýsilsins með upprunaneti (NAT) beitt við útgönguna. Þegar sú leið bregst er orsökin venjulega framsendingarstefna, síun bakleiðar eða skeiðkennt undirnet frekar en leið sem vantar. Staðfestu í hvorum heimsins þú ert áður en þú lest lengra:
docker info --format '{{.OperatingSystem}}'
docker run --rm --net=host alpine ip route | head -5
docker run --rm alpine ip route | head -5
Munurinn á þessum tveimur leiðartöflum er allt vandamálið á einum skjá. Ef sýn hýsilsins inniheldur göngviðmótið en sýn brúarinnar ekki, ertu að horfa á einangrun nafnrýma, og allt annað er val um hvernig eigi að komast yfir hana.
Net hýsilsins er próf, ekki hönnun
Að keyra gám með neti hýsilsins, sem Docker skjalfestir sem deilingu á netnafnrými hýsilsins, lætur hann erfa göngviðmótið og slóðir þess beint. Ef sama beiðnin tekst þá er leiðakenningin staðfest og bilunin er einangrun nafnrýma en ekki skilríki, DNS eða aðgangsregla.
docker run --rm --net=host curl -sS -o /dev/null -w '%{http_code}\n' https://api.internal/health
Haltu því sem greiningu. Net hýsilsins gefur eftir útgáfu gátta og mestallri einangruninni sem þú vildir fá frá gámi, og á Docker Desktop þýðir „host“ sýndarvélina en ekki skjáborðið, svo árangur eða bilun þar getur villt um fyrir þér ef þú gleymir hvaða hýsil þú ávarpaðir.
tun-tæki og sérréttindin sem fylgja því
Vpn-biðlari inni í gáminum þarf göngtæki og leyfi til að stilla það. Venjuleg flýtileið er --privileged, sem veitir hvert tæki og slakar á öryggisstefnu um allan gáminn. Það er miklu meira en þetta verk krefst, og erfitt er að réttlæta það í yfirferð.
sudo modprobe tun
docker run --rm -it --device /dev/net/tun --cap-add NET_ADMIN myvpn-client
Þrengri myndin kortleggur eina tækisnóðu og bætir aðeins við netstjórnunargetu. Hladdu einingunni fyrst á hýsilinn svo nóðan sé til. Ef gámurinn ræsist og biðlarinn tilkynnir að hann geti ekki opnað göngtækið, athugaðu kortlagninguna áður en þú grunar sniðið, því þessi villa er venjulega bókstafleg.
Þessi hönnun þýðir líka að biðlarinn keyrir fyrir hvern gám. Það er rétta svarið þegar hvert vinnuálag þarf sitt eigið göng, og rangt þegar þú vildir bara að göng hýsilsins væru sýnileg, sem vettvangsliðið gerði líklega ráð fyrir að þú værir að gera.
NAT brúarinnar breytir upprunanum sem vpn-ið sér
Með sjálfgefinni brú er útleið umferðar gámsins þýdd yfir á vistfang hýsilsins. Bak við vpn sér fyrirtækjahliðin því göngvistfang hýsilsins en ekki gámsins, aðgangsreglur eftir uppruna haga sér eins og hýsillinn hafi sent beiðnina, og tveir gámar verða óaðgreinanlegir fyrir vpn-þjóninn.
macvlan eða ipvlan gefur gáminum LAN-vistfang í staðinn, sem hjálpar LAN-uppgötvun og lætur gáminn líta út eins og jafningja á sundinu. Það fer líka alveg fram hjá göngum hýsilsins, svo slíkur gámur nær ekki að forskeytum sem eru eingöngu fyrir vpn nema vpn-ið sé líka aðgengilegt frá því LANi.
Báðar myndir eru lögmætar; þær svara mismunandi kröfum. Ef krafan er „þessi gámur verður að ná í þjónustu sem er eingöngu fyrir vpn“, velur þú á milli leiðar í gegnum hýsilinn og að ljúka göngunum inni í gáminum. Skrifaðu það val niður fyrir uppsetninguna, ekki eftir fyrstu misheppnuðu beiðnina. Hvað sem þú velur, skráðu upprunavistfangið sem fjarlægi endinn sér, því nákvæmlega það munu aðgangsreglur hans og annálar sýna. Hönnun sem getur ekki nefnt það vistfang er ekki fullbúin.
DNS fylgir daemonnum, ekki göngunum
Gámur fær uppsetningu leysisins við ræsingu, afrituð frá daemonnum eða myndinni. Vistföng sem vpn-ið ýtir eftir tengingu koma of seint fyrir þá afritun, og þeim er ýtt á leysi hýsilsins en ekki inn í gáminn.
Stilltu leysinn skýrt fyrir þjónustuna, eða vísaðu honum á innra leysi sem er aðgengilegt í gegnum göngin. Gámur sem leysir einkana fn á almennt vistfang notar venjulega almennan leysi, þjáist ekki af brostinni leið, og lagfæringin á heima í compose-skránni eða stillingum daemonsins.
Sama röksemd á við um spurninguna um útgangsvistfang. Ef hver gámur verður að birtast frá mismunandi vpn-vistfangi getur eitt göng hýsilsins ekki veitt það því NAT þjappar þeim saman í einn uppruna. Vinnandi myndir eru biðlari í nafnrými hvers gáms eða sidecar sem á göngin og deilir staflanum sínum, og báðar breyta því hvernig forritið er ávarpað.
Gátlisti áður en þú lokar miðanum: greindu nafnrýmið sem á göngin, sannaðu leiðina með neti hýsilsins, kortleggðu aðeins nauðsynlegt tun-tæki, mundu upprunavistfangið eftir NAT, stilltu leysinn skýrt og meðhöndlaðu útgangsvistföng fyrir hvern gám sem arkitektúrlega ákvörðun en ekki fána.