Ako nastavím svoj DNS, keď sa prepíše súbor resolv.conf?

Väčšina informácií, ktoré vidím na internete, hovorí o úprave súboru /etc/resolv.conf, ale všetky zmeny, ktoré tam urobím, sa jednoducho prepíšu.

$ 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

Zdá sa, že 127.0.1.1 je miestna inštancia dnsmasq. V dokumentoch k dnsmasq sa píše, že mám upraviť /etc/resolv.conf. Skúsil som vložiť vlastné nameservery do /etc/resolv.conf.d/base, ale zmeny sa v /etc/resolv.conf po spustení sudo resolvconf -u nezobrazili.

Pre vašu informáciu, nechcem meniť DNS na základe jednotlivých pripojení, chcem nastaviť predvolené nastavenia DNS, ktoré sa použijú pre všetky pripojenia, ak nie je uvedené inak.

UPDATE:

Na túto otázku som odpovedal sám: https://unix.stackexchange.com/a/163506/67024

Myslím, že je to najlepšie riešenie, pretože:

  1. Funguje.
  2. Vyžaduje najmenej zmien a
  3. Stále funguje v spojení s vyrovnávacou pamäťou DNS dnsmasq's, namiesto toho, aby ju obchádzal.

Myslím, že ak chcete prepísať DNS nameserver, stačí pridať podobný riadok do súboru base v časti resolv.conf.d.

Príklad

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

Potom vložte svoj zoznam nameserverov takto:

nameserver 8.8.8.8
nameserver 8.8.4.4

Nakoniec aktualizujte resolvconf:

$ sudo resolvconf -u

Ak sa pozriete na manuálovú stránku pre resolvconf, sú tam popísané rôzne súbory v adresári /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

Aj napriek tomu, že na začiatku súboru head je upozornenie:

$ 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

toto upozornenie je tam preto, aby sa pri vytváraní týchto súborov toto upozornenie nakoniec dostalo do výsledného súboru resolv.conf, ktorý sa z týchto súborov vytvorí. Takže ste mohli rovnako ľahko pridať riadky nameserver, ktoré sú popísané vyššie pre súbor base, aj do súboru head.

Referencie

Komentáre (7)

Táto otázka ma tiež zaujíma a skúsil som riešenie navrhnuté @sim.

Aby som ho otestoval, vložil som

nameserver 8.8.8.8

do /etc/resolvconf/resolv.conf.d/base a

nameserver 8.8.4.4

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

Potom som reštartoval sieť pomocou

sudo service network-manager restart

Výsledkom je, že /etc/resolv.conf vyzerá takto

# 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 uvádza, že dnsserver sú

DNS:             208.67.222.222
DNS:             208.67.220.220

ktoré poskytuje môj smerovač. Na druhej strane kopanie adresy hovorí, že

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

Ak mám pravdu, z toho všetkého usudzujem, že

  1. resolvonf číta iba časť "head": časť "base" je nejakým spôsobom kontroluje dnsmasq
  2. dnsserver je skutočne nútený 8.8.4.4 bez ohľadu na server poskytnutý dhcp, ALE strácate caching poskytovaný dnsmasq, pretože požiadavka sa vždy posiela na 8.8.4.4
  3. dnsmasq stále používa iba dnsserver poskytnutý dhcp.

Celkovo to funguje, ale nemyslím si, že je to požadovaný výsledok. Bližšie riešenie je podľa mňa nasledovné. Upraviť

sudo vim /etc/dhcp/dhclient.conf

potom pridajte

supersede domain-name-servers 8.8.8.8;

Výsledok je nasledovný: resolv.conf obsahuje iba 127.0.0.1, čo znamená, že je vyvolaná dnsmasq cache a nm-tool hovorí

DNS:             8.8.8.8

čo znamená, že ak sa hľadané meno nenachádza v cache, potom sa oň požiada na adrese 8.8.8.8 a nie na serveri, ktorý poskytuje dhcp.

Ďalšou (možno lepšou) možnosťou je použiť "prepend" namiesto "supersede": týmto spôsobom, ak meno nie je vyriešené na 8.8.8.8, potom požiadavka spadne späť na druhý server. V skutočnosti nm-tool hovorí

DNS:             8.8.8.8    
DNS:             208.67.222.222
DNS:             208.67.220.220
Komentáre (4)

Skúste pridať dns-nameservers XXX.XXX.XXX.X do súboru /etc/networking/interfaces.

Komentáre (2)