Προδημιουργημένο tun στο OpenVPN: σύγκριση των δύο μοντέλων ιδιοκτησίας
Μια προδημιουργημένη διεπαφή tun μπορεί να επαναχρησιμοποιηθεί, αλλά μόνο ένα στοιχείο πρέπει να κατέχει τις διευθύνσεις και τις διαδρομές της. Συγκρίνετε τα δύο μοντέλα πριν προσθέσετε το ifconfig-noexec.
Κάποιος προδημιούργησε το tun1, το προφίλ λέει dev tun1 και η σύνδεση εξακολουθεί να μην προσαρτάται. Η ύπαρξη του ονόματος στον κεντρικό υπολογιστή δεν λέει σχεδόν τίποτα, γιατί η προσάρτηση εξαρτάται από τον χώρο ονομάτων, τον τύπο της συσκευής, ποιος κατέχει τον σύνδεσμο και τι επιτρέπεται να κάνει ο δαίμονας. Η επαναχρησιμοποίηση μιας συσκευής επιβάλλει επίσης μια απόφαση που κρύβει η προεπιλεγμένη διαμόρφωση: ποιο στοιχείο γράφει τις διευθύνσεις και τις διαδρομές. Οι τρόποι αποτυχίας των δύο ρυθμίσεων διαφέρουν πολύ περισσότερο από τις γραμμές διαμόρφωσης, γι' αυτό αποφασίστε πριν επεξεργαστείτε ένα προφίλ.
Το όνομα δεν είναι προσάρτηση
Το dev tun1 ζητά από το OpenVPN αυτή τη διεπαφή με όνομα και οι παραδοσιακές εκδόσεις στον χώρο χρήστη θα προσπαθήσουν να την ανοίξουν. Αν το όνομα δεν ακολουθεί το συνηθισμένο μοτίβο tun ή tap, το προφίλ χρειάζεται και αντίστοιχο dev-type, γιατί ο τύπος δεν συνάγεται ποτέ από μια συμβολοσειρά. Μια συσκευή TAP δεν είναι συσκευή TUN με άλλη ετικέτα: η προσάρτηση της λάθος συσκευής είτε αποτυγχάνει εντελώς είτε παράγει σύνδεσμο που μεταφέρει πλαίσια που κανείς δεν περιμένει. Ελέγξτε τον τύπο πριν από οτιδήποτε άλλο, αφού κάθε επόμενος έλεγχος προϋποθέτει ότι τα δύο μέρη συμφωνούν γι' αυτόν. Από εκεί και πέρα, επιβεβαιώστε ότι η διεργασία μπορεί πραγματικά να ανοίξει τη συσκευή και όχι απλώς να τη δει.
dev tun1
dev-type tun
Η διεπαφή δικτύου είναι διαφορετικό αντικείμενο από το /dev/net/tun: το ένα είναι σύνδεσμος μέσα σε χώρο ονομάτων, το άλλο είναι η συσκευή χαρακτήρων που χρησιμοποιεί ένα πρόγραμμα χώρου χρήστη για να προσαρτηθεί. Η τεκμηρίωση Linux TUN/TAP περιγράφει αυτή τη διαδρομή προσάρτησης και τους κανόνες ιδιοκτησίας για μόνιμες συσκευές. Ένα κέλυφος root που μπορεί να εκτελέσει το ip link αποδεικνύει μόνο ότι το κέλυφος έχει προνόμια, όχι ότι τα έχει ο δαίμονας. Η ιδιοκτησία του κόμβου συσκευής, το σύνολο δυνατοτήτων της υπηρεσίας και ο χρήστης κάτω από τον οποίο τρέχει πρέπει όλα να συμφωνήσουν πριν πετύχει το άνοιγμα.
Μια συσκευή που υπάρχει και δεν ανοίγει είναι πρόβλημα ιδιοκτησίας, όχι δρομολόγησης. Αντιμετωπίστε την ως τέτοιο κατά την αποσφαλμάτωση, αλλιώς το απόγευμα θα χαθεί διαβάζοντας πίνακες δρομολόγησης που ποτέ δεν ήταν το πρόβλημα.
Ποιος διαμορφώνει τον σύνδεσμο: δύο μοντέλα ιδιοκτησίας
Στο πρώτο μοντέλο το OpenVPN διαμορφώνει διευθύνσεις και διαδρομές ως μέρος της ανόδου της σύνδεσης. Αυτή είναι η προεπιλεγμένη συμπεριφορά και η ευκολότερη στην κατανόηση, γιατί ένα στοιχείο δημιουργεί την κατάσταση και την αφαιρεί ξανά. Στο δεύτερο μοντέλο ένας εξωτερικός διαχειριστής κατέχει τη διεπαφή και το ifconfig-noexec σταματά το OpenVPN από το να εκτελεί τις εντολές διαμόρφωσης διευθύνσεων και παραδίδει τις παραμέτρους σε σκριπτ. Τότε ο διαχειριστής πρέπει να εφαρμόσει ο ίδιος τη σωστή τοπική διαμόρφωση και τη διαμόρφωση του ομολόγου, που είναι περισσότερη δουλειά από όση υποδηλώνει το όνομα της επιλογής. Η επιλογή ανάμεσα στα δύο είναι ερώτημα για το ποιος μπορεί να αλλάξει τον σύνδεσμο όσο αυτός είναι ενεργός.
Το ifconfig-noexec καλύπτει μόνο διευθύνσεις: ο πίνακας δρομολόγησης μένει άθικτος και η διαμόρφωση διαδρομών ανήκει στο route-noexec. Αντιμετωπίστε τις δύο οδηγίες ως ξεχωριστά χειριστήρια με ξεχωριστούς ιδιοκτήτες, γιατί το να ορίσετε το ένα και να υποθέσετε το άλλο είναι κοινή πηγή μισοδιαμορφωμένων συνδέσμων. Διαλέξτε ακριβώς έναν ιδιοκτήτη ανά επίπεδο, τις διευθύνσεις σε ένα μέρος και τις διαδρομές σε ένα μέρος. Ένας διαχειριστής δικτύου και ένας βοηθός VPN που γράφουν και οι δύο διευθύνσεις είναι ο τρόπος με τον οποίο μια αποσύνδεση διαγράφει κατάσταση από την οποία η άλλη πλευρά εξακολουθεί να εξαρτάται.
Εξετάστε τη συσκευή από τον χώρο ονομάτων που έχει σημασία
Εξετάστε τη συσκευή από τον χώρο ονομάτων στον οποίο τρέχει η διεργασία VPN, όχι από αυτόν στον οποίο τυχαίνει να βρίσκεται το κέλυφός σας. Οι δύο εντολές παρακάτω απαντούν σε διαφορετικά ερωτήματα και η διαφορά φαίνεται όταν ένας κεντρικός υπολογιστής βλέπει διεπαφή που ένα κοντέινερ δεν βλέπει. Εκτελέστε τις με τη σειρά που δίνεται, γιατί η δεύτερη έχει νόημα μόνο αφού ξέρετε αν ο σύνδεσμος υπάρχει καθόλου.
ip -details link show dev tun1
ip tuntap show
Η πρώτη εντολή εκτυπώνει τον σύνδεσμο όπως τον βλέπει ο πυρήνας, μαζί με σημαίες και τύπο διεπαφής, και έτσι επιβεβαιώνετε ότι αυτή είναι η συσκευή που εννοούσατε. Η δεύτερη απαριθμεί μόνιμες εγγραφές tun/tap, που υπάρχουν χωρίς να τις κρατά καμία διεργασία. Μια διεπαφή που περιμένει τον προορισμένο ιδιοκτήτη της είναι διαφορετική κατάσταση από ένα ζωντανό τούνελ προσαρτημένο σε άλλο VPN, και μόνο η δεύτερη εξηγεί γιατί αποτυγχάνει η δική σας προσάρτηση. Βρείτε τη διεργασία που κρατά τη συσκευή πριν αλλάξετε οτιδήποτε, αφού μια μόνιμη εγγραφή και μια απασχολημένη διεπαφή έχουν διαφορετικές λύσεις.
Η υποστήριξη πολλαπλών ουρών είναι συγκεκριμένη διάταξη οδηγού με δικές της απαιτήσεις, όχι άδεια σε άσχετες διεργασίες να μοιράζονται μία διεπαφή. Μια ζωντανή συνεδρία άλλου ιδιοκτήτη είναι πρόβλημα συντονισμού και καμία επεξεργασία προφίλ δεν το λύνει.
Δύο διαφορετικά είδη μονιμότητας
Η μονιμότητα στον πυρήνα και το persist-tun περιγράφουν διάρκειες ζωής που συγχέονται εύκολα και στοιχίζουν ακριβά. Μια μόνιμη συσκευή υπάρχει ανεξάρτητα από κάθε διεργασία, οπότε επιβιώνει από μια διακοπή και μπορεί να επαναχρησιμοποιηθεί από την επόμενη εκκίνηση. Το persist-tun διατηρεί πόρους μέσα από υποστηριζόμενες ήπιες επαναφορές στο εσωτερικό μιας διεργασίας OpenVPN, έναν πολύ μικρότερο ορίζοντα. Κανένα από τα δύο δεν υπόσχεται ότι η διακοπή της υπηρεσίας αφήνει διαδρομές και διευθύνσεις στη θέση τους, και μια διεπαφή που παραμένει ορατή δεν είναι απόδειξη λειτουργικής κρυπτογραφημένης συνεδρίας.
Επιβεβαιώστε και το backend, γιατί μια προδημιουργημένη διεπαφή δεν λέει τίποτα για το ποια υλοποίηση θα την ανοίξει. Οι εκδόσεις κοινότητας που φέρουν την άμεση διαδρομή δεδομένων θα προσπαθήσουν να τη χρησιμοποιήσουν, εκτός αν ο σχεδιασμός λέει άλλα. Όπου η έκδοση υποστηρίζει τον διακόπτη, το disable-dco επιλέγει αντ' αυτού τη διαδρομή χώρου χρήστη· παλαιότερες μηχανές και άλλοι πελάτες δεν έχουν τέτοια οδηγία, γι' αυτό κρατήστε τη συνθήκη έκδοσης δίπλα στην επιλογή αντί να υποθέτετε ότι ισχύει.
Τι σπάει όταν δοκιμάζεται μόνο η εκκίνηση
Μια συμφωνία ιδιοκτησίας μπορεί να περάσει το πρώτο τεστ και να αποτύχει στο τελευταίο, γι' αυτό η εκκίνηση είναι από μόνη της φτωχός έλεγχος. Παρατηρήστε αντ' αυτού δύο μεταβάσεις: μια ήπια επαναφορά και μια πλήρη διακοπή που ακολουθείται από εκκίνηση.
systemctl status openvpn-client@lab
ip -details link show dev tun1
Η εκκίνηση είναι η εύκολη περίπτωση: η μονάδα ανεβαίνει, ο σύνδεσμος εμφανίζεται και η έξοδος κατάστασης ονομάζει το προφίλ που φορτώθηκε. Η προσάρτηση είναι η στιγμή που ο δαίμονας ανοίγει τη συσκευή, γι' αυτό εκτελέστε τον έλεγχο συνδέσμου αφού η μονάδα αναφέρει ενεργή και όχι πριν. Αν ο σύνδεσμος υπάρχει ενώ η κατάσταση ακόμη ενεργοποιείται, βλέπετε μια μόνιμη συσκευή στην οποία κανείς δεν έχει προσαρτηθεί ακόμη, όχι ένα λειτουργικό τούνελ. Στείλτε πραγματική κίνηση μέσα από τον σύνδεσμο πριν προχωρήσετε, γιατί μια προσαρτημένη διεπαφή χωρίς χρησιμοποιήσιμη διαδρομή είναι ακόμη αποτυχία.
kill -SIGHUP $(pidof openvpn)
journalctl -u openvpn-client@lab -n 40
systemctl stop openvpn-client@lab
ip -details link show dev tun1
Μια ήπια επαναφορά πρέπει να αφήσει τη συνεδρία χρησιμοποιήσιμη και τους πόρους άθικτους, και αυτή τη δουλειά κάνει το persist-tun. Η πλήρης διακοπή είναι το σημείο όπου ένας εξωτερικός διαχειριστής αποκαλύπτεται: αν ο σύνδεσμος ή οι διευθύνσεις του επιβιώσουν της διακοπής, κάποιος άλλος τα κατέχει, και αυτό είναι είτε η κατάσταση που καταγράψατε είτε το σφάλμα που μόλις βρήκατε. Καταγράψτε και τις δύο παρατηρήσεις δίπλα στο προφίλ, ώστε η επόμενη αλλαγή να ξεκινά από αποδείξεις και όχι από ένα διάγραμμα.