Γιατί ένα kill switch ρίχνει την κίνηση όταν αλλάζετε διακομιστή
Γιατί ένα kill switch μπλοκάρει την κίνηση κατά την αλλαγή διακομιστή, τι κάνει ο πελάτης σε αυτό το διάστημα και πώς ξεχωρίζετε ένα φυσιολογικό κενό από ένα κολλημένο μπλοκάρισμα.
Διαλέγετε έναν διακομιστή που φαίνεται πιο κοντά, πατάτε σύνδεση και το πρόγραμμα περιήγησης σταματά να φορτώνει πριν στηθεί η νέα σήραγγα. Το εικονίδιο γυρίζει σε κατάσταση σύνδεσης και μένει εκεί όσο κάθε καρτέλα λήγει. Αυτή η παύση είναι συνήθως το kill switch που δουλεύει όπως σχεδιάστηκε: η κίνηση μπλοκάρεται όσο ο πελάτης δεν έχει σήραγγα για να τη στείλει. Το αν η παύση είναι αποδεκτή εξαρτάται από το τι κάνει ο πελάτης σε αυτά τα δευτερόλεπτα και από το αν το μπλοκάρισμα αίρεται όταν λέει ότι αίρεται.
Τι κάνει ο πελάτης ανάμεσα σε δύο διακομιστές
Η αλλαγή τελικού σημείου είναι πολλά βήματα, όχι ένας διακόπτης. Ο πελάτης γκρεμίζει την τρέχουσα σήραγγα, ενημερώνει τους κανόνες φραγής του, επιλύει το νέο τελικό σημείο και το φτάνει έξω από τη σήραγγα, έπειτα εγκαθιστά τις νέες διαδρομές και αίρει το μπλοκάρισμα. Το κενό που νιώθετε βρίσκεται ανάμεσα στο πρώτο και το τελευταίο βήμα.
Η σειρά εδώ μετράει περισσότερο από την ταχύτητα. Αν οι κανόνες φραγής μπουν πριν από την εξαίρεση για το νέο τελικό σημείο, ο πελάτης δεν μπορεί να ολοκληρώσει τη χειραψία και μένει σε σύνδεση μέχρι να λήξει ο χρόνος. Αν η εξαίρεση είναι αντίγραφο της διεύθυνσης του παλιού διακομιστή, η νέα χειραψία μοιάζει με οποιοδήποτε άλλο εξερχόμενο πακέτο και απορρίπτεται. Και οι δύο περιπτώσεις φαίνονται ίδιες από το πρόγραμμα περιήγησης, γι' αυτό μια αλλαγή που ανακάμπτει μετά από έξι δευτερόλεπτα και μία που δεν ανακάμπτει ποτέ μπορεί να έχουν την ίδια αιτία.
Το νέο τελικό σημείο χρειάζεται μια τρύπα στο μπλοκάρισμα
Για να στηθεί η σήραγγα, ο πελάτης πρέπει να στέλνει πακέτα στη διεύθυνση και τη θύρα του νέου διακομιστή μέσω της φυσικής διεπαφής, για παράδειγμα UDP 51820 σε ένα τυπικό προφίλ WireGuard ή 1194 και 443 για OpenVPN, ό,τι κι αν ορίζει το δικό σας προφίλ. Αυτή η κίνηση δεν είναι μέσα στη σήραγγα που πρόκειται να δημιουργηθεί, οπότε ένα μπλοκάρισμα για όλη τη συσκευή την καταπίνει εκτός αν υπάρχει αντίστοιχος κανόνας άδειας.
Τα προφίλ που βασίζονται σε όνομα κεντρικού υπολογιστή προσθέτουν δεύτερη απαίτηση: την ίδια την αναζήτηση. Αν ο πελάτης επιλύσει το τελικό σημείο πριν ανέβει το μπλοκάρισμα, μπορεί να χρησιμοποιήσει διεύθυνση από την προσωρινή μνήμη, αλλά όταν το προφίλ αλλάξει διευθύνσεις ή η καταχώριση γίνει παρωχημένη, η χειραψία κατευθύνεται σε διεύθυνση που ο κανόνας άδειας δεν καλύπτει. Το IPv6 το κάνει ορατό, γιατί ένα τελικό σημείο διπλής στοίβας μπορεί να δημοσιεύει και εγγραφή A και AAAA, και ένας κανόνας άδειας που καλύπτει μόνο τη διεύθυνση v4 αφήνει τον πελάτη να ξαναδοκιμάζει σε μια διεύθυνση v6 που είναι μπλοκαρισμένη.
Τα ονόματα των επιλογών και οι προεπιλογές διαφέρουν ανά πελάτη και έκδοση, γι' αυτό διαβάστε τη τεκμηριωμένη λίστα για τον δικό σας αντί να μαντεύετε από στιγμιότυπα οθόνης. Η αναφορά ρυθμίσεων του OpenVPN Connect στο openvpn.net/connect-docs/app-settings-windows είναι ένα παράδειγμα για το πώς ένας πελάτης περιγράφει τις επιλογές φραγής και διαχωρισμένης σήραγγας.
Το fail-closed είναι μηχανή καταστάσεων, όχι διακόπτης
Οι περισσότεροι πελάτες εκφράζουν το μπλοκάρισμα ως πολιτική τείχους προστασίας σε τρεις καταστάσεις: σήραγγα ενεργή, με την κίνηση να περνά από τη σήραγγα και κανένα μπλοκάρισμα· σήραγγα ανενεργή, με το μπλοκάρισμα ενεργό· και μετάβαση, με το μπλοκάρισμα ενεργό συν προσωρινές εξαιρέσεις για το τελικό σημείο. Στην τρίτη κατάσταση ζουν τα σφάλματα, γιατί πρέπει να αλλάξει δύο φορές μέσα σε λίγα δευτερόλεπτα, και η αποτυχία εξόδου από αυτή μοιάζει ακριβώς με μόνιμο μπλοκάρισμα.
Ο μηχανισμός διαφέρει ανά πλατφόρμα, και η αποτυχία επίσης. Τα φίλτρα του Windows Filtering Platform φέρουν βάρη, οπότε ένα φίλτρο φραγής που υπερισχύει της άδειας σας συνεχίζει να απορρίπτει πακέτα παρότι η άδεια υπάρχει, και φίλτρα που άφησε μια τερματισμένη διεργασία πελάτη μπορούν να κρατήσουν το μηχάνημα εκτός σύνδεσης αφού η εφαρμογή φύγει. Οι πελάτες macOS γράφουν συνήθως κανόνες pf σε άγκυρα, όπου η σειρά κανόνων και οι γρήγορες αποφάσεις κρίνουν ποιος κανόνας ισχύει. Οι πελάτες Linux διαχειρίζονται συνήθως αλυσίδα nftables ή iptables με πολιτική drop και ρητές άδειες για το τελικό σημείο, τη διεπαφή της σήραγγας και το loopback. Το always-on VPN του Android με την επιλογή φραγής συνδέσεων χωρίς VPN είναι το αυστηρότερο της ομάδας, γιατί το σύστημα εφαρμόζει το μπλοκάρισμα σε όλη τη συσκευή και όχι ανά εφαρμογή.
Το WireGuard θέλει δική του σημείωση, γιατί το AllowedIPs είναι επιλογέας δρομολόγησης, όχι φραγή. Αποφασίζει ποιοι προορισμοί μπαίνουν στη σήραγγα· δεν κάνει τίποτα για να εμποδίσει ένα πακέτο χωρίς σήραγγα να βγει από το Wi-Fi. Σε στήσιμο μόνο με WireGuard και χωρίς κανόνα τείχους προστασίας, το kill switch είναι στην πραγματικότητα η απουσία διαδρομής, και μετά από μια απορριφθείσα χειραψία μπορεί να ακολουθήσει πραγματικό πακέτο που βγαίνει από τη φυσική διεπαφή.
Μετρήστε το κενό αντί να κοιτάτε το εικονίδιο
Παρακολουθήστε πακέτα, όχι τη λυχνία κατάστασης. Στο Linux ξεκινήστε ένα αργό ping προς δημόσια διεύθυνση σε ένα τερματικό και συλλάβετε τη θύρα μεταφοράς της σήραγγας στη φυσική διεπαφή σε άλλο:
ping -i 0.2 -c 100 1.1.1.1 | tail -5
sudo tcpdump -ni eth0 'udp port 51820'
Αλλάξτε διακομιστή στον πελάτη όσο τρέχουν και τα δύο. Τρία πράγματα μετράνε: πόσο διαρκεί η διακοπή των ping, αν η σύλληψη δείχνει τη χειραψία να φτάνει στο νέο τελικό σημείο και αν η κίνηση επανέρχεται πριν ή αφού η κατάσταση του πελάτη γίνει συνδεδεμένος. Αν το κενό των ping τελειώσει πρώτο, είτε το μπλοκάρισμα αίρεται νωρίς είτε η σήραγγα είναι πάνω πριν το παραδεχτεί η ένδειξη. Αν το κενό τελειώσει αργότερα, η ένδειξη είναι αισιόδοξη.
Στα Windows, το netsh wfp show state γράφει ένα στιγμιότυπο όπου μπορείτε να αναζητήσετε φίλτρα φραγής που υπάρχουν ακόμη ενώ ο πελάτης δηλώνει αποσυνδεδεμένος. Στο macOS, το sudo pfctl -sr παραθέτει τους φορτωμένους κανόνες και τη σειρά τους. Συνδυάστε όποιο στιγμιότυπο με το δικό του αρχείο καταγραφής του πελάτη· το χρονοδιάγραμμα από το ping σας λέει αν το μπλοκάρισμα τελείωσε αργά ή δεν τελείωσε ποτέ.
Φυσιολογικό σκοτείνιασμα έναντι κολλημένου μπλοκαρίσματος
Κάποια διακοπή είναι το νόημα της λειτουργίας, γι' αυτό κάντε διαλογή πριν αλλάξετε οποιαδήποτε ρύθμιση:
| What you see | Usually means | Next check |
|---|---|---|
| Two or three seconds of timeouts, then normal browsing | Expected fail-closed gap | Nothing to fix |
| State says connected, traffic stays dead | Block filter or route left behind | Firewall snapshot, client log |
| One app dead while others work | TCP session bound to the old exit address | Restart the app |
| LAN devices unreachable after the switch | LAN exception not reapplied | Allow-LAN or split-tunnel setting |
| New server hangs, the old one reconnects | Permit covers only the old address | Resolved address of the new host, including AAAA |
Αν πέσετε στη δεύτερη ή την πέμπτη γραμμή, μην απενεργοποιήσετε το kill switch για δοκιμή, γιατί αυτό μετατρέπει ένα σφάλμα δρομολόγησης σε διαρροή. Επανεκκινήστε την υπηρεσία του πελάτη ή επανεκκινήστε το μηχάνημα όπου τα φίλτρα επιβιώνουν από τερματισμό διεργασίας και δείτε μετά αν το μπλοκάρισμα καθαρίζει. Αν καθαρίζει, το σφάλμα είναι στον καθαρισμό κατά την αλλαγή και όχι στο ίδιο το μπλοκάρισμα.
Πριν την επόμενη αλλαγή, επιβεβαιώστε τέσσερα πράγματα: η άδεια του τελικού σημείου καλύπτει κάθε οικογένεια διευθύνσεων που επιλύει το προφίλ σας, το αρχείο καταγραφής δείχνει ολοκληρωμένη μετάβαση, η δοκιμή ping μετρά το κενό και όχι το εικονίδιο, και το κλείσιμο του πελάτη επαναφέρει την κανονική συνδεσιμότητα. Ένα kill switch που κρατά κατά την αλλαγή και απελευθερώνει μετά κάνει τη δουλειά του. Ένα που απελευθερώνει νωρίς ή ποτέ αξίζει αποσφαλμάτωση.