Χειραψία ενεργή, διεύθυνση χαμένη: τρεις καταστάσεις του WireGuard
Μια πρόσφατη χειραψία αποδεικνύει ότι ο ομότιμος απάντησε, όχι ότι η διεπαφή κρατά τη διεύθυνσή της ή ότι το επόμενο πακέτο παίρνει το επιθυμητό ζεύξη ανόδου.
Το WireGuard μπορεί να έχει φρέσκια χειραψία και καμία διεύθυνση ταυτόχρονα, και αυτή η κατάσταση είναι συνεπής, όχι αντιφατική. Η χειραψία είναι γεγονός του ομότιμου, η διεύθυνση ανήκει στη διεπαφή, και η διαδρομή αποφασίζει από ποιο ζεύξη ανόδου φεύγει ένα πακέτο. Τρία επίπεδα, τρεις ιδιοκτήτες, και καθένα μπορεί να αποτύχει ενώ τα άλλα δύο φαίνονται υγιή.
Το να τα διαβάζουμε ως μία κατάσταση είναι αυτό που μετατρέπει μια διάγνωση δύο λεπτών σε ένα ολόκληρο απόγευμα επανεκκίνησης υπηρεσιών.
Η χειραψία είναι γεγονός του ομότιμου, όχι γεγονός διευθυνσιοδότησης
Η χειραψία του WireGuard αποδεικνύει ότι ο ρυθμισμένος ομότιμος απάντησε με έγκυρο κλειδί και ότι τα κλειδιά συνεδρίας είναι τρέχοντα. Δεν λέει τίποτα για την τοπική διεύθυνση στη διεπαφή, ούτε για το αν κάποια διαδρομή δείχνει εκεί. Η διεύθυνση ανατίθεται από έναν βοηθό ή έναν διαχειριστή δικτύου, ενώ η διαμόρφωση του πρωτοκόλλου ονομάζει μόνο ομότιμους και κλειδιά. Η σύγχυση των δύο είναι ο τρόπος με τον οποίο μια υγιής χειραψία διαβάζεται ως τούνελ που λειτουργεί.
Γι' αυτό το wg show μπορεί να αναφέρει χειραψία ηλικίας δευτερολέπτων σε μια διεπαφή που δεν μπορεί να δεχτεί ούτε ένα πακέτο από μια εφαρμογή.
Ένας διαχειριστής που δημιουργεί ξανά τη διεπαφή μπορεί να ρίξει τη διεύθυνση χωρίς να αγγίξει τη διαμόρφωση του ομότιμου, και η επόμενη χειραψία πετυχαίνει αμέσως επειδή τα κλειδιά δεν άλλαξαν ποτέ. Η γραμμή του αρχείου καταγραφής για επιτυχημένη χειραψία είναι ακριβής και άσχετη με τη βλάβη.
| Observation | Which layer it belongs to | Wrong conclusion it invites |
|---|---|---|
| Handshake a few seconds old | Peer and keys | The tunnel is usable for application traffic |
Address present on wg0 | Interface configuration | Traffic actually egresses through it |
Route points at wg0 | Forwarding table | The outer packet uses the intended uplink |
Η διεύθυνση της διεπαφής έχει τον δικό της ιδιοκτήτη
Μια διεύθυνση στη συσκευή τούνελ μπορεί να προέλθει από τη γραμμή Address ενός βοηθού, από έναν πελάτη DHCP που τρέχει στη διεπαφή, ή από έναν δαίμονα διαχείρισης που τη δημιουργεί κατά τη σύνδεση. Όποιο κι αν είναι, αυτό το στοιχείο κατέχει τη διεύθυνση και θα την επαναφέρει ή όχι σύμφωνα με τη δική του λογική. Η ανάγνωση της διεύθυνσης χωρίς να ονομάσεις τον ιδιοκτήτη της σε αφήνει ανίκανο να εξηγήσεις γιατί εξαφανίστηκε.
Δύο ιδιοκτήτες σε μία διεπαφή είναι η κλασική βλάβη. Η εκκίνηση ενός βοηθού και ενός διαχειριστή δικτύου επιφάνειας εργασίας πάνω στην ίδια συσκευή παράγει έναν αγώνα όπου ο ένας αφαιρεί αυτό που μόλις ρύθμισε ο άλλος, και το τελικό σημείο συνεχίζει να απαντά σε όλη τη διάρκεια.
Διάλεξε έναν ιδιοκτήτη και άφησε το άλλο εργαλείο να παρατηρεί αντί να διαχειρίζεται. Αυτή η απόφαση αξίζει να καταγραφεί, γιατί το σύμπτωμα εμφανίζεται εβδομάδες αργότερα και μοιάζει με τυχαία απώλεια διεύθυνσης.
Μια διαδρομή διαλέγει ζεύξη ανόδου, όχι η διεπαφή
Μια εσωτερική διαδρομή που δείχνει στο wg0 αποφασίζει ότι η κίνηση μπαίνει στο τούνελ. Μια ξεχωριστή απόφαση στέλνει τα κρυπτογραφημένα εξωτερικά πακέτα προς τον ομότιμο, και σε έναν υπολογιστή με πολλά ζεύξεις ανόδου αυτή η απόφαση προέρχεται από τον πίνακα προώθησης και τους κανόνες πολιτικής. Μια περιαγωγή Wi-Fi μπορεί να αλλάξει την εξωτερική διαδρομή χωρίς να αγγίξει την εσωτερική διεύθυνση.
Έτσι, ένα τούνελ που λειτουργεί και ένας ομότιμος που δεν είναι προσβάσιμος είναι συμβατές καταστάσεις, όπως και ένας σωστός ομότιμος με σπασμένη εσωτερική διαδρομή. Οι τρεις παρατηρήσεις πρέπει να ληφθούν μαζί, την ίδια στιγμή, αλλιώς η σύγκριση είναι άνευ νοήματος.
Σύγκρινε τις τρεις καταστάσεις σε ένα πέρασμα
Τρεις εντολές μόνο για ανάγνωση απαντούν στις τρεις ερωτήσεις με τη σειρά που απομονώνει τη βλάβη γρηγορότερα. Εκτέλεσέ τις χωρίς να αλλάξεις τίποτα ανάμεσά τους.
ip address show dev wg0
ip route get 10.80.0.1
wg show wg0 latest-handshakes transfer
Η πρώτη δείχνει αν η διεπαφή έχει καθόλου διεύθυνση, και η δεύτερη δείχνει ποια συσκευή θα χρησιμοποιούσε τώρα ένας συγκεκριμένος προορισμός. Η τρίτη αναφέρει την ώρα της τελευταίας χειραψίας και τους μετρητές μπάιτ, και είναι η μόνη από τις τρεις που περιγράφει τον ομότιμο και όχι τον τοπικό υπολογιστή.
Διάβασε τους μετρητές καθώς και τη χρονική σήμανση. Μια χειραψία που ανανεώνεται συνεχώς ενώ η μεταφορά μένει επίπεδη σημαίνει ότι ο ομότιμος απαντά αλλά τίποτα χρήσιμο δεν περνά, κάτι που δείχνει σε δρομολόγηση ή ACL και όχι σε κλειδιά. Μια χρονική σήμανση που σταματά να προχωρά ενώ υπάρχει διεύθυνση δείχνει προς τα πάνω αντίθετα. Και οι δύο αναγνώσεις προέρχονται από την ίδια γραμμή εξόδου, και καμία δεν φαίνεται αν ελέγχεις μόνο ότι υπάρχει χειραψία.
Διόρθωσε τη συγκεκριμένη κατάσταση που είναι λάθος και μετά δοκίμασε ξανά την εφαρμογή και όχι το τούνελ. Μια πρόσφατη χειραψία είναι απόδειξη για τον ομότιμο, και η απόδειξη για τον ομότιμο δεν είναι απόδειξη ότι το επόμενο αίτημα από το πρόγραμμα περιήγησής σου θα βρει διεύθυνση, διαδρομή και ζεύξη ανόδου που λειτουργεί. Το εγχειρίδιο του wg-quick λέει ρητά ποια από αυτά ρυθμίζει ο βοηθός και ποια ανήκουν στο πρωτόκολλο.