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

Το ερώτημα φτάνει, η απάντηση φεύγει από κάποιο άλλο μέρος

Ένας πελάτης ρυθμισμένος με 10.6.0.1 ως τον διαχειριστή αναλύσεων στέλνει ένα ερώτημα UDP στο 10.6.0.1 στη θύρα 53. Το πακέτο αυτό διασχίζει τη σήραγγα και φτάνει στον υπολογιστή, και ο AdGuard Home το απαντά. Στο δίκτυο, όμως, η απάντηση είναι ένα νέο πακέτο του οποίου η διεύθυνση προέλευσης επιλέγεται από τη στοίβα του υπολογιστή, όχι από την προσδοκία του πελάτη.

Όταν ο διαχειριστής αναλύσεων του πελάτη είναι ένα συνδεδεμένο socket, που είναι αυτό που χρησιμοποιούν το systemd-resolved, το dnsmasq και οι περισσότερες stub λύσεις, δέχεται μόνο απαντήσεις από την ακριβή διεύθυνση στην οποία έστειλε. Μια απάντηση που προέρχεται από 192.168.1.10 σε ένα ερώτημα που στάλθηκε στο 10.6.0.1 απορρίπτεται πριν γίνει οποιαδήποτε ανάλυση. Ο διαχειριστής αναλύσεων καταγράφει μια επιτυχημένη απάντηση, ο πελάτης καταγράφει ένα χρονικό όριο, και και οι δύο λένε την αλήθεια.

Έτσι, οι μετρητές δεν λένε ψέματα και ούτε ο πελάτης. Τα στοιχεία που χρειάζεστε βρίσκονται σε τρία μέρη, με αυτή τη σειρά: η διεύθυνση στην οποία είναι δεσμευμένος ο ακροατής, η διαδρομή που θα χρησιμοποιούσε ο πυρήνας για να επιστρέψει στον πελάτη και η διεύθυνση προέλευσης στο πραγματικό πακέτο απάντησης.

Πώς επιλέγει ο πυρήνας τη διεύθυνση προέλευσης της απάντησης

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

Σε έναν υπολογιστή με μία μόνο διεπαφή, αυτό είναι αόρατο, επειδή υπάρχει μόνο μία λογική απάντηση. Σε μια μηχανή που έχει μια διεύθυνση LAN, μια διεύθυνση WireGuard και μια διεύθυνση διαχείρισης, αρκετές απαντήσεις είναι λογικές, και ο νικητής εξαρτάται από τον πίνακα δρομολόγησης εκείνη τη στιγμή. Προσθέστε μια επιπλέον διαδρομή, μια δεύτερη διεύθυνση στην ίδια διεπαφή, μια ανακατεύθυνση NAT μπροστά από τον επίλυση ή εκτελέστε το AdGuard σε ένα κοντέινερ με το δικό του namespace, και η επιλεγμένη πηγή μπορεί να διαφέρει από αυτή που ζήτησε ο πελάτης.

ss -lunp | grep :53δείχνει σε ποιο παιχνίδι βρίσκεστε. Ένας ακροατής σε0.0.0.0:53είναι η περίπτωση με το γενικό γράμμα (wildcard case)· ένας ακροατής σε10.6.0.1:53έχει ήδη καθορίσει την απάντηση. Η ανάγνωση της υποδοχής (socket) είναι ταχύτερη από την ανάγνωση του YAML και αντικατοπτρίζει τι τρέχει πραγματικά παρά τι αποθηκεύτηκε τελευταία.

Τι ελέγχει πραγματικά το bind_hosts

Το AdGuard Home'sdns.bind_hostsείναι η λίστα τοπικών διευθύνσεων που χρησιμοποιεί ο ακροατής DNS. Η προεπιλεγμένη ρύθμιση που αποστέλλεται είναι το wildcard, που σημαίνει αποδοχή σε κάθε τοπική διεύθυνση και αφήστε τον πυρήνα να επιλέξει την πηγή ανά απάντηση. Αντικαθιστώντας το wildcard με τη διεύθυνση που ερωτούν οι πελάτες αλλάζει η θύρα, και μαζί της η πηγή της διεύθυνσης σε κάθε απάντηση.

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

Το YAML είναι απλό, και η διεύθυνση σε αυτό είναι αυτή που είπαν στους πελάτες σας να χρησιμοποιήσουν για τη σήραγγά τους, όχι η κύρια διεύθυνση του οικοδεσπότη:

dns:
  bind_hosts:
    - 10.6.0.1
  port: 53

Γιατί δύο εγκαταστάσεις ενός αναλυτή διαφωνούν

Η διαχείριση από πρόσθετο, σε αυτό το πλαίσιο, σημαίνει ότι ο επιλυτής εγκαταστάθηκε και επιβλέπεται από ένα άλλο πακέτο: ένα πακέτο υλικολογισμικού δρομολογητή, ένα πακέτο NAS ή ένα πρόσθετο αυτοματισμού οικίας. Αυτό το πακέτο συνήθως περιλαμβάνει το δικό του αντίγραφο του YAML του AdGuard Home και επανεκκινεί τη διαδικασία σύμφωνα με το δικό του πρόγραμμα, ενώ μια ανεξάρτητη εγκατάσταση είναι το εκτελέσιμο αρχείο ή το container του προμηθευτή που διαμορφώνετε μόνοι σας. Σε κάθε περίπτωση, πρόκειται για δύο ανεξάρτητες διαδικασίες με ξεχωριστά αρχεία ρυθμίσεων και ξεχωριστές επιλογές δεσμεύσεων, ακόμα και όταν και οι δύο διαβάζουν την ίδια λίστα upstream και τις ίδιες λίστες φίλτρων. Η μία μπορεί να δεσμεύσει τη συγκεκριμένη διεύθυνση tunnel ενώ η άλλη κληρονομεί το wildcard, και η διεπαφή ιστού φαίνεται ίδια και από τις δύο πλευρές.

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

Καρφιτσώστε το, στη συνέχεια δοκιμάστε από την πλευρά του τούνελ

Αλλάξτεbind_hostsστη διεύθυνση του τούνελ, επανεκκινήστε την υπηρεσία, και επιβεβαιώστε ότι η υποδοχή μετακινήθηκε:ss -lunp | grep :53θα πρέπει τώρα να εμφανίζει10.6.0.1:53και να μην έχει γενική καταχώρηση. Εάν εξακολουθεί να εμφανίζει0.0.0.0,η τρέχουσα διαδικασία δεν διαβάζει το αρχείο που επεξεργαστήκατε.

Στη συνέχεια, δοκιμάστε από τον πελάτη, γιατί αυτή είναι η μόνη πλευρά που μετράει. Ένα ερώτημα μεdig @10.6.0.1 example.comχρησιμοποιεί την διαδρομή που χρησιμοποιεί ο χρήστης, και μια καταγραφή στον κεντρικό υπολογιστή μεtcpdump -ni wg0 udp port 53δείχνει τη διεύθυνση προέλευσης της απάντησης στο δίκτυο. Συγκρίνετέ την με τη διεύθυνση στις ρυθμίσεις του resolver του πελάτη· όταν είναι ίσες, η καθυστέρηση σταματά να είναι μυστήριο.

ip route get 10.6.0.2εξηγεί οποιαδήποτε εναπομένουσα ιδιαιτερότητα, επειδή εμφανίζει την διεπαφή και την πηγή που θα χρησιμοποιούσε ο κεντρικός υπολογιστής για να επιστρέψει στον πελάτη. Εάν εκείνη η έξοδος αναφέρει τη διεπαφή LAN, η αλλαγή της δέσμευσης δεν αποτελεί ολόκληρη τη λύση και ο πίνακας δρομολόγησης είναι το επόμενο πράγμα που πρέπει να διαβάσετε.

Τι δεν μπορεί να διορθώσει η ρύθμιση bind

Το σταθερό δέσιμο του listener δεν διορθώνει μια λίστα πρόσβασης που παραλείπει το υποδίκτυο του tunnel, έναν κανόνα firewall που επιτρέπει το query αλλά όχι την απάντηση, ή μια χαμένη διαδρομή πίσω στο pool του WireGuard. Αυτά αποτυγχάνουν νωρίτερα ή αργότερα από τη διεύθυνση προέλευσης, και καθένα έχει διαφορετικό υπεύθυνο.

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

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