Δρομολόγηση ενός λογαριασμού Linux μέσω OpenVPN με κανόνα UID
Ένας κανόνας uidrange βάζει τους υποδοχείς IPv4 ενός λογαριασμού σε υπάρχον τούνελ χωρίς namespace. Αποφασίστε ξεχωριστά για DNS, IPv6 και εφεδρική διαδρομή και μετά επαληθεύστε.
Η δρομολόγηση βάσει λογαριασμού ταιριάζει όταν κάθε υποδοχέας IPv4 που ανήκει σε έναν χρήστη Linux πρέπει να βγαίνει μέσα από υπάρχον τούνελ, και δεν ταιριάζει όταν χρειάζεστε απομόνωση σε επίπεδο προγράμματος. Επιλέγει κατά UID, άρα ό,τι τρέχει με αυτόν τον λογαριασμό είναι στο πεδίο, μαζί με την παρτίδα εργασίας που ξεχάσατε. Λύστε αυτό το ζήτημα πριν αγγίξετε έναν μόνο ip rule.
Το παρακάτω παράδειγμα υποθέτει ξεχωριστό λογαριασμό περιηγητή στο UID 1500, συσκευή τούνελ tun-office με τοπική διεύθυνση 10.80.0.11 και VPN που επιτρέπει τους εν λόγω προορισμούς. Ο ίδιος ο δαίμονας τρέχει έξω από αυτό το UID.
Τρεις συνθήκες που επιλέγουν τον μηχανισμό
Επιλέξτε κανόνα UID όταν η ταυτότητα που κάνει τη δουλειά είναι ο λογαριασμός, όταν η μετακίνηση όλης της κίνησής του είναι αποδεκτή και όταν ένα namespace θα ήταν βαρύτερο απ όσο αξίζει η εργασία. Επιλέξτε namespace δικτύου όταν το φορτίο χρειάζεται δικές του διεπαφές, resolver και πίνακα δρομολόγησης. Επιλέξτε διαμεσολαβητή ή δέσμευση ανά διεργασία όταν ακριβώς μία εφαρμογή πρέπει να μετακινηθεί ενώ η υπόλοιπη συνεδρία μένει στην τοπική διαδρομή. Η καταγραφή αυτών των τριών εμποδίζει έναν κανόνα που καλύπτει σιωπηλά περισσότερα απ όσα προβλέπονταν.
Το λάθος που πρέπει να αποφύγετε είναι να υποθέσετε ότι ο εκκινητής ορίζει τον ιδιοκτήτη. Ένας περιηγητής που δέχεται URL από συνεδρία άλλου χρήστη δεν έχει δημιουργήσει υποδοχείς κάτω από το UID 1500, και κανένας κανόνας δεν θα μετακινήσει την κίνηση που παράγει.
Ο πίνακας, ο κανόνας και ο φρουρός
Αφού ελέγξετε τους υπάρχοντες κανόνες και επιλέξετε αχρησιμοποίητους αριθμούς πίνακα και προτεραιότητας, η διάταξη είναι σύντομη: προεπιλεγμένη διαδρομή σε ξεχωριστό πίνακα που φέρει τη διεύθυνση προέλευσης του τούνελ, κανόνας που στέλνει τις αναζητήσεις του λογαριασμού σε αυτόν τον πίνακα, και τελικός κανόνας που μπλοκάρει την εφεδρική διαδρομή. Γραμμένο, αυτό είναι μια ιδιοδυναμική αντικατάσταση διαδρομής, ip -4 route replace default dev tun-office src 10.80.0.11 table 51820, που ακολουθείται από ip -4 rule add priority 12100 uidrange 1500-1500 lookup 51820.
Ο φρουρός είναι ip -4 rule add priority 12101 uidrange 1500-1500 unreachable, και μετράει περισσότερο απ όσο υποδηλώνει το μήκος του. Χωρίς αυτόν, μια διαδρομή που λείπει στον πίνακα 51820 πέφτει στην συνηθισμένη ανάντη ζεύξη και ο λογαριασμός διαρρέει σιωπηλά κίνηση που η πολιτική έπρεπε να συλλάβει. Με αυτόν, η ίδια αποτυχία γίνεται χρονικό όριο, δηλαδή αποκλεισμός αντί για εφεδρική διαδρομή.
Κρατήστε τον κανονικό κανόνα τοπικής διεύθυνσης μπροστά από αυτούς, και αποφασίστε συνειδητά αν οι εξαιρέσεις LAN ή διαχείρισης ανήκουν πριν από τον επιλεγμένο πίνακα. Μια προεπιλεγμένη διαδρομή που βρίσκεται εκεί δεν συμβουλεύεται αργότερα το main για πιο συγκεκριμένη διαδρομή LAN, κάτι που ξαφνιάζει όσους περιμένουν η αντιστοίχιση μεγαλύτερου προθέματος να ισχύει μεταξύ πινάκων. Γράψτε την προβλεπόμενη λίστα εξαιρέσεων στο σημείωμα αλλαγής όσο το σκεπτικό είναι ακόμη φρέσκο.
Τι αφήνει έξω η δρομολόγηση UID: DNS
Ο δαίμονας resolver ανοίγει τους ανάντη υποδοχείς του κάτω από το δικό του UID, άρα η επιλογή 1500 δεν μετακινεί αυτές τις ερωτήσεις στον πίνακα 51820. Η ενσωμάτωση DNS είναι ξεχωριστή απόφαση: κατευθύνετε τον λογαριασμό σε resolver προσβάσιμο μέσω του τούνελ, ή δεχτείτε ότι η επίλυση ονομάτων ακολουθεί τη διαδρομή του κεντρικού υπολογιστή ενώ η κίνηση όχι.
Ένα ερώτημα μέσω loopback σε τοπικό stub δεν είναι απόδειξη ότι το ανάντη ερώτημα χρησιμοποίησε τη διαδρομή του περιηγητή, ούτε μια επιτυχημένη φόρτωση σελίδας από την προσωρινή μνήμη.
Το IPv6 χρειάζεται τη δική του φράση στον σχεδιασμό
Οι κανόνες παραπάνω καλύπτουν μόνο IPv4. Αν η απαίτηση είναι τούνελ IPv4 χωρίς άμεσο IPv6 από αυτόν τον λογαριασμό, προσθέστε έναν ελεγμένο τελικό κανόνα όπως ip -6 rule add priority 12101 uidrange 1500-1500 unreachable, και μετά ελέγξτε τους προηγούμενους κανόνες IPv6 και τις εξαιρέσεις loopback που θέλετε να κρατήσετε.
Ο αποκλεισμός του άμεσου IPv6 δεν είναι τούνελ διπλής στοίβας· είναι όριο. Το να το πείτε τούνελ θα μπερδέψει τον επόμενο που θα διαβάσει την πολιτική, και η σύγχυση θα εμφανιστεί ως αίτημα υποστήριξης για σπασμένο ιστότοπο IPv6.
Επαληθεύστε με τον πραγματικό λογαριασμό και μετά αναλάβετε τον κύκλο ζωής
Συγκρίνετε αναζητήσεις: ip -4 route get 198.51.100.25 uid 1500 με τον ίδιο προορισμό με συνηθισμένο UID. Μετά κάντε ένα επιτρεπόμενο αίτημα κάτω από τον ξεχωριστό λογαριασμό και ελέγξτε τη διεύθυνση προέλευσης που βλέπει το απομακρυσμένο άκρο. Μια προτιμώμενη διεύθυνση προέλευσης δεν είναι source NAT, και δεν θα υπερισχύσει μιας εφαρμογής που δεσμεύει κάτι άλλο. Αν και οι δύο αναζητήσεις επιστρέφουν την ίδια διαδρομή, ο κανόνας δεν κάνει αυτό που νομίζετε.
Κρατήστε τον πίνακα, τους κανόνες και τη διάρκεια ζωής της διαδρομής του τούνελ κάτω από έναν ιδιοκτήτη, δοκιμάστε επανασύνδεση και απώλεια τούνελ, και όταν αποσύρετε την πολιτική αφαιρέστε μόνο τις ακριβείς εγγραφές της. Ένα namespace παραμένει διαθέσιμο αν ξεχωριστές διεπαφές και ξεχωριστή κατάσταση είναι αυτό που πραγματικά χρειάζεστε.