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

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

Τρεις εκκινητές με τρία διαφορετικά εναύσματα

Η πακεταρισμένη υπηρεσία openvpn είναι η παλαιότερη διαδρομή. Το init script της διαβάζει μια λίστα αυτόματης εκκίνησης από /etc/default/openvpn. Αν η λίστα είναι σχολιασμένη ή κενή, το script ξεκινά κάθε διαμόρφωση που βρίσκει σε εκείνον τον κατάλογο αντί για τη μοναδική που προσθέσατε. Ένα αρχείο που προστέθηκε για μία σήραγγα μπορεί να σηκώσει ήσυχα πολλές.

StarterWhat triggers itTypical failure
Init script and templated unitsBoot, plus anything in the autostart listStarts every config, not the one you meant
NetworkManager secondaryActivation of the base Wi-Fi or Ethernet profileNothing happens until that base link comes up
Hand-written unit or wrapperWhatever its WantedBy and ExecStart sayRuns a different binary or environment than your shell

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

Συγκρίνετε το κόστος ρύθμισης και το εύρος

Η διαδρομή του init script κοστίζει μία γραμμή και καλύπτει κάθε διαμόρφωση στο μηχάνημα. Αυτό είναι σωστό για έναν router και λάθος για φορητό που συνδέεται σε διαφορετικά δίκτυα. Η διαδρομή του NetworkManager κοστίζει μια αναζήτηση UUID και δένει τη σήραγγα σε μία βασική σύνδεση. Ανέρχεται στο δίκτυο της εργασίας και μένει κάτω σε δίκτυο ξενοδοχείου.

Μια χειρόγραφη unit κοστίζει περισσότερο και αγοράζει τον περισσότερο έλεγχο, συμπεριλαμβανομένης της σειράς ως προς άλλες υπηρεσίες. Το εύρος είναι ο καθοριστικός παράγοντας. Αν το μηχάνημα έχει ένα δίκτυο και μία σήραγγα, η πακεταρισμένη υπηρεσία είναι έντιμη και προβλέψιμη. Αν η σήραγγα πρέπει να ακολουθεί συγκεκριμένο δίκτυο Wi-Fi, το δευτερεύον είναι το μόνο από τα τρία που εκφράζει αυτή τη συνθήκη χωρίς πρόσθετο scripting.

Διαλέξτε έναν ιδιοκτήτη και αφαιρέστε τους άλλους

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

# who is configured to start something?
grep -v '^#' /etc/default/openvpn
systemctl list-units 'openvpn*'
nmcli -g connection.secondaries connection show 'Work Wi-Fi'

# NetworkManager: attach the tunnel to the base link by UUID
TUNNEL=$(nmcli -g UUID connection show 'Corp Tunnel')
nmcli connection modify 'Work Wi-Fi' +connection.secondaries "$TUNNEL"

Αν η πακεταρισμένη διαδρομή είναι αυτή που αποσύρεται, κάντε το με τη σωστή σειρά: θέστε το AUTOSTART σε none, εκτελέστε το systemctl daemon-reload ώστε οι παραγόμενες unit να πάρουν τη νέα λίστα και μετά απενεργοποιήστε το στιγμιότυπο προτύπου που δεν θέλετε πια. Αν παραλείψετε την επαναφόρτωση, οι παλιές unit μένουν ενεργές και φαίνεται σαν να μην είχε κανένα αποτέλεσμα η αλλαγή.

Μια διακοπή που κολλάει είναι ξεχωριστό πρόβλημα με οριοθετημένη απάντηση. Το TimeoutStopSec περιορίζει πόσο περιμένει το systemd πριν στείλει SIGKILL. Το drop-in είναι το σωστό σημείο για να το ορίσετε, γιατί η επεξεργασία της πακεταρισμένης unit χάνει την αλλαγή στην επόμενη αναβάθμιση.

Επαληθεύστε τι ξεκίνησε πραγματικά

Κάντε επανεκκίνηση και διαβάστε τα στοιχεία αντί να εμπιστευτείτε το αρχείο ρυθμίσεων. Η unit που κατέχει τη σήραγγα θα δείξει ενεργή κατάσταση και χρονική σφραγίδα εκκίνησης που ταιριάζει με την εκκίνηση, και η διεπαφή VPN θα υπάρχει πριν συνδεθείτε.

systemctl is-enabled openvpn-client@office
systemctl status openvpn-client@office --no-pager
nmcli -f GENERAL.STATE,connection.secondaries connection show 'Work Wi-Fi'
ip -brief link show tun0

Ένας ακόμη έλεγχος ανήκει εδώ: επιβεβαιώστε ότι το ExecStart της unit δείχνει στο εκτελέσιμο που νομίζετε. Ένας τοπικά μεταγλωττισμένος πελάτης ή ένα πακέτο snap χρειάζεται συχνά ρητή διαδρομή ή περιτύλιγμα snap run, γιατί το systemd δεν κληρονομεί τη σειρά αναζήτησης του κελύφους σας. Η σύγκριση του command -v openvpn με το αρχείο της unit το λύνει σε δευτερόλεπτα.

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

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