In gewoane Linux-app brûkt de VPN sûnder TUN oan te raken
De daemon besit it TUN-apparaat en de tunnel; applikaasjes iepenje gewoan sockets. Hâld ynstelmacht en netwurktoegong as aparte grinzen.
In browser dy't in fêstige Linux-VPN brûkt, iepenet /dev/net/tun net. Hy iepenet in socket, en de kernel beslút by hokker ynterface de pakketten fan dy socket fuortgeane. It proses dat de tunnel makke hat, docht oar wurk as it proses waans ferkear it ferfiert. Dy twa rollen apart hâlde beantwurdet de measte tastimmingsfragen foardat se steld wurde.
Folgje ien pakket fan socket oant tunnel
In gewoane applikaasje ropt connect of send oan, en de kernel siket in rûte foar de bestimming. As de keazen rûte nei de tunnel-ynterface wiist, wurdt it pakket yn 'e wachtrige set by it apparaat dat de VPN-daemon lêst. De daemon fersiferelet it en stjoert it út fia de fysike ynterface. Eltse pylk yn dy beskriuwing is in plak dêr't in tastimmingsfraach beantwurde wurde kin.
Neat yn dat paad freget fan 'e applikaasje dat se it apparaat ken. De daemon hâldt de triemdeskriptor en docht de ynterface-operaasjes, wylst de applikaasje allinnich in normale netwurk-API sjocht.
Tekenje de twa helten ien kear, en tastimmingsfragen wurde makliker te pleatsen. De boppeste helte is de applikaasjewrâld, en de ûnderste helte heart by de daemon.
Beslis wa't it apparaat nedich hat en wa't dat net hat
It meitsjen fan of oansluten by in TUN-ynterface freget apparaattoegong plus de kapasiteit om it te konfigurearjen, dêrom begjint in stipe VPN-tsjinst mei netwurkbehearbefoechdheid of brûkt in befoarrjochte helper. Dy eask heart by de daemon. It seit neat oer de browser, de databankkliïnt of it bestânsoerdrachtark. In tsjinst dy't de kapasiteit nedich hat, hat it nedich foar har eigen ynstilstap, net foar har kliïnten.
As de rûte en it belied ienris yn plak binne, brûkt in gewoan proses it resultearjende paad fia syn gewoane socket-oproppen. It hat it apparaatknooppunt net nedich, en it hat root net nedich.
It feroarjen fan apparaattastimmings is gjin manier om in applikaasje bestimmingstoegong te jaan. It ferpleatst de apparaatgrins allinnich earne oars.
Kontrolearje de nammeromte wêryn de applikaasje echt rint
In kontener, of in twadde netwurk-nammeromte, jout syn prosessen in aparte ynterfaceset en rûtetabel. In tunnel op 'e host ferskynt dêr net automatysk, en gjin hoemannichte feroaringen fan apparaattastimmings feroarret dat. De applikaasje sil gewoan rûte fia wat dy nammeromte biedt. Dêrom kin in kontenerôfbylding net by ûngelok in hosttunnel ervje.
Kontrolearje mei ip netns list en ip -n NAME route, of troch de nammeromte-keppeling fan it proses te besjen. It antwurd is meastentiids yn ien kommando te sjen.
Twa brûkers op deselde host kinne ek ferskate paden krije troch belied. Dat is in netwurkbeslissing, net in bewiis oer it eigendom fan it apparaat.
Skied kapasiteiten fan netwurkbelied
Guon ark hawwe mear nedich as in socket. Pakketten ôffange freget in rau socket, en rûtes feroarje freget behearbefoechdheid. Dat binne aparte operaasjes mei aparte jeften, en it jaan fan ien moat net lêzen wurde as in algemiene eask foar it brûken fan 'e VPN.
In programma dat syn eigen tunnel ymplemintearret is in tredde gefal. It iepenet echt TUN, om't it de rol fan 'e daemon oernimt, dêrom hat it de foarrjochten fan 'e daemon nedich.
Nammje de operaasje foardat jo it foarrjocht nammje. De twa binne meastentiids makliker te skieden as se lykje.
Ferifiearje de skieding mei twa akkounts
Ferbin de tunnel as de tsjinst, rinn dan de applikaasje as in gewoane brûker en befêstigje dat er de privee boarne berikt. Kontrolearje ip route get foar de bestimming fan 'e shell fan dy brûker om te sjen hokker ynterface keazen waard. As de rûte goed is en de ferbining dochs mislearret, is it probleem belied, net foarrjocht.
It ûntwerp dat dêrút komt is minste foarrjocht mei in eksplisite grins: ien komponint besit de ynstallaasje en tunnelboarnen, workloads hâlde har normale akkounts, en netwurkbelied beslút wat passe mei. Alles as root rinne lit dy rollen ynstoarten sûnder eat te ferklearjen.