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

Ζεύξη, διεύθυνση και διαδρομή κινούνται ανεξάρτητα

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

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

Άρα το πρώτο ερώτημα δεν είναι αν άλλαξε το Wi-Fi. Είναι αν άλλαξε η διεύθυνση στην οποία είστε δεσμευμένοι, ή η διαδρομή προς το τελικό σημείο, ενώ η σήραγγα ήταν ενεργή.

Το εξωτερικό socket είναι καρφιτσωμένο σε μια διεύθυνση που μόλις εξαφανίστηκε

Κάθε σήραγγα είναι μια εξωτερική ροή: μια τοπική διεύθυνση και θύρα που μιλά με τη διεύθυνση και τη θύρα του διακομιστή. Στο Linux αυτό είναι ένα socket UDP δεσμευμένο στην παλιά πηγή· όταν αφαιρεθεί η διεπαφή που κρατά τη διεύθυνση, οι αποστολές είτε αποτυγχάνουν με EADDRNOTAVAIL είτε βγαίνουν από τη νέα διεπαφή με πηγή που ο διακομιστής δεν έχει δει ποτέ.

Η απέναντι πλευρά κρατά το δικό της καρφίτσωμα. Ένα SA IKEv2 χωρίς MOBIKE αναγνωρίζεται από το ζεύγος διευθύνσεων, και μια OpenVPN συνεδρία είναι δεμένη στη διεύθυνση του ομολόγου που έμαθε, και μια αντιστοίχιση NAT ανήκει στην ιδιωτική διεύθυνση, τη θύρα και τη δημόσια διεύθυνση που τη δημιούργησαν. Μετακινηθείτε πίσω από άλλο NAT και κάθε απάντηση στέλνεται σε μια αντιστοίχιση που δεν υπάρχει πια. Τίποτα στον υπολογιστή σας δεν είναι λάθος ρυθμισμένο· η πεντάδα δείχνει σε ένα δίκτυο που αφήσατε.

Διαβάστε την κατάσταση πριν θεωρητικολογήσετε:

  • ss -unp δείχνει την τοπική διεύθυνση και θύρα που κρατά πραγματικά κάθε socket σήραγγας.
  • ip route get 203.0.113.10 εκτυπώνει τη διεύθυνση προέλευσης και τη συσκευή που θα χρησιμοποιούσε ο πυρήνας για το τελικό σημείο αυτή τη στιγμή.
  • wg show wg0 endpoints, swanctl --list-sas ή το αρχείο καταγραφής του πελάτη δείχνει τη διεύθυνση ομολόγου με την οποία η απέναντι πλευρά νομίζει ότι μιλά.

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

Τι κάνει κάθε πρωτόκολλο με μια νέα διεύθυνση προέλευσης

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

TunnelRecovery behaviourFailure signature
WireGuardUpdates the peer endpoint when an authenticated packet arrives from a new address; no handshake needed if traffic continues.Handshake current, no return traffic; wg show still lists the old endpoint.
IKEv2/IPsecMOBIKE (RFC 4555) moves the SA to the new address; without it the responder discards packets from an unknown source.DPD or keepalive timeouts, then a full rekey or a dead SA.
OpenVPN over UDP--float accepts a packet from a new source mid-session; otherwise the session stays tied to the original peer address.Idle until ping-restart fires, then a visible reconnect.
OpenVPN over TCPThe tunnel is a byte stream, so a changed source address breaks it outright.Immediate reset and a new connection attempt.

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

Το MOBIKE διαπραγματεύεται, δεν υποτίθεται. Αν ο διακομιστής δεν το προσφέρει, ο πελάτης πρέπει να επανιδρύσει, και αυτό είναι γεγονός που το επιβεβαιώνετε από τη λίστα SA ή το αρχείο καταγραφής και δεν το συμπεραίνετε από έναν περιστρεφόμενο τροχό.

Η προτίμηση διαδρομής καθορίζει τη διαδρομή, όχι το εικονίδιο Wi-Fi

Με τις δύο διεπαφές ενεργές, ο πυρήνας επιλέγει με μετρική και μήκος προθέματος. ip route show default απαριθμεί τους υποψηφίους και ip route get 203.0.113.10 λύνει την πραγματική απόφαση, μαζί με τη διεύθυνση προέλευσης. Μια ενσύρματη προεπιλογή με μετρική 100 και μια ασύρματη με 600 σημαίνουν ότι το τελικό σημείο μετακινείται τη στιγμή που κάθεται το καλώδιο, ενώ κάθε εφαρμογή που άνοιξε socket νωρίτερα κρατά την παλιά της πηγή.

Τα Windows κάνουν το ίδιο με αυτόματες μετρικές διεπαφής, μεροληπτώντας υπέρ της ταχύτητας ζεύξης. Get-NetRoute -DestinationPrefix 0.0.0.0/0 ταξινομεί τους υποψηφίους και Find-NetRoute -RemoteIPAddress 203.0.113.10 επιστρέφει τη διεπαφή και την πηγή που θα διάλεγε ο στοίβα. Ένας πελάτης που δένει το εξωτερικό socket του σε μία διεπαφή συνεχίζει να τη χρησιμοποιεί αφού αναστραφεί η μετρική· αυτό είναι απόφαση δέσμευσης, όχι σφάλμα δρομολόγησης.

Το Android κάνει τον διαχωρισμό ορατό: το ConnectivityManager αναφέρει τα διαθέσιμα δίκτυα και ένα ξεχωριστό προεπιλεγμένο, και μια εφαρμογή VPN που δένει socket σε αντικείμενο Network κρατά αυτή τη δέσμευση μέχρι να την ξαναδένει. Στο macOS, scutil --nwi εκτυπώνει την κύρια διεπαφή και τη σειρά που θα χρησιμοποιούσε το σύστημα.

DNS, MTU και IPv6 κινούνται μαζί με τη σύνδεση

Μια νέα σύνδεση φέρνει νέους επιλυτές. Με systemd-resolved το DNS είναι ανά ζεύξη, resolvectl status δείχνει ποια ζεύξη απαντά σε ένα όνομα, και ένα δίκτυο επισκεπτών που δίνει τον δικό του επιλυτή μπορεί να αφήσει το DNS που έσπρωξε η σήραγγα ανεκμετάλλευτο μέχρι να ξαναγίνει προτιμώμενη η ζεύξη. Μια πύλη σύλληψης το χειροτερεύει: το πρώτο αίτημα HTTPS το απαντά η πύλη και όχι το τελικό σημείο, και ο πελάτης καταγράφει νεκρό διακομιστή.

Το MTU της διαδρομής αλλάζει επίσης. Το Ethernet και το Wi-Fi μεταφέρουν συνήθως 1500 byte, το PPPoE 1492, και οι κινητές ζεύξεις συχνά λιγότερα. Μια σήραγγα που κληρονομεί μικρότερο MTU κολλάει σε μεγάλα πακέτα ενώ τα μικρά αιτήματα περνούν, κάτι που διαβάζεται ως μισοσπασμένη σύνδεση. ping -M do -s 1472 203.0.113.10 στέλνει πακέτο 1500 byte με DF ενεργό· η σιωπή σημαίνει ότι η διαδρομή είναι μικρότερη απ’ ό,τι υποθέσατε.

Το IPv6 είναι το άλλο μισό. Ένα δίκτυο που δίνει νέο πρόθεμα αλλάζει την πηγή που θα χρησιμοποιούσε ένας πελάτης διπλής στοίβας, και μια σήραγγα μόνο v4 αφήνει την κίνηση v6 έξω από αυτήν μέχρι να προλάβει η πολιτική. ip -6 route show default και ip -6 addr show απαντούν αν η νέα ζεύξη έχει καθόλου διαδρομή v6.

Αναπαράγετε τη μετάβαση αντί να την περιγράφετε

Διαλέξτε ένα αβλαβές αίτημα και τρέξτε τις ίδιες τρεις εντολές εκατέρωθεν της αλλαγής: ip -br addr, ip route show default, ip route get 203.0.113.10. Μετά παρατηρήστε αν η σήραγγα εκπέμπει ακόμη πακέτα - tcpdump -ni any udp port 51820 για το WireGuard, την αντίστοιχη θύρα για οτιδήποτε άλλο. Πακέτα που φεύγουν από την παλιά πηγή σημαίνουν πρόβλημα δέσμευσης. Πακέτα από τη νέα πηγή χωρίς απάντηση σημαίνουν την απέναντι πλευρά ή το NAT στη μέση.

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

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

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