Το LXD εκθέτει μια συσκευή χαρακτήρων του κεντρικού υπολογιστή σε ένα κοντέινερ προσθέτοντας έναν κόμβο συσκευής, όχι διδάσκοντας τον φιλοξενούμενο να δημιουργήσει έναν. Αν το κοντέινερ δεν έχει /dev/net/tun, η συσκευή μπορεί να υπάρχει στον κεντρικό υπολογιστή και ο φιλοξενούμενος να μην μπορεί να την ανοίξει. Η καταχώριση unix-char είναι το μισό αυτής της διαδρομής από την πλευρά του διαχειριστή, και είναι σκόπιμα στενότερη από ένα προνομιούχο κοντέινερ. Γι' αυτό ο κόμβος του κεντρικού υπολογιστή και ο κόμβος του κοντέινερ αξίζουν ξεχωριστούς ελέγχους.

Ο μηχανισμός είναι αρκετά σύντομος για να μένει στο οπτικό πεδίο: το LXD επιλύει μια διαδρομή του κεντρικού υπολογιστή, δημιουργεί έναν αντίστοιχο κόμβο μέσα στο στιγμιότυπο και προσθέτει τη συσκευή στην ομάδα συσκευών του κοντέινερ. Έπειτα η διεργασία του φιλοξενούμενου χρειάζεται τη δική της άδεια και ικανότητα για να χρησιμοποιήσει τον κόμβο σε οτιδήποτε.

Τι αλλάζει πραγματικά η καταχώριση unix-char

Μια συσκευή unix-char λέει στο LXD να εκθέσει μία συσκευή χαρακτήρων του κεντρικού υπολογιστή σε μια επιλεγμένη διαδρομή μέσα στο κοντέινερ. Η καταχώριση έχει τρία μέρη που μετράνε: την ετικέτα συσκευής που χρησιμοποιεί ο διαχειριστής, τη διαδρομή source στον κεντρικό υπολογιστή και το path που βλέπει ο φιλοξενούμενος. Μόνο τα δύο τελευταία περιγράφουν την ίδια τη συσκευή. Ένα τυπογραφικό λάθος σε οποιοδήποτε από τα δύο παράγει κόμβο σε σημείο που ο πελάτης δεν ανοίγει ποτέ.

Στον κεντρικό υπολογιστή η συσκευή είναι συνήθως /dev/net/tun. Μέσα στο κοντέινερ μπορείτε να κρατήσετε την ίδια διαδρομή ή να διαλέξετε άλλη, αλλά η διαδρομή πρέπει να ταιριάζει με αυτό που περιμένει ο πελάτης VPN. Η διατήρηση του /dev/net/tun αποφεύγει ένα δεύτερο πρόβλημα ρύθμισης, γιατί οι περισσότεροι πελάτες ανοίγουν αυτή τη διαδρομή χωρίς να ρωτήσουν.

Ο διαχειριστής εφαρμόζει την καταχώριση όταν ξεκινά το στιγμιότυπο ή όταν η συσκευή συνδέεται εν θερμώ. Δεν αντιγράφει οδηγό στον φιλοξενούμενο και δεν δημιουργεί διεπαφή σήραγγας. Κάνει τον κόμβο ορατό και επιτρέπει την πρόσβαση μέσω της ομάδας ελέγχου συσκευών του κοντέινερ.

Δηλώστε τη συσκευή στο στιγμιότυπο, όχι μέσα στον φιλοξενούμενο

Προσθέστε την καταχώριση από το περιβάλλον διαχείρισης του LXD, ονομάζοντας το στιγμιότυπο και μια ετικέτα που θα αναγνωρίσετε αργότερα. Για κοντέινερ με όνομα vpnbox η εντολή είναι:

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

Η ετικέτα tun είναι τοπική στη ρύθμιση του στιγμιότυπου. Δεν είναι όνομα διεπαφής και δεν χρειάζεται να ταιριάζει με τίποτα στον φιλοξενούμενο. Αν ένα προφίλ παρέχει ήδη την ίδια συσκευή, μια δεύτερη καταχώριση δημιουργεί σύγκρουση αντί για πλεονασμό, οπότε ελέγξτε πρώτα την ενεργή ρύθμιση.

Η επεξεργασία αρχείων μέσα στο κοντέινερ είναι το λάθος επίπεδο. Ένα mknod σε σενάριο εκκίνησης μπορεί να φαίνεται ότι δουλεύει σε προνομιούχο κοντέινερ και μετά να εξαφανιστεί στην επαναδημιουργία ή να αποτύχει σε λιγότερο προνομιούχο. Ο διαχειριστής κατέχει το σύνολο συσκευών του στιγμιότυπου· αφήστε τον να κατέχει και τον κόμβο.

Ταιριάξτε ιδιοκτησία και λειτουργία με τη διεργασία του φιλοξενούμενου

Η καταχώριση unix-char μπορεί να ορίσει uid, gid και mode για τον κόμβο μέσα στο κοντέινερ. Χρησιμοποιήστε τα για να ταιριάξετε τον λογαριασμό που εκτελεί τον πελάτη VPN, αντί να ανοίξετε τη συσκευή σε κάθε χρήστη ή να γυρίσετε το κοντέινερ σε προνομιούχο λειτουργία.

Η ορατότητα δεν είναι το ίδιο με την άδεια. Ένας κόμβος που ανήκει στο root με λειτουργία 600 είναι ορατός στην υπηρεσία που εκτελείται ως μη προνομιούχος χρήστης και παραμένει μη ανοίξιμος από αυτήν. Ελέγξτε πρώτα τον λογαριασμό του φιλοξενούμενου, μετά ορίστε την ιδιοκτησία σε αυτόν τον λογαριασμό και κρατήστε τη λειτουργία όχι ευρύτερη από όσο χρειάζεται ο πελάτης.

Η διεργασία χρειάζεται επίσης την ικανότητα να ρυθμίσει μια διεπαφή σήραγγας, συνήθως CAP_NET_ADMIN στον χώρο ονομάτων δικτύου του κοντέινερ. Η μεταβίβαση της συσκευής δεν παρέχει αυτή την ικανότητα, και η παροχή της ικανότητας δεν παρέχει τη συσκευή· είναι ανεξάρτητες απαιτήσεις.

Μάθετε τι δεν παρέχει η καταχώριση

Ένας ορατός κόμβος δεν είναι λειτουργικό VPN. Το πακέτο του πελάτη πρέπει ακόμη να εγκατασταθεί, το προφίλ πρέπει ακόμη να είναι έγκυρο και η υπηρεσία πρέπει ακόμη να ξεκινήσει. Η αυθεντικοποίηση, οι διαδρομές και το DNS παραμένουν δουλειά του πελάτη, και μια αποτυχία εκεί δεν αποδεικνύει ότι η καταχώριση συσκευής είναι λανθασμένη.

Το systemd μπορεί να προσθέσει άλλον έναν περιορισμό. Μια μονάδα με DeviceAllow ή σκληρυμένη πολιτική συσκευών μπορεί να αρνηθεί πρόσβαση σε κόμβο που παρείχε ο διαχειριστής κοντέινερ. Ελέγξτε την πολιτική συσκευών της μονάδας όταν ο κόμβος υπάρχει αλλά η υπηρεσία αναφέρει σφάλμα άδειας, και αλλάξτε αυτή την πολιτική αντί να διευρύνετε το κοντέινερ.

Η θερμή σύνδεση είναι προαιρετική και ρητή. Μια καταχώριση με required=false χρειάζεται διαδρομή πηγής και μπορεί να εμφανιστεί ή να εξαφανιστεί καθώς αλλάζει η συσκευή του κεντρικού υπολογιστή. Αυτός ο κύκλος ζωής ταιριάζει σε υλικό που έρχεται και φεύγει· για συσκευή TUN που το VPN χρειάζεται στην εκκίνηση, μια προαιρετική καταχώριση μπορεί να αφήσει την υπηρεσία να ξεκινήσει πριν υπάρξει η προϋπόθεσή της.

Επαληθεύστε ορατότητα, άνοιγμα και διεπαφή με αυτή τη σειρά

Πρώτα επιβεβαιώστε τον κόμβο μέσα στο επιδιωκόμενο κοντέινερ. Η διαδρομή, ο κύριος και ο δευτερεύων αριθμός και η ιδιοκτησία πρέπει να ταιριάζουν με τη συσκευή του κεντρικού υπολογιστή και με την καταχώριση που προσθέσατε. Ένας απόν κόμβος σημαίνει ότι ο διαχειριστής δεν εφάρμοσε την καταχώριση ή την εφάρμοσε σε άλλο στιγμιότυπο.

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

Έπειτα επιβεβαιώστε ότι ο λογαριασμός υπηρεσίας μπορεί να τον ανοίξει. Ένα σύντομο τεστ ως αυτός ο λογαριασμός χωρίζει το πρόβλημα ιδιοκτησίας από το πρόβλημα υπηρεσίας. Τέλος, ξεκινήστε τον πελάτη και επιβεβαιώστε ότι εμφανίζεται διεπαφή σήραγγας· μόνο αυτό το τρίτο βήμα αποδεικνύει όλη τη διαδρομή, γιατί τα δύο πρώτα μπορούν να περάσουν ενώ το προφίλ ή η ικανότητα του πελάτη είναι ακόμη λανθασμένα.

Καταγράψτε το στιγμιότυπο, την ετικέτα συσκευής, την πηγή στον κεντρικό υπολογιστή, τη διαδρομή στον φιλοξενούμενο και τον λογαριασμό κατόχου όταν εγκριθεί η αλλαγή. Αυτές οι πέντε τιμές είναι ό,τι πρέπει να διατηρήσει μια μεταγενέστερη επαναδημιουργία, μετεγκατάσταση ή αλλαγή προφίλ, και είναι πολύ ευκολότερο να συγκριθούν από ένα σφάλμα άδειας χωρίς πλαίσιο.

Σχετικά άρθρα