Tavallinen Linux-sovellus käyttää VPN:ää koskematta TUNiin
Taustapalvelu omistaa TUN-laitteen ja tunnelin; sovellukset avaavat vain soketteja. Pidä asennusvaltuudet ja verkkoyhteys erillisinä rajoina.
Vakiintunutta Linux-VPN:ää käyttävä selain ei avaa /dev/net/tun. Se avaa soketin, ja ydin päättää, mistä liittymästä sen soketin paketit lähtevät. Tunnelit luonut prosessi tekee eri työtä kuin prosessi, jonka liikennettä se kuljettaa. Näiden kahden roolin pitäminen erillään vastaa useimpiin oikeuskysymyksiin ennen kuin niitä esitetään.
Seuraa yhtä pakettia soketista tunneliin
Tavallinen sovellus kutsuu connectia tai sendiä, ja ydin etsii kohteelle reitin. Jos valittu reitti osoittaa tunnelin liittymään, paketti asetetaan jonoon laitteeseen, jota VPN:n taustapalvelu lukee. Taustapalvelu salaa sen ja lähettää sen ulos fyysisen liittymän kautta. Jokainen tuon kuvauksen nuoli on paikka, jossa oikeuskysymykseen voi vastata.
Mikään tuolla polulla ei vaadi sovellusta tuntemaan laitetta. Taustapalvelu pitää tiedostokuvaajaa ja tekee liittymätoiminnot, kun taas sovellus näkee vain tavallisen verkkorajapinnan.
Piirrä kaksi puoliskoa kerran, niin oikeuskysymykset on helpompi sijoittaa. Ylempi puolisko on sovellusten maailma ja alempi kuuluu taustapalvelulle.
Päätä, kuka tarvitsee laitteen ja kuka ei
TUN-liittymän luominen tai siihen liittyminen vaatii laitteen käyttöoikeuden ja lisäksi oikeuden sen määrittämiseen, minkä vuoksi tuettu VPN-palvelu alkaa verkon ylläpitovaltuuksin tai käyttää etuoikeutettua apuohjelmaa. Tämä vaatimus kuuluu taustapalvelulle. Se ei kerro mitään selaimesta, tietokanta-asiakkaasta tai tiedostonsiirtotyökalusta. Palvelu, joka tarvitsee oikeuden, tarvitsee sen omaan asennusvaiheeseensa, ei asiakkailleen.
Kun reitti ja käytäntö ovat paikoillaan, tavallinen prosessi käyttää syntyvää polkua tavanomaisilla sokettikutsuillaan. Se ei tarvitse laitesolmua eikä rootia.
Laitteen käyttöoikeuksien muuttaminen ei ole tapa antaa sovellukselle kohdeyhteyttä. Se vain siirtää laitteen rajan muualle.
Tarkista nimiavaruus, jossa sovellus todella toimii
Kontti tai toinen verkkonimiavaruus antaa prosesseilleen erillisen liittymäjoukon ja reititystaulun. Isännän tunneli ei ilmesty sinne automaattisesti, eikä mikään määrä laitteen käyttöoikeuksien muutoksia muuta sitä. Sovellus reitittää yksinkertaisesti sen kautta, mitä kyseinen nimiavaruus tarjoaa. Siksi konttikuvake ei voi vahingossa periä isännän tunnelia.
Tarkista komennolla ip netns list ja ip -n NAME route tai katsomalla prosessin nimiavaruuslinkkiä. Vastaus on yleensä näkyvissä yhdellä komennolla.
Myös kahdelle saman isännän käyttäjälle voidaan antaa käytännöllä eri polut. Se on verkkoon liittyvä päätös eikä todiste laitteen omistuksesta.
Erota valtuudet verkkokäytännöstä
Jotkin työkalut tarvitsevat enemmän kuin soketin. Pakettien kaappaus tarvitsee raakasoketin ja reittien muuttaminen tarvitsee ylläpitovaltuuden. Ne ovat erillisiä toimintoja erillisine myönnytyksineen, eikä yhden myöntämistä pitäisi lukea yleiseksi VPN:n käytön vaatimukseksi.
Ohjelma, joka toteuttaa oman tunnelinsa, on kolmas tapaus. Se avaa TUNin todella, koska ottaa taustapalvelun roolin, minkä vuoksi se tarvitsee taustapalvelun oikeudet.
Nimeä toiminto ennen oikeuden nimeämistä. Ne kaksi on yleensä helpompi erottaa kuin miltä näyttää.
Varmista jako kahdella tilillä
Yhdistä tunneli palveluna ja aja sovellus sitten tavallisena käyttäjänä ja varmista, että se saavuttaa yksityisen resurssin. Tarkista ip route get kohteelle kyseisen käyttäjän komentotulkista nähdäksesi, mikä liittymä valittiin. Jos reitti on oikein ja yhteys epäonnistuu silti, ongelma on käytännössä eikä oikeudessa.
Tuloksena oleva suunnittelu on vähimmät oikeudet selkeällä rajalla: yksi komponentti omistaa asennuksen ja tunnelin resurssit, työkuormat säilyttävät tavalliset tilinsä ja verkkokäytäntö päättää, mikä saa kulkea. Kaiken ajamisena rootina romahduttaa ne roolit selittämättä mitään.