Jak ustawić DNS, gdy resolv.conf jest nadpisywany?

Większość informacji, które widzę w sieci mówi, żeby edytować /etc/resolv.conf, ale wszelkie zmiany, które tam wprowadzam po prostu zostają nadpisane.

$ 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

Wygląda na to, że 127.0.1.1 jest lokalną instancją dnsmasq. Dokumenty dnsmasq mówią, żeby edytować /etc/resolv.conf. Próbowałem umieścić niestandardowe serwery nazw w /etc/resolv.conf.d/base, ale zmiany nie pokazały się w /etc/resolv.conf po uruchomieniu sudo resolvconf -u.

FYI, nie chcę zmieniać DNS na podstawie pojedynczego połączenia, chcę ustawić domyślne ustawienia DNS do użycia dla wszystkich połączeń, jeśli nie jest to inaczej określone.

UPDATE:

Sam odpowiedziałem na to pytanie: https://unix.stackexchange.com/a/163506/67024

Myślę, że to'najlepsze rozwiązanie, ponieważ:

  1. Działa.
  2. Wymaga najmniejszej ilości zmian i
  3. Nadal działa w połączeniu z dnsmasq's DNS cache, zamiast go omijać.

Wierzę, że jeśli chcesz nadpisać serwer nazw DNS, po prostu dodajesz linię podobną do tej w swoim pliku base pod resolv.conf.d.

Przykład

$ sudo vim /etc/resolvconf/resolv.conf.d/base

Następnie umieść swoją listę serwerów nazw w taki sposób:

nameserver 8.8.8.8
nameserver 8.8.4.4

Na koniec zaktualizuj resolvconf:

$ sudo resolvconf -u

Jeśli spojrzysz na stronę man dla resolvconf, opisuje ona różne pliki pod /etc/resolvconf/resolv.conf.d/.

   /etc/resolvconf/resolv.conf.d/base
          File  containing  basic  resolver  information.  The lines in this 
          file are included in the resolver configuration file even when no
          interfaces are configured.

   /etc/resolvconf/resolv.conf.d/head
          File to be prepended to the dynamically generated resolver 
          configuration file.  Normally this is just a comment line.

   /etc/resolvconf/resolv.conf.d/tail
          File to be appended to the dynamically generated resolver 
          configuration file.  To append nothing, make this  an  empty  
          file.   This file is a good place to put a resolver options line 
          if one is needed, e.g.,

              options inet6

Nawet jeśli jest ostrzeżenie na górze pliku head:

$ cat /etc/resolvconf/resolv.conf.d/head
# 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

to ostrzeżenie jest tam tak, że kiedy te pliki są skonstruowane, ostrzeżenie ostatecznie znajdzie się w wynikowym pliku resolv.conf, do którego te pliki zostaną użyte. Więc równie dobrze mógłbyś dodać linie nameserver, które są opisane powyżej dla pliku base, do pliku head.

Referencje

Komentarze (7)

Jestem również zainteresowany tym pytaniem i wypróbowałem rozwiązanie zaproponowane przez @sim.

Aby go przetestować, umieściłem

nameserver 8.8.8.8

w /etc/resolvconf/resolv.conf.d/base i

nameserver 8.8.4.4

w /etc/resolvconf/resolv.conf.d/head.

Następnie zrestartowałem sieć za pomocą

sudo service network-manager restart

W rezultacie /etc/resolv.conf wygląda jak

# 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 8.8.4.4
nameserver 127.0.1.1

a nm-tool stwierdza, że dnsserver są

DNS:             208.67.222.222
DNS:             208.67.220.220

które są dostarczane przez mój router. Z drugiej strony wykopanie adresu mówi, że

;; Query time: 28 msec
;; SERVER: 8.8.4.4#53(8.8.4.4)

Jeśli mam rację, to z tego wszystkiego wnioskuję, że

  1. tylko część "head" jest czytana przez resolvonf: część "base" jest w jakiś sposób kontrolowana przez dnsmasq
  2. dnsserver jest w rzeczywistości zmuszony do 8.8.4.4 niezależnie od serwera podanego przez dhcp, ALE tracisz buforowanie zapewniane przez dnsmasq, ponieważ żądanie jest zawsze wysyłane do 8.8.4.4
  3. dnsmasq wciąż używa TYLKO serwera dnsserver dostarczonego przez dhcp.

W sumie to działa, ale nie sądzę, że jest to zamierzony rezultat, o który prosiłem. Bardziej zbliżone rozwiązanie, jak sądzę, jest następujące. Edit

sudo vim /etc/dhcp/dhclient.conf

następnie dodaj

supersede domain-name-servers 8.8.8.8;

Rezultat jest następujący: resolv.conf zawiera tylko 127.0.0.1, co oznacza, że dnsmasq cache jest wywoływany, a nm-tool mówi

DNS:             8.8.8.8

co oznacza, że jeśli szukanej nazwy nie ma w cache, to jest ona odpytywana na 8.8.8.8, a nie na serwerze podanym przez dhcp.

Inną (być może lepszą) opcją jest użycie "prepend" zamiast "supersede": w ten sposób, jeśli nazwa nie jest rozwiązana przez 8.8.8.8, to żądanie spada z powrotem na inny serwer. W rzeczywistości, nm-tool mówi

DNS:             8.8.8.8    
DNS:             208.67.222.222
DNS:             208.67.220.220
Komentarze (4)

Spróbuj dodać dns-nameservers XXX.XXX.XXX.X do swojego pliku /etc/networking/interfaces.

Komentarze (2)