Η σήραγγα είναι ενεργή, το handshake γίνεται κάθε δύο λεπτά και ακριβώς μία διεύθυνση στην άλλη πλευρά απαντά. Τα ping στη διεύθυνση σήραγγας του peer λειτουργούν· τίποτα πίσω της δεν λειτουργεί. Κάποιος διαβάζει τη διαμόρφωση της διεπαφής, βλέπει ένα πρόθεμα κεντρικού υπολογιστή και συμπεραίνει ότι η μάσκα είναι λάθος. Η επέκτασή της σε /24 διορθώνει το ping για λίγο και μετά σπάει κάτι άλλο. Το πρόθεμα δεν ήταν ποτέ η αιτία, και η διαδρομή που έλειπε δεν είναι αυτή που ελέγχει η μάσκα.

Τι δημιουργεί στην πραγματικότητα το πρόθεμα της διεπαφής

Στο Linux, η ανάθεση μιας διεύθυνσης σε μια διεπαφή δημιουργεί μια συνδεδεμένη διαδρομή για αυτό το πρόθεμα. Αν αναθέσετε πρόθεμα κεντρικού υπολογιστή, η συνδεδεμένη διαδρομή καλύπτει μία διεύθυνση. Αν αναθέσετε /24, καλύπτει 256, και καθεμία από αυτές θεωρείται πλέον προσβάσιμη μέσω αυτού του συνδέσμου.

ip -4 addr show dev wg0
ip -4 route show dev wg0
ip route get 10.80.7.1

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

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

Το AllowedIPs είναι δύο κανόνες κάτω από ένα όνομα

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

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

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

Από πού προέρχεται η διαδρομή

Αν χρησιμοποιείς wg-quick, οι διαδρομές δημιουργούνται για σένα από την επιτρεπόμενη λίστα κάθε peer, εκτός αν έχεις ορίσει Table = off και έχεις πάρει τον έλεγχο μόνος σου. Αυτή είναι η τεκμηριωμένη συμπεριφορά του εργαλείου, και είναι ο λόγος που μια διαμόρφωση χωρίς ρητές οδηγίες δρομολόγησης λειτουργεί παρ' όλα αυτά.

sudo wg show wg0 allowed-ips
ip route show | grep wg0
sudo wg-quick strip wg0

Σύγκρινε την επιτρεπόμενη λίστα με τις διαδρομές που υπάρχουν πραγματικά. Ένα peer που επιτρέπει ολόκληρο υποδίκτυο αλλά παρήγαγε μόνο διαδρομή κεντρικού υπολογιστή σημαίνει ότι ο βοηθός δεν εκτελέστηκε ποτέ, ή ότι διαχειρίζεσαι τη διεπαφή απευθείας με τα wg και ip, οπότε τίποτα δεν δημιουργεί διαδρομές για σένα.

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

Ένα ευρύτερο πρόθεμα δεν προσθέτει την καταχώριση του peer

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

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

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

Επιβεβαίωσε και τις δύο κατευθύνσεις πριν αλλάξεις οτιδήποτε

Δούλεψε τα δύο άκρα ξεχωριστά και γράψε τι λέει το καθένα. Στον πελάτη η διαδρομή και η καταχώριση του peer· στον διακομιστή η κατοπτρική εικόνα συν τη δική του διαδρομή επιστροφής:

ip route get 192.168.70.20
sudo wg show wg0 allowed-ips
sudo wg show wg0 latest-handshakes
sudo tcpdump -ni wg0 -c 10

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

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

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