'n Gewone Linux-program gebruik die VPN sonder om aan TUN te raak
Die daemon besit die TUN-toestel en die tonnel; programme maak net sokkette oop. Hou opstellingsregte en netwerktoegang as aparte grense.
'n Blaaier wat 'n gevestigde Linux-VPN gebruik, maak nie /dev/net/tun oop nie. Dit maak 'n sokket oop, en die kern besluit deur watter koppelvlak daardie sokket se pakkette vertrek. Die proses wat die tonnel geskep het, doen 'n ander taak as die proses wie se verkeer dit dra. Om daardie twee rolle apart te hou, beantwoord die meeste toestemmingsvrae voordat hulle gevra word.
Volg een pakket van sokket tot tonnel
'n Gewone program roep connect of send, en die kern soek 'n roete vir die bestemming. As die gekose roete na die tonnelkoppelvlak wys, word die pakket in die ry geplaas vir die toestel wat die VPN-daemon lees. Die daemon versleutel dit en stuur dit deur die fisiese koppelvlak uit. Elke pyl in daardie beskrywing is 'n plek waar 'n toestemmingsvraag beantwoord kan word.
Niks in daardie pad vereis dat die program van die toestel weet nie. Die daemon hou die lêerdeskriptor en doen die koppelvlakbewerkings, terwyl die program net 'n normale netwerk-API sien.
Teken die twee helftes een keer, en toestemmingsvrae word makliker om te plaas. Die boonste helfte is die programwêreld, en die onderste helfte behoort aan die daemon.
Bepaal wie die toestel nodig het en wie nie
Om 'n TUN-koppelvlak te skep of daaraan te koppel, vereis toegang tot die toestel plus die vermoë om dit te konfigureer, en daarom begin 'n ondersteunde VPN-diens met netwerkadministrasie-bevoegdheid of gebruik 'n bevoorregte helper. Daardie vereiste hoort by die daemon. Dit sê niks oor die blaaier, die databasis-kliënt of die lêeroordraginstrument nie. 'n Diens wat die vermoë nodig het, het dit vir sy eie opstellingsstap nodig, nie vir sy kliënte nie.
Sodra die roete en die beleid in plek is, gebruik 'n gewone proses die resulterende pad deur sy gewone sokket-oproepe. Dit het nie die toestelknooppunt nodig nie, en dit het nie root nodig nie.
Om toesteltoestemmings te verander, is nie 'n manier om 'n program toegang tot 'n bestemming te gee nie. Dit skuif net die toestelgrens êrens anders.
Kontroleer die naamruimte waarin die program werklik loop
'n Houer, of 'n tweede netwerknaamruimte, gee sy prosesse 'n aparte stel koppelvlakke en 'n aparte roetetabel. 'n Tonnel op die gasheer verskyn nie outomaties daar nie, en geen hoeveelheid toesteltoestemming verander dit nie. Die program sal eenvoudig deur alles loop wat daardie naamruimte bied. Daarom kan 'n houerbeeld nie per ongeluk 'n gasheer-tonnel erf nie.
Kontroleer met ip netns list en ip -n NAME route, of deur die naamruimte-skakel vir die proses te ondersoek. Die antwoord is gewoonlik in een opdrag sigbaar.
Twee gebruikers op dieselfde gasheer kan ook deur beleid verskillende paaie kry. Dit is 'n netwerkbesluit eerder as bewys van toestel-eienaarskap.
Skei vermoëns van netwerkbeleid
Sommige gereedskap het meer as 'n sokket nodig. Om pakkette vas te vang, vereis 'n rou sokket, en om roetes te verander, vereis administrasie-bevoegdheid. Dit is aparte bewerkings met aparte toekennings, en die toekenning van een moet nie gelees word as 'n algemene vereiste om die VPN te gebruik nie.
'n Program wat sy eie tonnel implementeer, is 'n derde geval. Dit maak werklik TUN oop, want dit neem die daemon se rol oor, en daarom het dit die daemon se voorregte nodig.
Noem die bewerking voordat jy die voorreg noem. Die twee is gewoonlik makliker om te skei as wat hulle lyk.
Verifieer die skeiding met twee rekeninge
Koppel die tonnel as die diens, en laat die program dan as 'n gewone gebruiker loop en bevestig dat dit die private hulpbron bereik. Kontroleer ip route get vir die bestemming vanuit daardie gebruiker se skulp om te sien watter koppelvlak gekies is. As die roete reg is en die verbinding steeds misluk, is die probleem beleid eerder as voorreg.
Die ontwerp wat hieruit volg, is minimum voorregte met 'n eksplisiete grens: een komponent besit die opstelling en die tonnelhulpbronne, werkvragte hou hul normale rekeninge, en netwerkbeleid besluit wat mag deur. Om alles as root te laat loop, val daardie rolle saam sonder om iets te verduidelik.