Πώς μπορώ να ορίσω το DNS μου όταν το resolv.conf αντικαθίσταται;
Οι περισσότερες πληροφορίες που βλέπω στο διαδίκτυο λένε να επεξεργαστώ το αρχείο /etc/resolv.conf
, αλλά όποιες αλλαγές κάνω εκεί απλά παρακάμπτονται.
$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND --
# YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.1.1
Φαίνεται ότι το 127.0.1.1 είναι μια τοπική περίπτωση του dnsmasq
. Τα έγγραφα του dnsmasq
λένε να επεξεργαστείτε το /etc/resolv.conf
. Δοκίμασα να βάλω προσαρμοσμένους διακομιστές ονομάτων στο /etc/resolv.conf.d/base
, αλλά οι αλλαγές δεν εμφανίστηκαν στο /etc/resolv.conf
μετά την εκτέλεση του sudo resolvconf -u
.
Πληροφοριακά, δεν θέλω να αλλάξω το DNS ανά σύνδεση, θέλω να ορίσω τις προεπιλεγμένες ρυθμίσεις DNS που θα χρησιμοποιούνται για όλες τις συνδέσεις, όταν δεν ορίζεται διαφορετικά.
UPDATE:
Απάντησα στην ερώτηση αυτή μόνος μου: https://unix.stackexchange.com/a/163506/67024
Νομίζω ότι είναι η καλύτερη λύση από τότε:
- Λειτουργεί.
- Απαιτεί τις λιγότερες αλλαγές και
- Εξακολουθεί να λειτουργεί σε συνδυασμό με την κρυφή μνήμη DNS του dnsmasq's, αντί να την παρακάμπτει.
Πιστεύω ότι αν θέλετε να παρακάμψετε τον διακομιστή ονομάτων DNS, απλώς προσθέτετε μια γραμμή παρόμοια με αυτή στο αρχείο
base
σας στο τμήμαresolv.conf.d
.Παράδειγμα
Στη συνέχεια, βάλτε τη λίστα με τους διακομιστές ονομάτων σας ως εξής:
Τέλος, ενημερώστε το
resolvconf
:Αν ρίξετε μια ματιά στη σελίδα man για το
resolvconf
περιγράφει τα διάφορα αρχεία κάτω από το/etc/resolvconf/resolv.conf.d/
.Παρόλο που υπάρχει μια προειδοποίηση στην κορυφή του αρχείου
head
:αυτή η προειδοποίηση βρίσκεται εκεί έτσι ώστε όταν αυτά τα αρχεία κατασκευάζονται, η προειδοποίηση τελικά θα λειτουργήσει στο αρχείο
resolv.conf
που θα προκύψει και θα χρησιμοποιηθεί για την κατασκευή αυτών των αρχείων. Έτσι, θα μπορούσατε εξίσου εύκολα να έχετε προσθέσει τις γραμμέςnameserver
που περιγράφονται παραπάνω για το αρχείοbase
, και στο αρχείοhead
.Αναφορές
Ενδιαφέρομαι επίσης για αυτό το ερώτημα και δοκίμασα τη λύση που πρότεινε ο @sim.
Για να το δοκιμάσω, έβαλα
στο
/etc/resolvconf/resolv.conf.d/base
καιστο
/etc/resolvconf/resolv.conf.d/head
Στη συνέχεια έκανα επανεκκίνηση του δικτύου με
Το αποτέλεσμα είναι ότι το
/etc/resolv.conf
μοιάζει μεκαι το
nm-tool
δηλώνει ότι οι dnsserver είναιοι οποίοι είναι αυτοί που παρέχονται από τον δρομολογητή μου. Από την άλλη πλευρά, το σκάψιμο μιας διεύθυνσης λέει ότι
Αν έχω δίκιο, συμπεραίνω από όλα αυτά ότι
Συνολικά, λειτουργεί, αλλά δεν νομίζω ότι είναι το επιδιωκόμενο αποτέλεσμα που ζητήθηκε. Μια πιο κοντινή λύση νομίζω ότι είναι η ακόλουθη. Επεξεργασία
και στη συνέχεια προσθέστε
Το αποτέλεσμα είναι το εξής: το resolv.conf περιέχει μόνο το 127.0.0.1, πράγμα που σημαίνει ότι η cache dnsmasq καλείται και το nm-tool λέει
που σημαίνει ότι αν το όνομα που αναζητείται δεν υπάρχει στην cache, τότε ζητείται στο 8.8.8.8.8 και όχι στον διακομιστή που παρέχεται από το dhcp.
Μια άλλη (ίσως καλύτερη) επιλογή είναι η χρήση του "prepend" αντί του "supersede": με αυτόν τον τρόπο, εάν το όνομα δεν επιλυθεί από τον 8.8.8.8.8, τότε η αίτηση επιστρέφει στον άλλο διακομιστή. Στην πραγματικότητα, το nm-tool λέει
Δοκιμάστε να προσθέσετε το
dns-nameservers XXX.XXX.XXX.XXX.X
στο αρχείο σας/etc/networking/interfaces
.