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:
Myslím, že ak chcete prepísať DNS nameserver, stačí pridať podobný riadok do súboru base
v časti resolv.conf.d
.
$ 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
.
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
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