Χρησιμοποιείται όντως το DNS του VPN σας; Καταγράψτε τη θύρα 53 και δείτε
Μια επιβαλλόμενη επιλογή DNS δεν είναι διαδρομή ερωτήματος. Δείτε τι κρατά η διεπαφή, παρακολουθήστε το ερώτημα να φεύγει και σταματήστε να εμπιστεύεστε μια σελίδα δοκιμής διαρροής ως απόδειξη.
Ρωτήστε τους περισσότερους τι κάνει ένας πελάτης VPN με το DNS και θα πουν ότι ρυθμίζει τον resolver, ώστε τα ερωτήματα να ταξιδεύουν μέσα στη σήραγγα. Η ώθηση είναι πραγματική· η υπόθεση ότι γίνεται ερώτημα δεν είναι. Ανάμεσα σε μια ωθημένη επιλογή και ένα πακέτο στο σύρμα στέκονται τρία στάδια, και το καθένα αποτυγχάνει ανεξάρτητα με τρόπους που όλοι μοιάζουν με χαλασμένο διακομιστή DNS. Γι' αυτό μια σελίδα δοκιμής διαρροής και ένας περιηγητής που δουλεύει μπορούν να διαφωνήσουν για το ίδιο μηχάνημα την ίδια στιγμή.
Μια ωθημένη επιλογή δεν είναι ερώτημα
Το πρώτο στάδιο είναι ο διακομιστής να προσφέρει ρυθμίσεις, για παράδειγμα μια ωθημένη επιλογή DNS που ονομάζει έναν resolver μέσα στη σήραγγα. Το δεύτερο στάδιο είναι ο πελάτης να εφαρμόζει αυτές τις ρυθμίσεις σε μια διεπαφή. Το τρίτο στάδιο είναι μια εφαρμογή να στέλνει πράγματι ερώτημα σε αυτή τη διεύθυνση. Μια αποτυχία στο δεύτερο στάδιο αφήνει την επιλογή ορατή στο αρχείο σύνδεσης ενώ η λίστα resolver μένει αμετάβλητη, και μια αποτυχία στο τρίτο στάδιο αφήνει μια απόλυτα σωστή λίστα resolver αχρησιμοποίητη.
Οι περισσότερες ανιχνεύσεις βλαβών συνενώνουν αυτά τα τρία σε ένα και κατηγορούν τον διακομιστή VPN, που είναι συνήθως το μόνο μέρος που μπορεί να αποδείξει ότι έκανε το μέρος του. Διαβάστε αντί γι' αυτό την πραγματική κατάσταση resolver του πελάτη και μετά παρακολουθήστε ένα ερώτημα να φεύγει. Αυτές οι δύο παρατηρήσεις χωρίζουν τη διαμόρφωση από τη δρομολόγηση και από την πολιτική, και κοστίζουν περίπου πέντε λεπτά. Κρατήστε τις καταγραφές, γιατί ο επόμενος μηχανικός θέλει το πριν και το μετά και όχι μια περιγραφή τους.
Ελέγξτε τι κρατά πραγματικά η διεπαφή
Στο Linux ο resolver του συστήματος μπορεί να είναι το απλό αρχείο, το NetworkManager ή το systemd-resolved, και το ποιο από αυτά τον κατέχει καθορίζει πού προσγειώνεται ένας ωθημένος διακομιστής. Μια διεργασία OpenVPN από τη γραμμή εντολών δεν ενημερώνει μόνη της τον resolver του συστήματος, οπότε η τεκμηριωμένη ενσωμάτωση είναι ένα σενάριο up/down ή ένας διαχειριστής συνδέσεων που ξέρει ήδη να εφαρμόζει τις ρυθμίσεις. Το να τρέχουν και τα δύο είναι ένας αποτελεσματικός τρόπος να δημιουργήσετε έναν αγώνα δρόμου.
resolvectl status
cat /etc/resolv.conf
Στα Windows η λίστα είναι ανά προσαρμογέα, οπότε ο προσαρμογέας της σήραγγας μπορεί να κρατά τους εσωτερικούς διακομιστές ενώ ο φυσικός προσαρμογέας κρατά τους τοπικούς και κερδίζει για ορισμένα ονόματα. Συγκρίνετε και τους δύο προσαρμογείς αντί για εκείνον που υποθέτετε ενεργό.
Ακολουθήστε ένα ερώτημα έξω από το μηχάνημα
Καταγράψτε και τις δύο διεπαφές ταυτόχρονα και μετά επιλύστε ένα όνομα που θα έπρεπε να χρησιμοποιεί τον εσωτερικό resolver. Αυτό το ζεύγος καταγραφών απαντά σε ό,τι δεν μπορεί να απαντήσει καμία έξοδος διαμόρφωσης.
sudo tcpdump -ni tun0 port 53
sudo tcpdump -ni any port 53
Ένα ερώτημα που εμφανίζεται στη φυσική διεπαφή και ποτέ στη σήραγγα σημαίνει ότι ο πελάτης διάλεξε λάθος resolver. Ένα ερώτημα σε καμία από τις δύο σημαίνει ότι η εφαρμογή απάντησε από την προσωρινή μνήμη, ρώτησε ένα stub που ακούει στο loopback ή χρησιμοποίησε έναν κρυπτογραφημένο resolver του οποίου η κίνηση δεν εμφανίζεται ποτέ ως θύρα 53. Καταγράψτε και τις απαντήσεις, όχι μόνο τα ερωτήματα, γιατί ένα ερώτημα που φεύγει μέσα από τη σήραγγα με απάντηση από δημόσια διεύθυνση είναι άλλη βλάβη από την πλήρη απουσία απάντησης.
Το τείχος προστασίας που δέχεται μόνο το δικό του DNS
Οι εμπορικοί πελάτες εγκαθιστούν μερικές φορές δικές τους αλυσίδες φιλτραρίσματος. Ένα τεκμηριωμένο μοτίβο επιτρέπει DNS προς τον δικό του resolver του πελάτη και πετά όλη την υπόλοιπη κίνηση UDP στη θύρα 53 που προσπαθεί να φύγει από διεπαφή που δεν είναι loopback, μαζί με κίνηση που ο χρήστης δρομολόγησε σκόπιμα αλλού. Τα ερωτήματα του δαίμονα εξαφανίζονται χωρίς ίχνος, κάτι που διαβάζεται ως βλάβη resolver και όχι ως φίλτρο.
sudo iptables -S OUTPUT
sudo iptables -S | grep -i -E 'dns|53'
Αν ένας κανόνας απόρριψης αξιολογείται πριν από την εξαίρεσή σας, ένας κανόνας που προστίθεται στο τέλος δεν φτάνει ποτέ, οπότε εισαγάγετέ τον στην πρώτη θέση και περιορίστε τον προορισμό στον resolver που πραγματικά εννοείτε.
sudo iptables -I OUTPUT 1 -p udp --dport 53 -d 172.20.8.1 -j ACCEPT
Αυτή η εξαίρεση είναι διαγνωστική και όχι πολιτική. Αν ο κανόνας του προμηθευτή είναι σκόπιμος, η υποστηριζόμενη επισκευή είναι να ρυθμίσετε τον πελάτη να επιτρέπει αυτόν τον resolver και να καταγράψετε την απόφαση, γιατί ένας εισαγμένος κανόνας δεν θα επιβιώσει στην επόμενη αναβάθμιση του πελάτη.
Γιατί μια σελίδα διαρροής αποδεικνύει λιγότερα απ' ό,τι φαίνεται
Αυτό που δείχνει μια σελίδα δοκιμής διαρροής είναι ο resolver που μίλησε με τον χειριστή της δοκιμής, όχι αυτός που συμβουλεύτηκε το μηχάνημά σας. Ένας τοπικός προωθητής που κάνει αναδρομή προς τα έξω βάζει τη δική του διεύθυνση εξόδου σε εκείνη τη σελίδα, και τα κρυπτογραφημένα ερωτήματα μπορεί να αφήσουν τη σελίδα εντελώς κενή. Και τα δύο αποτελέσματα διαβάζονται λάθος, το ένα ως διαρροή και το άλλο ως εγγύηση, και καμία από τις δύο αναγνώσεις δεν προκύπτει από την παρατήρηση.
Η υπερασπίσιμη απόδειξη είναι η καταγραφή: διεπαφή, διεύθυνση προορισμού, απάντηση και χρονική σήμανση. Πάρτε μία πριν σηκωθεί η σήραγγα και μία μετά, και συγκρίνετέ τις την επόμενη φορά που θα αποτύχει ένα όνομα. Αυτό το ζεύγος λέει επίσης στον επόμενο άνθρωπο αν η βλάβη ήταν στην επίλυση, στη δρομολόγηση ή στην πολιτική πρόσβασης του ίδιου του resolver.