Το OpenVPN δεν ξεκινά χωρίς σφάλμα; Δείτε το journal
Μια σιωπηλή έξοδος στο Ubuntu συνήθως σημαίνει ότι το μήνυμα πήγε αλλού ή ότι η μονάδα δεν εκτελέστηκε ποτέ. Ελέγξτε πρώτα το όνομα στιγμιοτύπου, το journal και το δυαδικό αρχείο.
Η εντολή επιστρέφει, η υπηρεσία εμφανίζεται ως αποτυχημένη και τίποτα που να μοιάζει με εξήγηση δεν φτάνει στο τερματικό. Αυτή η σιωπή είναι το σύμπτωμα που οι άνθρωποι περιγράφουν ως «το OpenVPN δεν ξεκινά» και σχεδόν ποτέ δεν σημαίνει ότι το πρόγραμμα πέθανε χωρίς να πει τίποτα. Σημαίνει ότι το μήνυμα πήγε σε ένα κανάλι που δεν διαβάζατε ή ότι αυτό που ξεκινήσατε δεν ήταν αυτό που ρυθμίσατε. Και οι δύο περιπτώσεις διαγιγνώσκονται σε λιγότερο από ένα λεπτό μόλις πάψετε να θεωρείτε το προφίλ ύποπτο.
Τέσσερα σημεία απορροφούν την έξοδο: το journal της μονάδας, το πρόσθετο που κατέχει τη σύνδεση, το άλλο άκρο της σήραγγας και ένα διαφορετικό δυαδικό από αυτό που νομίζετε ότι εκτελείται. Κάθε ένα έχει τον δικό του έλεγχο.
Η σιωπή σημαίνει ότι δεν παρακολουθούσατε το σωστό κανάλι
Μια κλήση στο προσκήνιο εκτυπώνει στο τερματικό σας. Μια μονάδα εκτυπώνει στο journal, και μια αποτυχημένη μονάδα μπορεί να τερματιστεί πριν γράψει οτιδήποτε αν η αποτυχία βρίσκεται στο πώς ξεκίνησε και όχι σε αυτό που της ειπώθηκε. Η διάκριση έχει σημασία: καμία καταχώριση στο journal σημαίνει ότι η διεργασία δεν εκτελέστηκε ποτέ πραγματικά, ενώ μία καταχώριση που ακολουθείται από τερματισμό σημαίνει ότι εκτελέστηκε και απέρριψε κάτι.
systemctl status openvpn-client@office
journalctl -u openvpn-client@office -b --no-pager
Προσθέστε systemctl show -p Result -p ExecMainStatus openvpn-client@office για να ξεχωρίσετε μια καθαρή έξοδο από ένα σήμα. Μια κατάσταση 1 με Result=exit-code είναι απόφαση του προγράμματος· Result=signal ή ένα timeout δείχνουν αντίθετα το περιβάλλον, και καμία ποσότητα επεξεργασίας προφίλ δεν θα το αλλάξει. Καταγράψτε και τις δύο τιμές πριν επανεκκινήσετε οτιδήποτε, γιατί μια επανεκκίνηση σβήνει την παροδική κατάσταση που τις παρήγαγε.
Το όνομα στιγμιοτύπου είναι μέρος της διαδρομής
Η πακεταρισμένη μονάδα προτύπου δεν δέχεται διαδρομή αρχείου. Δέχεται όνομα στιγμιοτύπου, και αυτό το όνομα προσαρτάται σε έναν κατάλογο για να βρεθεί το προφίλ: office επιλύεται σε /etc/openvpn/client/office.conf στη συσκευασία Debian και Ubuntu. Ένα αρχείο που ονομάζεται office-v2.conf ξεκινώντας ως @office δεν διαβάζεται ποτέ, και η μονάδα τερματίζεται ήσυχα επειδή από την οπτική της γωνία δεν υπήρχε τίποτα να κάνει. Ο κατάλογος αναζήτησης διαφέρει μεταξύ λειτουργίας πελάτη και διακομιστή, οπότε το ίδιο λάθος δείχνει εντελώς αλλού όταν αλλάζετε πρότυπο.
Αυτή η αναντιστοιχία είναι η πιο συνηθισμένη αιτία της σιωπηλής αποτυχίας, και είναι αόρατη στο προφίλ επειδή το προφίλ είναι εντάξει. Καταγράψτε τι υπάρχει πραγματικά και συγκρίνετε τα δύο ονόματα χαρακτήρα προς χαρακτήρα, συμπεριλαμβανομένης οποιασδήποτε επέκτασης που περιμένει η συσκευασία.
ls -l /etc/openvpn/client/
systemctl list-units 'openvpn*' --all
Αν η μονάδα είναι ενεργοποιημένη αλλά δεν εμφανίζεται κανένα στιγμιότυπο, η ίδια η ενεργοποίηση μπορεί να αναφέρεται σε ένα όνομα που μετονομάστηκε αργότερα. Η εκ νέου ενεργοποίηση του σωστού στιγμιοτύπου συνήθως αρκεί, και το παλιό αρχείο μονάδας που έμεινε αξίζει να διαγραφεί ώστε να μην μπερδέψει τον επόμενο άνθρωπο. Ένα ξεχασμένο αρχείο μονάδας είναι ένα μικρό πράγμα που κοστίζει σε κάποιον μια ώρα αργότερα.
Όταν το πρόσθετο κατέχει τη σήραγγα, το τερματικό δεν βλέπει τίποτα
Μια σύνδεση που ξεκινά από το applet της επιφάνειας εργασίας ανήκει στο NetworkManager, και η έξοδος του OpenVPN πηγαίνει στο journal αυτής της υπηρεσίας και όχι σε κάποιο κέλυφος που έχετε ανοιχτό. Η εκτέλεση του πελάτη με το χέρι και η μη εμφάνιση τίποτα είναι αναμενόμενη σε αυτή τη διάταξη, γιατί η διεργασία που εκτελέστηκε με το χέρι δεν είναι αυτή που μεταφέρει τη σύνδεση.
Αναζητήστε στο journal την υπηρεσία που το κατέχει και μετά αναπαράγετε την ανάλυση με λεπτομέρεια που μπορείτε να διαβάσετε. Οι δύο παρακάτω εντολές κοιτούν διαφορετικούς ιδιοκτήτες της ίδιας αποτυχίας.
journalctl -b -u NetworkManager --no-pager | grep -i -A3 openvpn
openvpn --config /etc/openvpn/client/office.conf --verb 4 --log /tmp/ovpn.log
Η αυτόνομη εκτέλεση είναι για την ανάγνωση μηνυμάτων, όχι για την αντικατάσταση της διαχειριζόμενης σύνδεσης, και τα δύο διαφέρουν μετά: η ενσωμάτωση DNS, οι διαδρομές και η διάρκεια ζωής ανήκουν στο πρόσθετο. Η διόρθωση ενός σφάλματος ανάλυσης στην αυτόνομη εκτέλεση δεν διορθώνει αυτόματα την επίλυση ονομάτων όταν αναλαμβάνει το applet, οπότε κρατήστε τις δύο παρατηρήσεις χωριστά.
Δύο δυαδικά, ένα PATH
Μια χειροκίνητη έκδοση εγκατεστημένη κάτω από /usr/local κερδίζει σε κλήση κελύφους, επειδή /usr/local/sbin προηγείται του /usr/sbin στο προεπιλεγμένο PATH του Ubuntu. Μια μονάδα δεν χρησιμοποιεί το PATH σας· εκτελεί την απόλυτη διαδρομή που είναι γραμμένη στο ExecStart. Έτσι η έκδοση που λειτουργεί στο τερματικό σας και η έκδοση που αποτυγχάνει ως υπηρεσία μπορεί να είναι πραγματικά διαφορετικά προγράμματα.
Συγκρίνετε τα δύο πριν ξαναχτίσετε οτιδήποτε. Η τρίτη εντολή είναι αυτή που κρίνει το επιχείρημα.
command -v openvpn
whereis openvpn
systemctl cat openvpn-client@office | grep ExecStart
Μια ακόμη διαφορά περιβάλλοντος κρύβεται στο ίδιο σημείο. Μια πακεταρισμένη μονάδα βασίζεται σε έναν κατάλογο χρόνου εκτέλεσης κάτω από /run που δημιουργεί το systemd γι’ αυτήν· μια χειρόγραφη μονάδα αντικατάστασης που παραλείπει αυτή τη ρύθμιση μπορεί να αποτύχει πριν ανοίξει ένα μόνο αρχείο, και η αποτυχία μοιάζει με γενική άρνηση χωρίς κανένα μήνυμα OpenVPN.
Αποτυχίες που ο πελάτης δεν μπορεί να αναφέρει
Ορισμένα αποτελέσματα κρίνονται στο απομακρυσμένο άκρο. Μια πύλη που απαντά με κατάσταση HTTP και κλείνει τη σύνδεση σας έχει πει για τη δική της κατάσταση, και το χρήσιμο επόμενο βήμα είναι το log της ή ο λογαριασμός πίσω από το διαπιστευτήριο και όχι τα τοπικά σας αρχεία. Τίποτα τοπικό δεν είναι χαλασμένο σε αυτό το σενάριο, και η επεξεργασία του προφίλ για αντιστάθμιση κάνει την επόμενη διάγνωση δυσκολότερη. Διαβάστε αυτό το log πριν αγγίξετε τη διαμόρφωση του πελάτη.
Μια άλλη σιωπηλή περίπτωση είναι ένας πελάτης που λειτουργεί σωστά. Μια σήραγγα σε λειτουργία πελάτη δεν ακούει ποτέ σε θύρα, οπότε ένας έλεγχος που περιμένει ανοιχτό ακροατή δεν θα αναφέρει τίποτα και θα μοιάζει με αποτυχία. Επιβεβαιώστε ποια λειτουργία ξεκινήσατε πριν βγάλετε συμπέρασμα από μια κενή λίστα θυρών.
Δουλέψτε τα επίπεδα με σειρά: υπάρχει η μονάδα και είναι σωστό το όνομα στιγμιοτύπου, έφτασε κάτι στο journal ή στο αρχείο --log, ποιο δυαδικό και ποιο προφίλ εκτελέστηκαν πραγματικά, και είναι η αποτυχία τοπική ή απομακρυσμένη. Κάθε απάντηση αφαιρεί ένα επίπεδο. Το να ξεκινήσετε από το προφίλ σημαίνει να ξαναγράψετε ένα αρχείο που μπορεί να μην άνοιξε ποτέ.