Більшість інформації, яку я бачу в Інтернеті, говорить про те, що потрібно редагувати /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
після запуску udo resolvconf -u
.
До відома, я не хочу змінювати DNS для кожного з'єднання, я хочу встановити налаштування DNS за замовчуванням для використання для всіх з'єднань, якщо не вказано інше.
ОНОВЛЕННЯ:
Я сам відповів на це питання: https://unix.stackexchange.com/a/163506/67024
Вважаю, що це найкраще рішення з тих, що були:
Я вважаю, що якщо ви хочете перевизначити сервер імен DNS, ви просто додаєте рядок, подібний до цього, у ваш файл base
в resolv.conf.d
.
$ sudo vim /etc/resolvconf/resolv.conf.d/base
Потім введіть ваш список серверів імен таким чином:
nameserver 8.8.8.8
nameserver 8.8.4.4
Нарешті, оновіть resolvconf
:
$ sudo resolvconf -u
Якщо ви подивитеся на сторінку man для resolvconf
, вона описує різні файли в /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
Навіть незважаючи на попередження у верхній частині файлу 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
це попередження є для того, щоб коли ці файли буде створено, воно потрапило до результуючого файлу resolv.conf
, який буде використано для створення цих файлів. Отже, ви могли б так само легко додати рядки nameserver
, які описано вище для файлу base
, і до файлу head
.
Мене також цікавить це питання і я спробував рішення, запропоноване @sim.
Для його перевірки я поставив
nameserver 8.8.8.8
в /etc/resolvconf/resolv.conf.d/base
і
nameserver 8.8.4.4
в /etc/resolvconf/resolv.conf.d/head
.
Потім я перезавантажив мережу за допомогою
sudo service network-manager restart
В результаті /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 8.8.4.4
nameserver 127.0.1.1
а nm-tool
вказує, що dnsserver є
DNS: 208.67.222.222
DNS: 208.67.220.220
які надаються моїм маршрутизатором. З іншого боку, пошук адреси показує, що
;; Query time: 28 msec
;; SERVER: 8.8.4.4#53(8.8.4.4)
Якщо я правий, то з усього цього я роблю висновок, що
В цілому, це працює, але я не думаю, що це той результат, який очікується. Більш близьким рішенням я вважаю наступне. Редагувати
sudo vim /etc/dhcp/dhclient.conf
а потім додайте
supersede domain-name-servers 8.8.8.8;
Результат наступний: resolv.conf містить тільки 127.0.0.1, що означає, що викликається кеш dnsmasq і nm-tool говорить
DNS: 8.8.8.8
що означає, що якщо шуканого імені немає в кеші, то воно запитується за адресою 8.8.8.8, а не на сервері, наданому по dhcp.
Інший (можливо, кращий) варіант - використовувати "prepend" замість "supersede": таким чином, якщо ім'я не дозволено 8.8.8.8, то запит потрапляє назад на інший сервер. Насправді, nm-tool говорить
DNS: 8.8.8.8
DNS: 208.67.222.222
DNS: 208.67.220.220
Спробуйте додати dns-nameservers XXX.XXX.XXX.XXX.X
у файл /etc/networking/interfaces
.