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

Γιατί η σύνδεση το κάνει να λειτουργεί

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

Εκτελέστε το ίδιο προφίλ πριν και μετά τη σύνδεση και παίρνετε δύο διαφορετικά αποτελέσματα από μία διαμόρφωση. Αυτή είναι η υπογραφή μιας εξάρτησης από διαπιστευτήρια, όχι μιας χαλασμένης σήραγγας, και εξηγεί γιατί μια χειροκίνητη δοκιμή σε τερματικό αποδεικνύει λιγότερα απ' ό,τι φαίνεται. Η σήραγγα είναι εντάξει· λείπει αυτό που ξεκλειδώνει το μυστικό της.

Αποφασίστε ποιος ιδιοκτήτης ξεκινά τη σήραγγα

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

systemctl list-unit-files 'openvpn*'
systemctl list-unit-files 'wg-quick*'
nmcli connection show --active
systemctl enable --now wg-quick@wg0

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

Βάλτε το μυστικό εκεί που μια υπηρεσία μπορεί να το διαβάσει

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

Η δελεαστική συντόμευση είναι να κάνετε το αρχείο αναγνώσιμο από όλους μέχρι να εξαφανιστεί το σφάλμα δικαιωμάτων. Αυτό ανταλλάσσει μια αποτυχία εκκίνησης με μια μακρόχρονη έκθεση διαπιστευτηρίων, και είναι το είδος της αλλαγής στην οποία κανείς δεν επιστρέφει. Χρησιμοποιήστε τον μηχανισμό που η ανάπτυξη εμπιστεύεται ήδη: ένα περιορισμένο αρχείο διαπιστευτηρίων, ένα μη κρυπτογραφημένο κλειδί που προστατεύεται από δικαιώματα αρχείου, ή μια σύνδεση σε επίπεδο συστήματος με τη δική της αποθήκη μυστικών.

Δοκιμάστε το γεγονός που συμβαίνει πραγματικά

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

systemctl is-enabled wg-quick@wg0
journalctl -u wg-quick@wg0 -b --no-pager
systemctl status systemd-networkd-wait-online --no-pager

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

Ελέγξτε διαδρομές και DNS, όχι μόνο τη διεπαφή

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

ip -4 route show
resolvectl status
ping -c 3 10.61.0.1
curl -sS --max-time 5 https://internal.example/ -o /dev/null -w '%{http_code}\n'

Αν η διεύθυνση λειτουργεί και το όνομα όχι, το υπόλοιπο πρόβλημα είναι πολιτική DNS και όχι η σήραγγα. Καταγράψτε ποιος ιδιοκτήτης ξεκινά την υπηρεσία και πού ζει το μυστικό, γιατί το επόμενο άτομο που θα επανεκκινήσει αυτό το μηχάνημα θα χρειαστεί και τα δύο γεγονότα.

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