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

Πέντε βήματα με αυτή τη σειρά: αναπαράγετε το σφάλμα, καταγράψτε τους ακροατές, κατανοήστε το wildcard, αναθέστε το έργο και μετά επαληθεύστε.

Βήμα 1: αναπαράγετε και διαβάστε το σφάλμα

Ξεκινήστε το dnsmasq στο προσκήνιο με την ίδια διαμόρφωση που χρησιμοποιεί η υπηρεσία, ώστε το σφάλμα να εμφανιστεί στο τερματικό σας αντί σε ένα αρχείο καταγραφής που πρέπει να μαντέψετε. Σημειώστε την οικογένεια διευθύνσεων και την τοπική διεύθυνση στο μήνυμα. Η δέσμευση σε συγκεκριμένη διεύθυνση και η δέσμευση στο wildcard είναι διαφορετικές αποτυχίες με διαφορετικούς ιδιοκτήτες.

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

Βήμα 2: καταγράψτε τους ιδιοκτήτες

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

ss -lntup 'sport = :53'

Διαβάστε την έξοδο σε στήλες: μεταφορικό επίπεδο, τοπική διεύθυνση, θύρα, διεργασία. Ένας ακροατής TCP και ένας ακροατής UDP είναι ξεχωριστά socket, οπότε το σταμάτημα του ενός δεν ελευθερώνει το άλλο. Μια διεύθυνση wildcard καλύπτει κάθε διεπαφή, που σημαίνει ότι η διεύθυνση VPN είναι ήδη κατειλημμένη ακόμη κι αν καμία γραμμή δεν την αναφέρει ονομαστικά. Και το όνομα της διεργασίας σάς λέει αν πρόκειται για resolver που διαχειρίζεται η διανομή, για container ή για κάτι που άφησε να τρέχει ένα προηγούμενο πείραμα.

Βήμα 3: η παγίδα του wildcard

Η επιλογή bind-interfaces αλλάζει αν το dnsmasq δεσμεύει ένα socket wildcard ή ένα socket ανά διαμορφωμένη διεπαφή, όπως περιγράφει η αναφορά του dnsmasq. Χωρίς αυτήν, το dnsmasq μπορεί να δεσμεύσει το wildcard και να φιλτράρει τα αιτήματα ανά διεπαφή, κάτι που αποτυγχάνει αμέσως όταν ένας άλλος δαίμονας κρατά το wildcard. Το Linux προσθέτει το bind-dynamic, που χειρίζεται διεπαφές που δημιουργούνται μετά την εκκίνηση, μια πραγματική ανησυχία όταν η διεπαφή VPN εμφανίζεται μόνο κατά τη σύνδεση.

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

Βήμα 4: αναθέστε το έργο

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

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

Βήμα 5: επαληθεύστε το socket και μετά τη διαδρομή

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

Τρία ξεχωριστά αποτελέσματα που πρέπει να κρατήσετε χωριστά: το socket υπάρχει, ο πελάτης το φτάνει, η απάντηση είναι σωστή.

Τι να μην κάνετε

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

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

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