Большая часть информации, которую я вижу в Интернете, призывает редактировать /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 по умолчанию, которые будут использоваться для всех подключений, если не указано иное.
ОБНОВЛЯТЬ:
Я сам ответил на этот вопрос: https://unix.stackexchange.com/a/163506/67024
Я думаю, что это лучшее решение, поскольку:
- Оно работает.
- Это требует наименьшего количества изменений и
- Он по-прежнему работает совместно с DNS-кешем dnsmasq, а не обходит его.
решение1
Я полагаю, что если вы хотите переопределить сервер имен DNS, вам просто нужно добавить строку, подобную этой, в свой base
файл в разделе resolv.conf.d
.
Пример
ПРИМЕЧАНИЕ:Прежде чем начать, убедитесь, что у вас установлен следующий пакет: apt install resolvconf
.
$ sudo vim /etc/resolvconf/resolv.conf.d/base
Затем введите список серверов имен следующим образом:
nameserver 8.8.8.8
nameserver 8.8.4.4
Наконец-то обновление resolvconf
:
$ sudo resolvconf -u
Если вы посмотрите на страницу руководства, то 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
файл.
Рекомендации
решение2
Меня тоже интересует этот вопрос, и я попробовал решение, предложенное @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)
Если я прав, то из всего этого я делаю вывод, что
- resolvonf читает только «головную» часть: «базовая» часть каким-то образом контролируется dnsmasq
- DNS-сервер фактически принудительно переходит на 8.8.4.4 независимо от сервера, предоставленного DHCP, НО вы теряете кэширование, предоставляемое dnsmasq, поскольку запрос всегда отправляется на 8.8.4.4
- dnsmasq по-прежнему использует ТОЛЬКО DNS-сервер, предоставленный DHCP.
В целом, это работает, но я не думаю, что это тот результат, который я просил. Более близким решением, я думаю, является следующее. Редактировать
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
решение3
Я обнаружил, что можно изменить dnsmasq
используемые серверы имен, добавив следующие строки /etc/dnsmasq.conf
:
server=8.8.8.8
server=8.8.4.4
У меня не было /etc/dnsmasq.conf
файла, так как он устанавливается пакетом dnsmasq, но Ubuntu поставляется только с dnsmasq-base. Я запустил sudo apt-get install dnsmasq
, затем отредактировал /etc/dnsmasq.conf
, затем sudo service dnsmasq restart
и sudo service network-manager restart
.
Я sudo tail -n 200 /var/log/syslog
проверил свой системный журнал и убедился, что dnsmasq
он использует указанные мной серверы имен:
Oct 21 23:00:54 mylaptop dnsmasq[8611]: using nameserver 8.8.8.8#53
Oct 21 23:00:54 mylaptop dnsmasq[8611]: using nameserver 8.8.4.4#53
решение4
Поиск «Сетевое подключение»
Открой это
Затем выберите WiFi или Ethernet, или что вы используете, и нажмите «Изменить». Вы получите это:
Выберите ipv4 во вкладках
Выбрать адреса только в методе
Введите ниже свое DNS-имя и сохраните его.
Вы закончили