Μια συνηθισμένη εφαρμογή Linux χρησιμοποιεί το VPN χωρίς να αγγίζει το TUN
Ο δαίμονας κατέχει τη συσκευή TUN και το τούνελ· οι εφαρμογές απλώς ανοίγουν υποδοχές. Κρατήστε το δικαίωμα ρύθμισης και την πρόσβαση δικτύου ως ξεχωριστά όρια.
Ένας περιηγητής που χρησιμοποιεί ένα ήδη στημένο VPN Linux δεν ανοίγει το /dev/net/tun. Ανοίγει μια υποδοχή και ο πυρήνας αποφασίζει από ποια διεπαφή φεύγουν τα πακέτα αυτής της υποδοχής. Η διεργασία που δημιούργησε το τούνελ κάνει διαφορετική δουλειά από τη διεργασία της οποίας την κίνηση μεταφέρει. Το να κρατάμε αυτούς τους δύο ρόλους ξεχωριστούς απαντά στις περισσότερες ερωτήσεις αδειών πριν καν τεθούν.
Ακολουθήστε ένα πακέτο από την υποδοχή ως το τούνελ
Μια συνηθισμένη εφαρμογή καλεί connect ή send και ο πυρήνας αναζητά μια διαδρομή για τον προορισμό. Αν η επιλεγμένη διαδρομή δείχνει στη διεπαφή του τούνελ, το πακέτο μπαίνει στην ουρά της συσκευής που διαβάζει ο δαίμονας του VPN. Ο δαίμονας το κρυπτογραφεί και το στέλνει έξω από τη φυσική διεπαφή. Κάθε βέλος σε αυτή την περιγραφή είναι ένα σημείο όπου μπορεί να απαντηθεί μια ερώτηση άδειας.
Τίποτα σε αυτή τη διαδρομή δεν απαιτεί από την εφαρμογή να γνωρίζει τη συσκευή. Ο δαίμονας κρατά τον περιγραφέα αρχείου και εκτελεί τις πράξεις της διεπαφής, ενώ η εφαρμογή βλέπει μόνο ένα συνηθισμένο API δικτύου.
Σχεδιάστε τα δύο μισά μία φορά και οι ερωτήσεις αδειών γίνονται ευκολότερο να τοποθετηθούν. Το πάνω μισό είναι ο κόσμος των εφαρμογών και το κάτω ανήκει στον δαίμονα.
Αποφασίστε ποιος χρειάζεται τη συσκευή και ποιος όχι
Η δημιουργία διεπαφής TUN ή η σύνδεση σε αυτή απαιτεί πρόσβαση στη συσκευή συν το δικαίωμα να τη ρυθμίσετε, γι’ αυτό μια υποστηριζόμενη υπηρεσία VPN ξεκινά με δικαίωμα διαχείρισης δικτύου ή χρησιμοποιεί έναν προνομιούχο βοηθό. Αυτή η απαίτηση ανήκει στον δαίμονα. Δεν λέει τίποτα για τον περιηγητή, τον πελάτη βάσης δεδομένων ή το εργαλείο μεταφοράς αρχείων. Μια υπηρεσία που χρειάζεται το δικαίωμα το χρειάζεται για το δικό της βήμα ρύθμισης, όχι για τους πελάτες της.
Μόλις η διαδρομή και η πολιτική είναι στη θέση τους, μια συνηθισμένη διεργασία χρησιμοποιεί τη διαδρομή που προκύπτει με τις συνήθεις κλήσεις υποδοχής. Δεν χρειάζεται τον κόμβο της συσκευής και δεν χρειάζεται root.
Η αλλαγή των αδειών της συσκευής δεν είναι τρόπος να δοθεί σε μια εφαρμογή πρόσβαση σε προορισμό. Απλώς μετακινεί το όριο της συσκευής κάπου αλλού.
Ελέγξτε σε ποιον χώρο ονομάτων εκτελείται πραγματικά η εφαρμογή
Ένα κοντέινερ ή ένας δεύτερος χώρος ονομάτων δικτύου δίνει στις διεργασίες του ξεχωριστό σύνολο διεπαφών και πίνακα διαδρομών. Ένα τούνελ στον κεντρικό υπολογιστή δεν εμφανίζεται εκεί αυτόματα και καμία αλλαγή άδειας συσκευής δεν το αλλάζει. Η εφαρμογή απλώς θα δρομολογεί μέσα από ό,τι παρέχει αυτός ο χώρος. Γι’ αυτό μια εικόνα κοντέινερ δεν μπορεί να κληρονομήσει κατά λάθος ένα τούνελ του κεντρικού υπολογιστή.
Ελέγξτε με το ip netns list και το ip -n NAME route, ή εξετάζοντας τον σύνδεσμο χώρου ονομάτων της διεργασίας. Η απάντηση είναι συνήθως ορατή σε μία εντολή.
Σε δύο χρήστες στον ίδιο κεντρικό υπολογιστή μπορούν επίσης να δοθούν διαφορετικές διαδρομές με πολιτική. Αυτό είναι απόφαση δικτύου και όχι απόδειξη ιδιοκτησίας της συσκευής.
Διαχωρίστε τα δικαιώματα από την πολιτική δικτύου
Ορισμένα εργαλεία χρειάζονται περισσότερα από μια υποδοχή. Η καταγραφή πακέτων χρειάζεται ακατέργαστη υποδοχή και η αλλαγή διαδρομών χρειάζεται δικαίωμα διαχείρισης. Είναι ξεχωριστές πράξεις με ξεχωριστές παραχωρήσεις και η παραχώρηση της μίας δεν πρέπει να διαβάζεται ως γενική απαίτηση για τη χρήση του VPN.
Ένα πρόγραμμα που υλοποιεί το δικό του τούνελ είναι η τρίτη περίπτωση. Ανοίγει πραγματικά το TUN επειδή αναλαμβάνει τον ρόλο του δαίμονα, γι’ αυτό χρειάζεται τα προνόμια του δαίμονα.
Ονομάστε την πράξη πριν ονομάσετε το προνόμιο. Συνήθως είναι ευκολότερο να τα ξεχωρίσεις απ’ ό,τι φαίνεται.
Επαληθεύστε τον διαχωρισμό με δύο λογαριασμούς
Συνδέστε το τούνελ ως υπηρεσία, μετά εκτελέστε την εφαρμογή ως συνηθισμένος χρήστης και επιβεβαιώστε ότι φτάνει στον ιδιωτικό πόρο. Ελέγξτε το ip route get για τον προορισμό από το κέλυφος αυτού του χρήστη για να δείτε ποια διεπαφή επιλέχθηκε. Αν η διαδρομή είναι σωστή και η σύνδεση αποτυγχάνει ακόμα, το πρόβλημα είναι πολιτική και όχι προνόμιο.
Το σχέδιο που προκύπτει είναι ελάχιστο προνόμιο με ρητό όριο: ένα στοιχείο κατέχει τη ρύθμιση και τους πόρους του τούνελ, τα φορτία εργασίας κρατούν τους κανονικούς λογαριασμούς τους και η πολιτική δικτύου αποφασίζει τι επιτρέπεται να περάσει. Το να τρέχουν όλα ως root συνθλίβει αυτούς τους ρόλους χωρίς να εξηγεί τίποτα.