LXD elmontras gastigan signo-aparaton al kontenero per aldono de aparata nodo, ne per instruado de la gasto krei unu. Se la kontenero ne havas /dev/net/tun, la aparato povas ekzisti en la gastiganto kaj la gasto ankoraŭ ne povas malfermi ĝin. La unix-char-rikordo estas la administranto-flanka duono de tiu vojo, kaj ĝi estas intence pli mallarĝa ol privilegia kontenero. Tial la gastiga nodo kaj la kontenera nodo meritas apartajn kontrolojn.

La mekanismo estas sufiĉe mallonga por teni ĝin en la vido: LXD solvas gastigan vojon, kreas kongruan nodon ene de la kazo kaj aldonas la aparaton al la aparata cgroup de la kontenero. Poste la gastprocezo bezonas sian propran permeson kaj kapablon por uzi la nodon por io ajn.

Kion la unix-char-rikordo efektive ŝanĝas

unix-char-aparato diras al LXD elmontri unu gastigan signo-aparaton ĉe elektita vojo ene de la kontenero. La rikordo havas tri partojn, kiuj gravas: la aparata etikedo, kiun uzas la administranto, la vojo source en la gastiganto, kaj la path, kiun vidas la gasto. Nur la lastaj du priskribas la aparaton mem. Tajperaro en iu ajn el ili produktas nodon en loko, kiun la kliento neniam malfermas.

En la gastiganto la aparato normale estas /dev/net/tun. Ene de la kontenero vi povas teni la saman vojon aŭ elekti alian, sed la vojo devas kongrui kun tio, kion atendas la VPN-kliento. Teni /dev/net/tun evitas duan agordan problemon, ĉar plej multaj klientoj malfermas tiun vojon sen demandi.

La administranto aplikas la rikordon kiam la kazo startas aŭ kiam la aparato estas varme enŝovata. Ĝi ne kopias pelilon en la gaston kaj ne kreas tunelan interfacon. Ĝi igas la nodon videbla kaj permesas aliron tra la aparata reggrupo de la kontenero.

Deklaru la aparaton en la kazo, ne ene de la gasto

Aldonu la rikordon el la LXD-administra kunteksto, nomante la kazon kaj etikedon, kiun vi povos rekoni poste. Por kontenero nomata vpnbox la komando estas:

lxc config device add vpnbox tun unix-char source=/dev/net/tun path=/dev/net/tun
lxc config device show vpnbox

La etikedo tun estas loka al la agordo de la kazo. Ĝi ne estas interfaca nomo kaj ne devas kongrui kun io en la gasto. Se profilo jam provizas la saman aparaton, aldoni duan rikordon kreas konflikton anstataŭ redundon, do unue trarigardu la efikan agordon.

Redakti dosierojn ene de la kontenero estas la malĝusta tavolo. mknod en startoskripto povas ŝajni funkcii en privilegia kontenero, poste malaperi ĉe rekreado aŭ malsukcesi en malpli privilegia. La administranto posedas la aparataron de la kazo; lasu ĝin posedi ankaŭ la nodon.

Agordigu posedon kaj reĝimon al la gastprocezo

La unix-char-rikordo povas agordi uid, gid kaj mode por la nodo ene de la kontenero. Uzu ilin por kongrui kun la konto, kiu rulas la VPN-klienton, anstataŭ malfermi la aparaton al ĉiu uzanto aŭ ŝalti la konteneron al privilegia reĝimo.

Videbleco ne samas kiel permeso. Nodo posedata de root kun reĝimo 600 estas videbla por la servo ruliĝanta kiel neprivilegia uzanto kaj ankoraŭ ne malfermebla de ĝi. Kontrolu unue la gastkonton, poste agordu la posedon al tiu konto kaj tenu la reĝimon ne pli larĝa ol la kliento bezonas.

La procezo ankaŭ bezonas la kapablon agordi tunelan interfacon, kutime CAP_NET_ADMIN en la reta nomspaco de la kontenero. Transdoni la aparaton ne donas tiun kapablon, kaj doni la kapablon ne provizas la aparaton; ili estas sendependaj postuloj.

Sciu, kion la rikordo ne donas

Videbla nodo ne estas funkcianta VPN. La klienta pako ankoraŭ devas esti instalita, la profilo ankoraŭ devas esti valida kaj la servo ankoraŭ devas starti. Aŭtentigo, itineroj kaj DNS restas la tasko de la kliento, kaj fiasko tie ne estas pruvo, ke la aparata rikordo estas malĝusta.

systemd povas aldoni alian limigon. Unuo kun DeviceAllow aŭ hardita aparata politiko povas rifuzi aliron al nodo, kiun la kontenera administranto provizis. Kontrolu la aparatan politikon de la unuo kiam la nodo ekzistas sed la servo raportas permesan eraron, kaj ŝanĝu tiun politikon anstataŭ larĝigi la konteneron.

Varma enŝovo estas laŭvola kaj eksplicita. Rikordo kun required=false bezonas fontan vojon kaj povas aperi aŭ malaperi laŭ la gastiga aparato. Tiu vivociklo taŭgas por aparataro, kiu venas kaj foriras; por TUN-aparato, kiun la VPN bezonas ĉe lanĉo, laŭvola rikordo povas lasi la servon starti antaŭ ol ekzistas ĝia antaŭkondiĉo.

Kontrolu videblecon, malfermon kaj interfacon en tiu ordo

Unue konfirmu la nodon ene de la celata kontenero. La vojo, la ĉefa kaj malĉefa numeroj kaj la posedo devas kongrui kun la gastiga aparato kaj kun la rikordo, kiun vi aldonis. Mankanta nodo signifas, ke la administranto ne aplikis la rikordon aŭ aplikis ĝin al alia kazo.

lxc exec vpnbox -- ls -l /dev/net/tun
lxc exec vpnbox -- sh -c 'test -c /dev/net/tun && echo char-device-ok'

Poste konfirmu, ke la servokonto povas malfermi ĝin. Mallonga testo kiel tiu konto apartigas posedan problemon de serva problemo. Fine startigu la klienton kaj konfirmu, ke tunela interfaco aperas; nur tiu tria paŝo pruvas la tutan vojon, ĉar la unuaj du povas sukcesi dum la klienta profilo aŭ kapablo ankoraŭ malĝustas.

Notu la kazon, la aparatan etikedon, la gastigan fonton, la gastan vojon kaj la posedan konton kiam la ŝanĝo estas aprobita. Tiuj kvin valoroj estas tio, kion posta rekreado, migrado aŭ profilŝanĝo devas konservi, kaj ili estas multe pli facile kompareblaj ol permesa eraro sen kunteksto.

Rilataj artikoloj