Ποια παρουσία OpenVPN χρησιμοποιεί στην πραγματικότητα το προφίλ PiVPN σου;
Ο βοηθός του PiVPN γράφει αρχεία και τερματίζεται. Ιχνηλάτησε τη μονάδα systemd, την αλυσίδα ρυθμίσεων που φορτώθηκε και το σωστό αρχείο καταγραφής πριν ξαναχτίσεις το τούνελ.
Το PiVPN γράφει μια διαμόρφωση διακομιστή και ένα προφίλ πελάτη και μετά τερματίζεται· δεν γίνεται ποτέ η διεργασία που μεταφέρει την κίνησή σου. Έτσι, μια αποτυχημένη χειραψία, ένας πελάτης που καλεί λάθος τελικό σημείο ή μια υπηρεσία που επιστρέφει στραβά μετά από επανεκκίνηση δεν εξηγούνται από τα μενού του εγκαταστάτη. Αυτά τα συμπτώματα ανήκουν στον δαίμονα OpenVPN που τρέχει τώρα, στη διαμόρφωση που φόρτωσε πραγματικά αυτός ο δαίμονας και στο αρχείο καταγραφής στο οποίο δείχθηκε. Τέσσερις εντολές μόνο ανάγνωσης το ξεκαθαρίζουν συνήθως, και καμία τους δεν αλλάζει τα πιστοποιητικά ή τα κλειδιά σου.
Ο βοηθός και ο δαίμονας είναι διαφορετικά αντικείμενα
Η σύγχυση εξηγείται εύκολα: ένας κατάλογος κρατά το αρχείο που δημιούργησε ο βοηθός, το αρχείο που διαβάζει ο δαίμονας και μερικές φορές ένα παλιό αντίγραφο και των δύο. Ο βοηθός είναι ένα σενάριο προετοιμασίας. Εγκαθιστά πακέτα, γράφει αρχεία μονάδων και εκτυπώνει ένα προφίλ πελάτη, και μετά η δουλειά του τελειώνει. Αυτό που μένει είναι μια εγγραφή στον διαχειριστή υπηρεσιών και μια γραμμή εντολών.
Σε έναν κεντρικό υπολογιστή systemd, ξεκίνα από την ενεργή μονάδα αντί για τη λίστα του καταλόγου. Το όνομα εξαρτάται από τη συσκευασία: οι εικόνες Debian και Raspberry Pi OS συνήθως εκθέτουν ένα στιγμιότυπο προτύπου όπως openvpn-server@server, ενώ οι παλαιότερες εγκαταστάσεις χρησιμοποιούν openvpn@server. Ρώτησε τον διαχειριστή ποια τρέχει αντί να μαντέψεις από ένα όνομα αρχείου.
systemctl list-units --type=service --all | grep -i openvpn
systemctl cat openvpn-server@server
Διάβασε ExecStart= σε αυτή την έξοδο. Ονομάζει το εκτελέσιμο και τις επιλογές που εκκινεί πραγματικά ο διαχειριστής, συμπεριλαμβανομένης οποιασδήποτε --config διαδρομής· ένα αρχείο διαμόρφωσης που βρίσκεται δίπλα και στο οποίο δεν παραπέμπει καμία εντολή δεν είναι μέρος του τούνελ που τρέχει.
Ακολούθησε την αλυσίδα διαμόρφωσης που επέλυσε ο δαίμονας
OpenVPN δεν σαρώνει κατάλογο για ρυθμίσεις. Διαβάζει το αρχείο που περνά με --config, ακολουθεί κάθε config οδηγία μέσα του και μετά εφαρμόζει τις επιλογές της γραμμής εντολών. Το εγχειρίδιο 2.6 περιγράφει αυτή τη σειρά, και έχει σημασία όταν δύο αρχεία διαφωνούν για τη θύρα, τη συσκευή ή την κρυπτογράφηση.
Εμφάνισε πρώτα την πραγματική κλήση και μετά κοίτα τις οδηγίες που καθορίζουν ταυτότητα και προσβασιμότητα. Και οι δύο εντολές είναι μόνο ανάγνωσης και ασφαλείς σε ζωντανό διακομιστή, αν και η δεύτερη εκτυπώνει διαδρομές που ίσως δεν θέλεις σε δημόσιο δελτίο.
systemctl show -p ExecStart --value openvpn-server@server
grep -E '^(config|dev|proto|port|local|log|log-append|status|ca|cert|key|tls-auth|tls-crypt)' /etc/openvpn/server/server.conf
Ένα αρχείο .ovpn σε κατάλογο χρήστη είναι τεχνούργημα πελάτη. Ο δαίμονας του διακομιστή δεν το διαβάζει ποτέ, οπότε η επεξεργασία εκείνου του αρχείου για διόρθωση αποτυχίας χειραψίας στην πλευρά του διακομιστή δεν πετυχαίνει τίποτα.
Οι εγκλείσεις είναι η άλλη παγίδα. Μια γραμμή config τραβά ένα δεύτερο αρχείο του οποίου οι επιλογές επεξεργάζονται εκεί, οπότε μια μεταγενέστερη οδηγία μίας τιμής μπορεί να υπερισχύσει αυτού που φαίνεται να λέει το κύριο αρχείο. Αν το ορατό αρχείο φαίνεται σωστό και ο δαίμονας συμπεριφέρεται ακόμη διαφορετικά, διάβασε το εγκλεισμένο αρχείο πριν αλλάξεις οτιδήποτε.
Ταίριαξε το αρχείο καταγραφής με τη διεργασία, όχι με το σφάλμα που θυμάσαι
Δύο προορισμοί καταγραφής είναι συνηθισμένοι, και μόνο ένας από αυτούς είναι το journal. Με log-append ρυθμισμένο, ο δαίμονας γράφει σε εκείνο το αρχείο και το journal κρατά λίγα πέρα από τις γραμμές εκκίνησης. Χωρίς αυτό, journalctl είναι η πηγή γεγονότων.
journalctl -u openvpn-server@server -n 80 --no-pager
Συσχέτισε μία απόπειρα σύνδεσης με ένα χρονικό παράθυρο. Σημείωσε το τελικό σημείο του πελάτη και μετά διάβασε γεγονότα του διακομιστή από τα ίδια δευτερόλεπτα. Μια χειραψία TLS που δεν φτάνει ποτέ στην ανταλλαγή πιστοποιητικών δείχνει προσβασιμότητα ή ασυμφωνία πρωτοκόλλου, ενώ μια απόρριψη ταυτοποίησης φτάνει αφού οι παράμετροι του τούνελ έχουν ήδη συμφωνηθεί.
Μια παλιά εγγραφή καταγραφής δεν αποδεικνύει τίποτα για ένα προφίλ που κατέβασες πριν από πέντε λεπτά. Αναγέννησε το αρχείο πελάτη, συνδέσου μία φορά και διάβασε μόνο τις γραμμές που εμφανίστηκαν κατά τη διάρκεια εκείνης της απόπειρας.
Κατέγραψε την πρώτη συγκεκριμένη αποτυχία αντί για την τελευταία γενική. Ένα σφάλμα δέσμευσης, μια αναπάντητη εξωτερική ανταλλαγή, μια απόρριψη πιστοποιητικού και μια απόρριψη λογαριασμού σε στέλνουν καθένα σε διαφορετικό επίπεδο, και ένα timeout στο τέλος συχνά κρύβει το χρήσιμο γεγονός από πάνω.
Η ανακατασκευή του τούνελ δεν είναι διαγνωστικό βήμα
Η δελεαστική συντόμευση είναι να στήσεις ένα δεύτερο, απλούστερο τούνελ: στατικό κλειδί, χωρίς πιστοποιητικά, χωρίς πρόσθετη ταυτοποίηση. Συχνά θα συνδεθεί, και αποδεικνύει μόνο ότι δύο κεντρικοί υπολογιστές μπορούν να περάσουν UDP ή TCP μεταξύ τους. Δεν λέει τίποτα για το γιατί αποτυγχάνει η ανάπτυξη με πιστοποιητικά, και αντικαθιστά σιωπηλά το μοντέλο ασφαλείας που σου ζητήθηκε να κρατήσεις.
Το ίδιο ισχύει για την απενεργοποίηση του tls-auth ή του tls-crypt, τη χαλάρωση του verify-x509-name, ή την κατάργηση δεύτερου παράγοντα για να πάρεις πράσινη κατάσταση. Ένα τούνελ που συνδέεται επειδή αφαιρέθηκε η επαλήθευση είναι διαφορετικό σύστημα, όχι διορθωμένο.
Κάνε μία περιορισμένη αλλαγή στο επίπεδο που ονόμασε το αρχείο καταγραφής, επανεκκίνησε την ίδια μονάδα και επανάλαβε τη μία απόπειρα σύνδεσης. Αυτό κρατά τη σύγκριση έντιμη και αφήνει μια αλλαγή που μπορείς να αναστρέψεις.
Τι να παραδώσεις στον επόμενο
Γράψε τέσσερα γεγονότα όσο τα έχεις ακόμη: την έκδοση OpenVPN από openvpn --version, τη μονάδα που είναι ενεργή, την αλυσίδα διαμόρφωσης με τις εγκλείσεις της και το παράθυρο καταγραφής που καλύπτει μία απόπειρα. Αυτά τα τέσσερα μετατρέπουν ένα ασαφές παράπονο σε αναπαραγώγιμη υπόθεση.
Απόκρυψε ευαίσθητα στοιχεία πριν μοιραστείς. Ιδιωτικά κλειδιά, auth-user-pass και άλλα αρχεία, υλικό στατικού κλειδιού και πλήρη πακέτα πελάτη δεν ανήκουν σε δελτίο· τα ονόματα επιλογών και το σχήμα της αλυσίδας αρκούν συνήθως για ένα δεύτερο ζευγάρι μάτια.
Αν η αλυσίδα είναι ακέραιη και το αρχείο καταγραφής δείχνει ακόμη στο δίκτυο, το επόμενο βήμα είναι η διαδρομή μεταξύ πελάτη και διακομιστή αντί για άλλη εγκατάσταση. Αυτό είναι το μόνο κομμάτι της ιστορίας που δεν είχε ποτέ ο βοηθός.