LXD biedt in host-tekenapparaat oan in kontener oan troch in apparaatknooppunt ta te foegjen, net troch de gast te learen der ien te meitsjen. As de kontener gjin /dev/net/tun hat, kin de host it apparaat hawwe en de gast it dochs net iepenje kinne. De unix-char-yngong is de behearderskant fan dyselde paad, en hy is bewust smeller as in privilezjeare kontener. Dêrom fertsjinje it hostknooppunt en it kontenerknooppunt aparte kontrôles.

It meganisme is koart genôch om yn it each te hâlden: LXD lost in hostpaad op, makket in oerienkommend knooppunt yn 'e ynstânsje en foeget it apparaat ta oan 'e apparaat-cgroup fan 'e kontener. Dêrnei hat it gastproses syn eigen tastimming en fermogen nedich om it knooppunt earne foar te brûken.

Wat de unix-char-yngong echt feroaret

In unix-char-apparaat seit tsjin LXD dat it ien host-tekenapparaat op in keazen paad yn 'e kontener oanbiede moat. De yngong hat trije dielen dy't ta saak dogge: it apparaatlabel dat de behearder brûkt, it paad source op 'e host en it path dat de gast sjocht. Allinnich de lêste twa beskriuwe it apparaat sels. In typflater yn ien fan beide makket in knooppunt op in plak dat de klant nea iepenet.

Op 'e host is it apparaat normaalwei /dev/net/tun. Yn 'e kontener kinne jo itselde paad hâlde of in oar kieze, mar it paad moat oerienkomme mei wat de VPN-klant ferwachtet. /dev/net/tun hâlde foarkomt in twadde konfiguraasjeprobleem, om't de measte klanten dat paad sûnder freegjen iepenje.

De behearder past de yngong ta as de ynstânsje start of as it apparaat hjit oansluten wurdt. Hy kopiearret gjin stjoerprogramma yn 'e gast en makket gjin tunnelinterface. Hy makket it knooppunt sichtber en lit tagong ta fia de apparaatkontrôlegroep fan 'e kontener.

Ferkaarje it apparaat op 'e ynstânsje, net yn 'e gast

Foegje de yngong ta fanút de LXD-behearderskontekst, mei de namme fan 'e ynstânsje en in label dat jo letter weromkenne. Foar in kontener mei de namme vpnbox is it kommando:

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

It label tun is lokaal foar de konfiguraasje fan 'e ynstânsje. It is gjin interface-namme en it hoech mei neat yn 'e gast oerien te kommen. As in profyl itselde apparaat al leveret, makket in twadde yngong in konflikt ynstee fan oerstalligens, dus besjoch earst de effektive konfiguraasje.

Bestannen yn 'e kontener bewurkje is de ferkearde laach. In mknod yn in startskript kin lykje te wurkjen op in privilezjeare kontener, en dan by it opnij meitsjen ferdwine of mislearje op ien mei minder privilezjes. De behearder is eigner fan 'e apparaatset fan 'e ynstânsje; lit him ek eigner fan it knooppunt wêze.

Pas eigendom en modus oan op it gastproses

De unix-char-yngong kin uid, gid en mode ynstelle foar it knooppunt yn 'e kontener. Brûk se om oerien te kommen mei it akkount dat de VPN-klant rint, ynstee fan it apparaat foar elke brûker iepen te setten of de kontener yn privilezjeare modus te setten.

Sichtberens is net itselde as tastimming. In knooppunt dat fan root is en modus 600 hat, is sichtber foar de tsjinst dy't as net-privilezjeare brûker rint en is der dochs net troch te iepenjen. Kontrolearje earst it gastakkount, set dan it eigendom op dat akkount en hâld de modus net breder as de klant nedich hat.

It proses hat ek it fermogen nedich om in tunnelinterface te konfigurearjen, meastentiids CAP_NET_ADMIN yn 'e netwurknammeromte fan 'e kontener. It apparaat trochjaan jout dat fermogen net, en it fermogen jaan leveret it apparaat net; it binne ûnôfhinklike easken.

Wit wat de yngong net jout

In sichtber knooppunt is gjin wurkjende VPN. It klantpakket moat noch ynstallearre wurde, it profyl moat noch jildich wêze en de tsjinst moat noch starte. Autentikaasje, rûtes en DNS bliuwe wurk foar de klant, en in flater dêr is gjin bewiis dat de apparaatyngong ferkeard is.

systemd kin noch in beheining tafoegje. In unit mei DeviceAllow of in hurde apparaatbelied kin tagong wegerje ta in knooppunt dat de kontenerbehearder levere hat. Kontrolearje it apparaatbelied fan 'e unit as it knooppunt bestiet mar de tsjinst in tastimmingsflater meldt, en feroarje dat belied ynstee fan de kontener te ferbreedzjen.

Hjit oansluten is opsjoneel en eksplisyt. In yngong mei required=false hat in boarnepaad nedich en kin ferskine of ferdwine as it hostapparaat feroaret. Dy libbenssyklus past by hardware dy't komt en giet; foar in TUN-apparaat dat de VPN by it opstarten nedich hat, kin in opsjonele yngong de tsjinst starte litte foardat har betingst bestiet.

Kontrolearje sichtberens, iepenjen en interface yn dy folchoarder

Befêstigje earst it knooppunt yn 'e bedoelde kontener. It paad, de haad- en bynûmers en it eigendom moatte oerienkomme mei it hostapparaat en de yngong dy't jo tafoege hawwe. In ûntbrekkend knooppunt betsjut dat de behearder de yngong net tapast hat, of op in oare ynstânsje tapast hat.

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

Befêstigje dêrnei dat it tsjinstakkount it iepenje kin. In koarte test as dat akkount skiedt in eigendomsprobleem fan in tsjinstprobleem. Start úteinlik de klant en befêstigje dat in tunnelinterface ferskynt; allinnich dy tredde stap bewiist it hiele paad, om't de earste twa slagje kinne wylst it klantprofyl of it fermogen noch ferkeard is.

Skriuw de ynstânsje, it apparaatlabel, de hostboarne, it gastpaad en it eigenakkount op as de wiziging goedkard wurdt. Dy fiif wearden binne wat in lettere weropbou, migraasje of profylwiziging behâlde moat, en se binne folle makliker te fergelykjen as in tastimmingsflater sûnder kontekst.

Relatearre artikelen