Как настроить DNS при перезаписывании resolv.conf?

Как настроить DNS при перезаписывании resolv.conf?

Большая часть информации, которую я вижу в Интернете, призывает редактировать /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

Я думаю, что это лучшее решение, поскольку:

  1. Оно работает.
  2. Это требует наименьшего количества изменений и
  3. Он по-прежнему работает совместно с 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)

Если я прав, то из всего этого я делаю вывод, что

  1. resolvonf читает только «головную» часть: «базовая» часть каким-то образом контролируется dnsmasq
  2. DNS-сервер фактически принудительно переходит на 8.8.4.4 независимо от сервера, предоставленного DHCP, НО вы теряете кэширование, предоставляемое dnsmasq, поскольку запрос всегда отправляется на 8.8.4.4
  3. 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

  1. Поиск «Сетевое подключение»

  2. Открой это

                        введите описание изображения здесь

  3. Затем выберите WiFi или Ethernet, или что вы используете, и нажмите «Изменить». Вы получите это:

                  введите описание изображения здесь

  4. Выберите ipv4 во вкладках

  5. Выбрать адреса только в методе

  6. Введите ниже свое DNS-имя и сохраните его.

  7. Вы закончили

Связанный контент