Το DNS δεν επιλύεται όταν το kill switch του VPN μπλοκάρει τη θύρα 53
Ένα kill switch μπορεί να μπλοκάρει το DNS σκόπιμα. Συγκρίνετε την επίλυση μόνο μέσα στη σήραγγα με μια εξαίρεση τοπικού resolver και μετά βρείτε ποιο επίπεδο απέτυχε.
Όταν το 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 χρειάζεται ακόμη μια διαδρομή δικτύου για να φτάσει σε αυτόν. Η κρυπτογράφηση αλλάζει ποιος μπορεί να διαβάσει το ερώτημα, όχι αν το πακέτο μπορεί να φύγει από το μηχάνημα, οπότε ένας αποκλεισμός για όλη τη συσκευή νικά τη ρύθμιση χωρίς να την αγγίξει.
Ταιριάξτε το σύμπτωμα με το επίπεδο
Οι περισσότερες αναφορές φτάνουν ως μία πρόταση, και αυτή η πρόταση συνήθως ονομάζει ήδη το επίπεδο. Ο πίνακας παρακάτω είναι αυτό που περνώ πριν αγγίξω έναν κανόνα· το ζητούμενο είναι να αποφασίσω αν το ερώτημα μπλοκαρίστηκε, διοχετεύτηκε λάθος ή δεν στάλθηκε ποτέ.
| Symptom | Likely layer | First check |
|---|---|---|
| Every name fails at once, instantly | Resolver answering with a refusal | Query the resolver by address, not by name |
| Lookups hang for seconds, then time out | Packets dropped with no response | Watch port 53 on the physical link |
| Public names resolve, internal ones do not | Split-DNS routing domain | Per-link DNS servers on the tunnel |
| Names resolve, the page still fails | Not DNS: routing or MTU | Connect to the IP directly |
| Only one application fails | Pinned resolver or cached answer | Check 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 είτε καλύπτονται από τον αποκλεισμό είτε είναι απενεργοποιημένα από πολιτική.
- Οι ιδιωτικές ζώνες αποτυγχάνουν κλειστά, όχι ανοιχτά, μόλις χαθεί η σήραγγα.