Το WireGuard λειτουργεί μόνο αφού στείλει πρώτα ο διακομιστής: γνώση του τελικού σημείου
Η επιτυχία που εξαρτάται από την κατεύθυνση σημαίνει συνήθως ότι ο ένας ομότιμος δεν έμαθε ποτέ τη διεύθυνση του άλλου. Συγκρίνετε τα τελικά σημεία και μετά ελέγξτε αν έληξε μια αντιστοίχιση μετάφρασης.
Το τούνελ φαίνεται να λειτουργεί μόνο αφού ο διακομιστής στείλει πρώτα κάτι. Ξεκινήστε από τον πελάτη και δεν συμβαίνει τίποτα, περιμένετε λίγα δευτερόλεπτα, δοκιμάστε ξανά και πετυχαίνει. Η συνήθης διάγνωση είναι ένα χαλασμένο NAT, και η συνήθης διάγνωση είναι λάθος. Αυτό που άλλαξε είναι ότι ο ένας ομότιμος έμαθε πού βρίσκεται ο άλλος.
Γνώση του τελικού σημείου, όχι προσβασιμότητα
Ένας ομότιμος του WireGuard δεν ξεκινά χειραψία μέχρι να μάθει πού να τη στείλει. Η διαμόρφωση το παρέχει ως τελικό σημείο από διεύθυνση και θύρα, και η τρέχουσα κατάσταση παρακολουθεί το τελικό σημείο στο οποίο πιστεύει αυτή τη στιγμή.
Το wg show εμφανίζει και τις δύο πλευρές αυτής της εικόνας, και ένας ομότιμος χωρίς τελικό σημείο στην έξοδο δεν μπορεί να ξεκινήσει τίποτα, όσο σωστό κι αν είναι το δημόσιο κλειδί του και τα επιτρεπόμενα προθέματα. Συγκρίνετε την άποψη του πελάτη με εκείνη του διακομιστή πριν αλλάξετε οποιονδήποτε κανόνα, γιατί οι δύο συχνά διαφωνούν για το ποιος ξέρει τι.
Πώς ένας ομότιμος μαθαίνει ένα τελικό σημείο
Το WireGuard είναι σκόπιμα ήσυχο. Όταν ένα σωστά πιστοποιημένο πακέτο φτάνει από διεύθυνση που ο ομότιμος δεν περίμενε, η υλοποίηση ενημερώνει το τελικό σημείο αυτού του ομοτίμου στη νέα πηγή, και έτσι λειτουργεί η περιαγωγή σε φορητό υπολογιστή που αλλάζει δίκτυα. Αυτή η συμπεριφορά εξηγεί την εξάρτηση από την κατεύθυνση: αν ο διακομιστής στείλει πρώτος και το πακέτο του φτάσει στον πελάτη, ο πελάτης μαθαίνει την τρέχουσα διεύθυνση του διακομιστή και μπορεί να απαντήσει. Μέχρι τότε δεν έχει πού να στείλει. Ο μηχανισμός είναι πιστοποιημένη περιαγωγή και όχι μια συντόμευση εμπιστοσύνης κατά την πρώτη χρήση, επειδή το πακέτο έπρεπε να είναι έγκυρο πριν μετακινηθεί το τελικό σημείο.
Η τεκμηρίωση εργαλείων για το wg περιγράφει αυτή την ενημέρωση, και αξίζει μια ανάγνωση αν σκοπεύετε να σχεδιάσετε γύρω από αυτό.
Η μετάφραση με κατάσταση προσθέτει τη δική της κατεύθυνση
Όπου το UDP περνά από πύλη που μεταφράζει, η πύλη δημιουργεί κατάσταση για το πρώτο πακέτο που βλέπει. Το RFC 4787 περιγράφει αυτή τη συμπεριφορά και τα χρονικά όρια που τελικά αφαιρούν την αντιστοίχιση. Μια ανενεργή αντιστοίχιση λήγει, και ένα εισερχόμενο πακέτο από την απομακρυσμένη πλευρά απορρίπτεται τότε από την πύλη πριν φτάσει στον κεντρικό υπολογιστή. Ένα τούνελ που δούλευε όλο το πρωί σταματά να απαντά το απόγευμα ακριβώς για αυτόν τον λόγο.
Αυτός είναι ένας δεύτερος και ανεξάρτητος μηχανισμός που παράγει το ίδιο σύμπτωμα κατεύθυνσης. Και η γνώση του τελικού σημείου και η κατάσταση μετάφρασης πρέπει να είναι σωστές, και η διόρθωση του ενός δεν διορθώνει το άλλο.
Διαμορφώστε την κατεύθυνση που θέλετε πραγματικά
Για έναν πελάτη που πρέπει να ξεκινά τη σύνδεση, βάλτε το τελικό σημείο του διακομιστή στο τμήμα ομοτίμων του πελάτη και κρατήστε το εκεί. Το να βασίζεστε στο ότι ο διακομιστής θα στείλει πρώτος σημαίνει να βασίζεστε σε μια σύμπτωση στη σειρά της κίνησης που θα αλλάξει σε ένα ήσυχο δίκτυο. Η διαμόρφωση πρέπει να δηλώνει την επιδιωκόμενη κατεύθυνση, όχι να την ανακαλύπτει.
Για έναν ομότιμο πίσω από μετάφραση που πρέπει να παραμένει προσβάσιμος, ενεργοποιήστε ένα επίμονο keepalive σε εκείνη την πλευρά. Ένα keepalive κάθε 25 δευτερόλεπτα είναι η συνήθης αρχική τιμή, και ο σκοπός του είναι να κρατά την αντιστοίχιση ανοιχτή και όχι να δοκιμάζει το τούνελ. Επιλέξτε μία πλευρά να το φέρει, γιατί η ενεργοποίηση και στις δύο διπλασιάζει την κίνηση και τον θόρυβο των αρχείων καταγραφής χωρίς να βελτιώνει το αποτέλεσμα.
Συγκρίνετε την κατάσταση πριν και μετά το έναυσμα
Καταγράψτε τις δύο όψεις τη στιγμή που αποτυγχάνει και μετά ξανά αφού στείλει ο διακομιστής. Η πρώτη εντολή δείχνει τελικά σημεία και την ηλικία της χειραψίας. Η δεύτερη δείχνει αν υπάρχει καταχώρηση μετάφρασης για τη θύρα. Η καταγραφή δείχνει ποια κατεύθυνση πέρασε πραγματικά από το καλώδιο, και ο έλεγχος διαδρομής επιβεβαιώνει ότι ο πελάτης δεν στέλνει αυτή την κίνηση κάπου εντελώς αλλού.
wg show conntrack -L -p udp 2>/dev/null | grep 51820 tcpdump -ni any -c 20 'udp port 51820' ip route get 198.51.100.7
Σημειώστε τη στήλη του τελικού σημείου και την καταχώρηση μετάφρασης μαζί. Ένας ομότιμος χωρίς τελικό σημείο και μια πύλη χωρίς αντιστοίχιση είναι δύο διαφορετικές βλάβες. Μόνο τη μία από αυτές τη διορθώνει ένα keepalive.