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

Η ίδια δουλειά μέσα από δύο μηχανισμούς

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

PropertyTeardown scriptFirewall unit
Runs when the client is killedNoYes
Needs privilege at teardown timeUsually yesConfigured once, at boot
Acts on the whole machineOften, including recovery pathsOnly on the flows it matches

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

Τι μπορεί και τι δεν μπορεί το άγκιστρο τερματισμού

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

#!/bin/sh
for dev in /sys/class/net/*; do
  name=$(basename "$dev")
  [ "$name" = lo ] || ip link set dev "$name" down
done

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

Ελέγξτε πώς ξεκινά ο πελάτης πριν εμπιστευτείτε το άγκιστρο. Ένα σενάριο που δουλεύει όταν το τρέχετε με το χέρι ως root δεν αποδεικνύει τίποτα για την υπηρεσία που ξεκινά στην εκκίνηση.

Τι κάνει διαφορετικά ο κανόνας τείχους προστασίας

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

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

Κανένας από τους δύο μηχανισμούς δεν κάνει τον άλλο περιττό. Ένας κανόνας τείχους προστασίας που δεν επαναφορτώνεται ποτέ μετά από επεξεργασία είναι τόσο φανταστικός όσο ένα σενάριο που δεν εκτελείται ποτέ.

Το persist-tun καθορίζει αν υπάρχει κενό

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

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

Κρατήστε ζωντανή τη διαδρομή επανασύνδεσης και μετά δοκιμάστε τέσσερις καταστάσεις

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

ip route add 198.51.100.20/32 via 192.168.0.1 dev wlan0

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

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