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

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

Δύο σχεδιασμοί DNS για την ίδια διακοπή

Ο σχεδιασμός A αντιμετωπίζει τον resolver ως μια ακόμη υπηρεσία πίσω από τη σήραγγα. Οι κανόνες του τείχους προστασίας επιτρέπουν UDP και TCP 53 μόνο στη διεπαφή της σήραγγας, και η διεύθυνση που δίνεται στον πελάτη είναι ένας resolver μέσα στη σήραγγα. Όταν πέσει η σήραγγα, οι αναζητήσεις σταματούν, και αυτό είναι το επιδιωκόμενο αποτέλεσμα, όχι βλάβη.

Ο σχεδιασμός B κρατά έναν resolver προσβάσιμο στο τοπικό δίκτυο, συνήθως τον δρομολογητή στο 192.168.1.1 ή το stub του λειτουργικού συστήματος στο 127.0.0.53, με το σκεπτικό ότι η επίλυση ονομάτων δεν πρέπει να πεθάνει μαζί με τη σήραγγα. Είναι βολικό σε οικιακό LAN όπου ο δρομολογητής επιλύει για όλο το σπίτι. Σε Wi-Fi ξενοδοχείου ή αεροδρομίου η ίδια εξαίρεση δείχνει στον διακομιστή κάποιου άλλου, και κάθε όνομα που πληκτρολογείτε αποκαλύπτεται, παρόλο που η κυκλοφορία ιστού σας παραμένει μπλοκαρισμένη.

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

Γιατί η αναζήτηση του ίδιου του πελάτη VPN εξακολουθεί να λειτουργεί

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

Το διαχωρισμένο DNS είναι το άλλο σημείο όπου αυτό εμφανίζεται. Ο πελάτης σπρώχνει μια εσωτερική ζώνη σε έναν ιδιωτικό resolver και αφήνει όλα τα άλλα στον resolver του συστήματος. Μετά από πτώση, τα δημόσια ονόματα μπορεί να επιλύονται ακόμη, ενώ τα εσωτερικά λήγουν, επειδή η ιδιωτική ζώνη δεν έχει διαδρομή. Για τον χρήστη αυτό είναι «το VPN χάλασε το διαδίκτυο»· για το αρχείο του resolver είναι ένα ερώτημα που δεν έφτασε ποτέ.

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

Το κρυπτογραφημένο DNS δεν παρακάμπτει ένα φίλτρο πακέτων

Το DNS over HTTPS και το DNS over TLS ταξιδεύουν στις 443 και 853, οπότε ένας κανόνας που μπλοκάρει τη θύρα 53 δεν έχει πει τίποτα γι' αυτά. Το μπλοκάρισμα του «DNS» κατά θύρα είναι πολιτική για μια θύρα, όχι για την επίλυση ονομάτων. Αν το kill switch σας μπλοκάρει όλη την κυκλοφορία εκτός σήραγγας, το DoH καλύπτεται κατά λάθος. Αν έχετε εξαιρέσει μια άδεια για captive portal ή δημόσιο resolver, δεν καλύπτεται.

Τα χειριστήρια στην πλευρά του πελάτη είναι ο φθηνότερος μοχλός. Το Firefox εγκαταλείπει τον resolver DoH του όταν το όνομα καναρίνιuse-application-dns.netδεν επιλύεται, γι' αυτό τα διαχειριζόμενα δίκτυα δημοσιεύουν αυτή την περιοχή ως NXDOMAIN· η εταιρική πολιτική μπορεί επίσης να το καρφώσει απενεργοποιημένο. Το Android Private DNS και το ασφαλές DNS του Chrome έχουν δικούς τους διακόπτες και δικές τους προεπιλογές. Το να τα απενεργοποιήσετε είναι πιο αξιόπιστο από το κυνήγι διευθύνσεων resolver, γιατί η λίστα διευθύνσεων αλλάζει και το σύνολο κανόνων σας όχι.

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

Ταιριάξτε το σύμπτωμα με το επίπεδο

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

SymptomLikely layerFirst check
Every name fails at once, instantlyResolver answering with a refusalQuery the resolver by address, not by name
Lookups hang for seconds, then time outPackets dropped with no responseWatch port 53 on the physical link
Public names resolve, internal ones do notSplit-DNS routing domainPer-link DNS servers on the tunnel
Names resolve, the page still failsNot DNS: routing or MTUConnect to the IP directly
Only one application failsPinned resolver or cached answerCheck that app's DNS setting

Οι δύο πρώτες γραμμές είναι αυτές που οι άνθρωποι διαγιγνώσκουν λάθος. Μια σιωπηλή πτώση και μια άρνηση φαίνονται και οι δύο σαν «το DNS χάλασε» σε ένα πρόγραμμα περιήγησης, αλλά μόνο η μία σημαίνει ότι το kill switch κάνει τη δουλειά του. Η άρνηση σημαίνει ότι κάτι απάντησε, άρα ο αποκλεισμός δεν είναι εκεί που νομίζετε.

Επαναφέρετε την πολιτική του resolver και μετά αποδείξτε την

Διορθώστε τον σχεδιασμό, όχι το σύμπτωμα. Για επίλυση μόνο μέσα στη σήραγγα, επιτρέψτε 53 στη διεπαφή της σήραγγας, σπρώξτε τον εσωτερικό resolver με τη διαμόρφωση της σήραγγας και αφήστε τη φυσική ζεύξη χωρίς καμία άδεια DNS. Με το wg-quick η γραμμήDNS =είναι αυτή που γράφει τον resolver στη διαμόρφωση της διεπαφής, οπότε μια σήραγγα που την παραλείπει αφήνει τον παλιό resolver στη θέση του και κάθε ερώτημα σε λάθος διαδρομή.εγχειρίδιο του wg-quickτεκμηριώνει αυτή τη συμπεριφορά ανά πλατφόρμα.

Στη συνέχεια επαληθεύστε με αυτή τη σειρά. Στο Linux τοresolvectl statusδείχνει τη ζεύξη που είναι ενεργή,dig +short example.comδοκιμάζει ένα δημόσιο όνομα,dig @10.8.0.1 internal.example.comδοκιμάζει το ιδιωτικό, και τοsudo tcpdump -ni any port 53δείχνει ποια διεπαφή χρησιμοποιούν τα πακέτα όσο τρέχετε και τα δύο. Στα Windows τοGet-DnsClientServerAddress -AddressFamily IPv4και τοResolve-DnsName example.comδίνουν τα ίδια δύο γεγονότα: ποιος είναι ρυθμισμένος και ποιος απαντά.

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

Λίστα ελέγχου πριν κλείσετε το αίτημα:

  • Ο resolver που χρησιμοποιήθηκε κατά τη διακοπή είναι αυτός που προβλέπει η πολιτική.
  • Η αναζήτηση του ίδιου του τελικού σημείου από τον πελάτη επιτρέπεται ακόμη, μέσω προσωρινής μνήμης ή εξαίρεσης.
  • Το DoH και το DoT είτε καλύπτονται από τον αποκλεισμό είτε είναι απενεργοποιημένα από πολιτική.
  • Οι ιδιωτικές ζώνες αποτυγχάνουν κλειστά, όχι ανοιχτά, μόλις χαθεί η σήραγγα.

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