ip netns exec και DNS: γιατί αποτυγχάνουν τα ονόματα μέσα στον χώρο ονομάτων
Ένας χώρος ονομάτων έχει τις δικές του διεπαφές και διαδρομές, αλλά όχι δικό του αρχείο επίλυσης. Ελέγξτε ποιο resolv.conf βλέπει η διεργασία που ξεκινήσατε και από πού προήλθε αυτό το αρχείο.
Μια εντολή φτάνει στο 10.8.0.5 μέσα στον χώρο ονομάτων του VPN χωρίς παράπονο, και η ίδια εντολή αποτυγχάνει τη στιγμή που χρησιμοποιεί όνομα κεντρικού υπολογιστή. Ο χώρος ονομάτων έχει τις δικές του διεπαφές, διαδρομές και υποδοχές· δεν έχει δικό του αρχείο επίλυσης. Αν κάτι δεν τοποθετήσει ένα εκεί, η διεργασία στο εσωτερικό διαβάζει το /etc/resolv.conf του κεντρικού υπολογιστή και ρωτά έναν διακομιστή που μπορεί να μην είναι προσβάσιμος από αυτή τη στοίβα δικτύου.
Πρόκειται για πρόβλημα επιλογής αρχείου και όχι για πρόβλημα δρομολόγησης, και γι’ αυτό ακριβώς ο αριθμητικός προορισμός εξακολουθεί να λειτουργεί.
Ελέγξτε την εικόνα του επιλυτή που λαμβάνει πραγματικά η διεργασία
Μην υποθέσετε ότι το κέλυφος που χρησιμοποιήσατε είναι ισοδύναμο με τη διεργασία που αποσφαλματώνετε. Μια γραφική εφαρμογή, μια μονάδα systemd και ένα κοντέινερ μπορεί καθένα να μπει σε διαφορετικό περιβάλλον προσάρτησης ή δικτύου. Εκτελέστε την αναζήτηση μέσα από την ίδια διαδρομή εκκίνησης και εκτυπώστε το αρχείο του επιλυτή από μέσα.
Για έναν χώρο ονομάτων που δημιουργήθηκε με ip netns add, ο έλεγχος μόνο για ανάγνωση είναι σύντομος:
ip netns exec vpn cat /etc/resolv.confΣημειώστε αν το αποτέλεσμα ονομάζει μια προσβάσιμη διεύθυνση, ένα stub loopback ή έναν συμβολικό σύνδεσμο που δείχνει κάπου με διαφορετική προσβασιμότητα.
Τι προσαρτά στην πραγματικότητα ο βοηθός exec
Το εργαλείο ip-netns τεκμηριώνει τη διαμόρφωση ανά χώρο ονομάτων κάτω από το /etc/netns/NAME/. Όταν εκκινεί μια διεργασία, ο βοηθός δημιουργεί έναν χώρο ονομάτων προσάρτησης και προσαρτά αυτά τα αρχεία πάνω από τις συνήθεις διαδρομές τους, ώστε η διεργασία να βλέπει το αντίγραφο που αφορά τον χώρο ονομάτων. Αυτό είναι μια διευκόλυνση αυτού του συγκεκριμένου εκκινητή. Η είσοδος σε έναν χώρο ονομάτων δικτύου από άλλη διαδρομή, όπως το unshare ή ένα runtime κοντέινερ, δεν το αναπαράγει αυτόματα.
Ο επιλυτής loopback είναι η παγίδα εδώ: το 127.0.0.53 σημαίνει το loopback του ίδιου του χώρου ονομάτων, όχι το stub του κεντρικού υπολογιστή. Ένα stub που ακούει μόνο στον χώρο ονομάτων του κεντρικού υπολογιστή δεν γίνεται υπηρεσία στον νέο.
Επιλέξτε επιλυτή που μπορεί να φτάσει ο χώρος ονομάτων
Όποιον διακομιστή κι αν ονομάζει το αρχείο, εξακολουθεί να χρειάζεται διαδρομή από αυτόν τον χώρο ονομάτων. Ένας δημόσιος επιλυτής μπορεί να απαντά σε δημόσια ονόματα και να αποτυγχάνει για μια εσωτερική ζώνη, επειδή η ιδιωτική υπηρεσία είναι προσβάσιμη μόνο μέσω της σήραγγας. Ελέγξτε τη διαδρομή ταυτόχρονα με τη διεύθυνση, όχι αφού η αναζήτηση έχει ήδη αποτύχει.
Οι εφαρμογές με δικό τους επιλυτή, όπως μία που χρησιμοποιεί DNS over HTTPS, μπορεί να αγνοήσουν εντελώς το αρχείο. Αν το εργαλείο έχει δική του ρύθμιση DNS, η αλλαγή του resolv.conf δεν θα το επηρεάσει, και ο χώρος ονομάτων δεν ήταν ποτέ το πρόβλημα.
Γράψτε το αρχείο στη σωστή θέση
Δημιουργήστε το αρχείο ανά χώρο ονομάτων κάτω από το /etc/netns/NAME/resolv.conf και αφήστε τον εκκινητή να το παρουσιάσει. Κρατήστε το ελάχιστο: έναν ή δύο προσβάσιμους διακομιστές και τους τομείς αναζήτησης που χρειάζεται η εργασία. Μην επεξεργάζεστε το παραγόμενο αρχείο επιλυτή του κεντρικού υπολογιστή για να διορθώσετε μια εικόνα που προορίζεται για μία ομάδα διεργασιών, γιατί αυτό αλλάζει κάθε εφαρμογή στο μηχάνημα. Αν ο κεντρικός υπολογιστής χρησιμοποιεί διαχειριστή επιλυτή, διαμορφώστε τη διαδρομή του χώρου ονομάτων μέσω αυτού του διαχειριστή αντί να παλεύετε μαζί του.
Καταγράψτε το περιεχόμενο του αρχείου στο runbook. Διαφορετικά, το επόμενο άτομο θα δοκιμάσει τον επιλυτή του κεντρικού υπολογιστή, θα δει μια απάντηση που λειτουργεί και θα συμπεράνει ότι ο χώρος ονομάτων είναι εντάξει.
Επαναλάβετε τη δοκιμή ολόκληρης της διαδρομής
Δοκιμάστε μέσα στον χώρο ονομάτων με αριθμητική διεύθυνση, εσωτερικό όνομα και δημόσιο όνομα. Αυτή η ακολουθία διαχωρίζει την προσβασιμότητα από την επίλυση και διαχωρίζει τις εσωτερικές ζώνες από τις δημόσιες. Στη συνέχεια δημιουργήστε ξανά τον χώρο ονομάτων και επαναλάβετε, γιατί ένα αρχείο που υπάρχει μόνο σε μια εκτελούμενη παρουσία εξαφανίζεται μαζί της.
Επιβεβαιώστε ότι η διεργασία, όχι το κέλυφος, λαμβάνει το αρχείο. Μια αναζήτηση που λειτουργεί από διαδραστικό κέλυφος και αποτυγχάνει από μια υπηρεσία είναι ένα εύρημα για το περιβάλλον προσάρτησης, και αξίζει να το γράψετε πριν από το επόμενο περιστατικό αντί να το ανακαλύψετε ξανά από την αρχή.