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

Большая часть информации, которую я вижу в Интернете, говорит, чтобы отредактировать /etc/resolv.conf, но любые изменения, которые я там делаю, просто переопределяются.

$ cat /etc/resolv.conf
# Динамический файл resolv.conf (5) для glibc resolver (3), сгенерированный с помощью resolvconf (8)
# НЕ РЕДАКТИРУЙТЕ ЭТОТ ФАЙЛ НА РУКЕ -
# ВАШИ ИЗМЕНЕНИЯ БУДУТ ПЕРЕЗАПИСЫВАЮТСЯ
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.

FYI, я не хочу менять DNS для каждого соединения, я хочу установить настройки DNS по умолчанию для всех подключений, если не указано иное.

UPDATE:

Я сам ответил на этот вопрос: https://unix.stackexchange.com/a/163506/67024

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

  1. Он работает.
  2. Требуется минимальное количество изменений и
  3. Он по-прежнему работает в сочетании с DNS-кешем dnsmasq, а не обходит его.
220 голосов | спросил Seán Hayes 7 Mayam14 2014, 05:31:08

14 ответов


46

Я выяснил, что вы можете изменить серверы имен, которые использует dnsmasq, добавив следующие строки в /etc/dnsmasq.conf:

Сервер = 8.8.8.8
Сервер = 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 перезапуск сетевого менеджера.

Я запустил sudo tail -n 200 /var /log /syslog, чтобы проверить мой syslog и убедиться, что dnsmasq использует указанные мной серверы имен:

Oct 21 23:00:54 mylaptop dnsmasq [8611]: using nameserver 8.8.8.8 # 53
21 октября 23:00:54 mylaptop dnsmasq [8611]: using nameserver 8.8.4.4 # 53
ответил Seán Hayes 22 +04002014-10-22T07:06:28+04:00312014bEurope/MoscowWed, 22 Oct 2014 07:06:28 +0400 2014, 07:06:28
212

Я считаю, что если вы хотите переопределить DNS-сервер имен, вы просто добавляете строку, похожую на эту, в ваш base файл в resolv.conf.d.

Пример

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

Затем введите список серверов имен так:

nameserver 8.8.8.8
сервер имен 8.8.4.4

Наконец, обновите resolvconf:

$ sudo resolvconf -u

Если вы посмотрите man-страницу для resolvconf, она описывает различные файлы в разделе /etc/resolvconf/resolv.conf.d /.

/etc/resolvconf/resolv.conf.d/base
          Файл, содержащий основную информацию распознавателя. Строки в этом
          файл включены в конфигурационный файл преобразователя, даже если нет
          интерфейсы настроены.

   /etc/resolvconf/resolv.conf.d/head
          Файл, добавляемый к динамически генерируемому преобразователю
          Файл конфигурации. Обычно это всего лишь строка комментария.

   /etc/resolvconf/resolv.conf.d/tail
          Файл, добавляемый к динамически генерируемому преобразователю
          Файл конфигурации. Чтобы ничего не добавлять, сделайте это пустым
          файл. Этот файл является хорошим местом для установки строки опций распознавателя
          если необходимо, например,

              опции inet6

Даже если есть предупреждение в верхней части файла head:

$ cat /etc/resolvconf/resolv.conf.d/head
# Динамический файл resolv.conf (5) для glibc resolver (3), сгенерированный с помощью resolvconf (8)
# НЕ РЕДАКТИРУЙТЕ ЭТОТ ФАЙЛ РУКОЙ - ВАШИ ИЗМЕНЕНИЯ БУДУТ ПРЕКРАТНЫМ

это предупреждение есть, так что, когда эти файлы будут созданы, предупреждение в конечном итоге пробивается в результирующий файл resolv.conf, который эти файлы будут использоваться. Таким образом, вы также можете легко добавить строки nameserver, которые описаны выше для файла base, в файл head.

Ссылки

ответил slm 7 Mayam14 2014, 06:01:27
70

Меня тоже интересует этот вопрос, и я попробовал предложенное решение @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 выглядит как

# Динамический файл resolv.conf (5) для решения glibc (3), сгенерированный с помощью resolvconf (8)
# НЕ РЕДАКТИРУЙТЕ ЭТОТ ФАЙЛ РУКОЙ - ВАШИ ИЗМЕНЕНИЯ БУДУТ ПРЕКРАТНЫМ
сервер имен 8.8.4.4
nameserver 127.0.1.1

и nm-tool говорится, что dnsserver

DNS: 208.67.222.222
DNS: 208.67.220.220

, которые предоставляются моим маршрутизатором. С другой стороны, выкапывание адреса говорит о том, что

;; Время запроса: 28 мс
;; СЕРВЕР: 8.8.4.4 № 53 (8.8.4.4)

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

  1. только «голова» часть считывается с помощью resolvonf: «базовая» часть как-то контролируется dnsmasq
  2. dnsserver фактически вынужден 8.8.4.4 независимо от сервера, предоставленного dhcp, НО вы теряете кеширование, предоставляемое dnsmasq, так как запрос всегда отправляется на 8.8.4.4
  3. dnsmasq все еще использует ТОЛЬКО dnsserver, предоставленный 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
ответил brad 9 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 09 Sep 2014 14:10:11 +0400 2014, 14:10:11
18

В случае статических IP-адресов руководство по серверу Ubuntu говорит об изменении файла /etc /network /interfaces, который может выглядеть следующим образом:

iface eth0 inet static
адрес 192.168.3.3
netmask 255.255.255.0
шлюз 192.168.3.1
dns-search example.com
DNS-серверы 192.168.3.45 192.168.8.10

Вы изменяете IP-адреса 192.168.3.45 192.168.8.10 для тех, которые вы хотите, например 8.8.8.8

https://help.ubuntu.com/14.04/serverguide/serverguide.pdf Page 38

ответил Rodolpho 23 MarpmMon, 23 Mar 2015 21:30:19 +03002015-03-23T21:30:19+03:0009 2015, 21:30:19
14
  1. Поиск «Сетевое подключение»
  2. Откройте его

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

  3. Затем выберите Wi-Fi или Ethernet или что-то еще, что вы используете, и нажмите «Изменить». Вы получите следующее:

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

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

  5. Выберите адреса только в методе
  6. Введите имя DNS ниже и сохраните его

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

ответил pa1pal 8 62014vEurope/Moscow11bEurope/MoscowSat, 08 Nov 2014 17:47:42 +0300 2014, 17:47:42
10

Быстрое и грязное обходное решение, которое еще не было упомянуто, - установить неизменяемый флаг в файле resolv.conf сразу после его редактирования.

$ sudo nano /etc/resolv.conf

Добавьте это и сохраните:

nameserver 8.8.8.8

Тогда:

$ sudo chattr + i /etc/resolv.conf

Это должно сделать трюк. Я тоже делаю это в своей системе.

ответил YouniS Bensalah 11 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 11 Sep 2014 01:45:23 +0400 2014, 01:45:23
9

Моя проблема была немного иной, я хотел переопределить DNS-серверы маршрутизаторов. Я нашел эту ссылку у Ubuntu: https://wiki.ubuntu.com/OverrideDNSServers

В нем говорится: Если вы хотите переопределить параметры DNS, предоставленные вам сервером DHCP, откройте

/etc/dhcp3/dhclient.conf

и добавьте следующую строку:

supersede domain-name-servers <dns_ip_address1 & gt ;, <dns_ip_address2 & gt ;;

заменив элементы <dns_ip_address *> соответствующим содержимым.

ответил Ryan 23 +03002015-10-23T15:47:58+03:00312015bEurope/MoscowFri, 23 Oct 2015 15:47:58 +0300 2015, 15:47:58
3

Возможно, мне что-то не хватает, но в соответствии с инструкциями конфигурации на https : //help.ubuntu.com/14.04/serverguide/network-configuration.html , все, что вы делаете, обновляет следующее. Я не запускаю прокси-сервер - просто машина за брандмауэром и локальным DNS (пример показывает Googles, но установите его на все, что вам нужно).

nano /etc /network /interfaces

Значение по умолчанию:

# Этот файл ...
# и как активировать ...

# Петля ...
авто локальный
iface lo inet loopback

# Основной сетевой интерфейс
auto eth0
iface eth0 inet dhcp

ОБНОВЛЕНО:

# Этот файл ...
# и как активировать ...

# Петля ...
авто локальный
iface lo inet loopback

# Основной сетевой интерфейс
#iface eth0 inet dhcp
iface eth0 inet static
адрес x.x.x.x
netmask 255.255.255.0
шлюз x.x.x.x

#nameservers
# вам может не понадобиться dns-search
# Я использую его, потому что я запускаю это в сети Windows
# так что полезно иметь
# dns-search x.y
dns-nameservers 4.4.4.4 8.8.8.8

Перезагрузите, если сможете.

ответил TooIgnorantToNotBeAnonymous 26 PMpWed, 26 Apr 2017 23:51:22 +030051Wednesday 2017, 23:51:22
2

Попробуйте добавить dns-nameservers XXX.XXX.XXX.X в ваш файл /etc /networking /interfaces.

ответил Mike 4 J0000006Europe/Moscow 2014, 19:57:51
1

EDIT MAY 6,2016

Я написал сценарий для обновления всех настроек системных подключений в каталоге /etc /Network-Manager /system-connections /. Графический интерфейс, который вы используете для редактирования отдельных подключений, редактирует конкретный файл в этом каталоге. Скрипт обновляет все файлы - он просто ищет тех, у кого нет dns, установленных с помощью grep, и устанавливает его с помощью awk.

Поскольку для доступа к этим файлам требуется доступ к sudo, запустите этот скрипт с помощью sudo, а затем - перезапустите сетевой менеджер

#! /Bin /Баш
# Автор: Serg Kolo
# Дата: 6 мая 2015 г.
# Описание: этот скрипт проверяет все настройки для соединений в
# /etc /NetworkManager /system-connections /, и если нет пользовательских
# dns set, этот скрипт устанавливает его;
# ПРИМЕЧАНИЕ: запустите перезапуск службы сетевого администратора sudo после запуска этого скрипта

set -x

для файла в /etc /NetworkManager /system-connections /*; делать
        grep 'dns = 208.67.220.220; "$ file" || (awk '{print; if ($ 1 == "[ipv4]") {getline; print "method = auto \ ndns = 208.67.220.
220; \ nignore-auto-dns = true "}} '" $ file "> .tmpfile & & (cat .tmpfile>" $ file "))
сделанный

Сценарий в действии:

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

<p> <strong> ОРИГИНАЛЬНАЯ ПОЧТА </strong>
Некоторые пользователи здесь указали, что DNS каким-то образом контролируется <code>dnsmasq</code>. Это действительно так. Я столкнулся с несколько более мелкой проблемой, независимо от того, как я изменил <code>head</code> или <code>body</code> в <code>/etc/resolvconf/resolv.conf.d</code> , мой компьютер не смог получить доступ к интернированному доменному имени - только для работы с IP-адресами. </p>

<p> Что я сделал, это отредактировать файл <code>/etc/NetworkManager/NetworkManager.conf</code>. Первоначально он сказал <code>dns = dnsmasq</code>, но я изменил его на: <code>dns = 208.67.222.222</code>. Хотя этот способ, <code>nm-tool</code> не упоминает 208.67.222.222, я все еще мог использовать имена доменов, а не только IP-адреса. </p>

<p> Вот как выглядит мой <code>NetworkManager.conf</code> файл: </p>

<pre><code>[главная]
плагинов = ifupdown, файл_ключа, ofono
# = Dnsmasq DNS
= 208.67.222.222 DNS

[Ifupdown]
удалось = ложь
</code></pre>

<p> <strong> ПРИМЕЧАНИЕ. </strong>. Подробнее о моей проблеме и этом решении см. мой пост в <a href = askubuntu.com .

ОБНОВЛЕНИЕ # 1

Вернувшись домой из университета сегодня, я обнаружил, что не могу подключиться к домашнему WiFi. Я немного читал о man NetworkManager.conf, и оказалось, что dns = в [main] на самом деле является строкой для плагины, поэтому строка dns = dnsmasq фактически добавляет плагин dnsmasq к NetworkManager, по-видимому.

Итак, мое решение все еще работало, просто не так, как я ожидал. Вот выдержка из страницы man:

dns = plugin1, plugin2, ... Список имен плагинов DNS, разделенных символом ','.
     

Плагины DNS используются для обеспечения локального кеширования функций сервера имен   (что ускоряет DNS-запросы) и подталкивает данные DNS к приложениям   которые его используют.

Итак, установив dns = 208.67.222.222, я мог бы, в основном, запретить NetworkManager использовать этот плагин, который в противном случае использовал бы локальный DNS-сервер (который, по-видимому, не работает).

ответил Sergiy Kolodyazhnyy 29 +03002014-10-29T04:52:21+03:00312014bEurope/MoscowWed, 29 Oct 2014 04:52:21 +0300 2014, 04:52:21
1

Существуют два метода

Способ 1

Используемый DNS-сервер можно изменить, обновив файл head в разделе resolv.conf.d

$ echo 'nameserver 1.1.1.1' | sudo tee /etc/resolvconf/resolv.conf.d/base

, а затем запустите

$ sudo resolvconf -u

Вышеописанный файл генерирует общий файл resolv.conf в каталоге /etc. Все ваши запросы на разрешение будут отправлены вышеупомянутому серверу имен. решаемые.

Однако есть последствия для этого. При использовании resolvconf для прямого запроса 1.1.1.1 для разрешения адресов мощность кэширования, предоставляемая dnsmasq, отсутствует. Каждый запрос будет отправлен в 1.1.1.1

Способ 2

Если вы не хотите, чтобы это произошло, и используйте dnsmasq для разрешений DNS, обратитесь к этому . Ответ просто описан здесь.

Добавьте следующий контент в файл /etc/dnsmasq.conf.

  

Сервер = 1.1.1.1

Затем перезапустите службу dnsmasq

$ sudo systemctl restart dnsmasq.service

Все будет хорошо работать. решаемые.

ответил Pragathees 30 J0000006Europe/Moscow 2018, 18:10:03
0

Простой способ изменить DNS:

$ sudo nano /etc /network /interfaces

Если возникают проблемы, установите nano:

$ sudo apt-get install nano -y

тогда ..

  1. найдите это: dns-nameservers
  2. Если вы не нашли его, просто введите его там
  3. Я сделал это так: dns-nameservers 199.85.126.10 199.85.127.10

Надеюсь, это лучший способ, я сделал это как на VPS, кстати.

ответил Saif Salim 15 J0000006Europe/Moscow 2015, 08:48:27
0

Некоторые из ответов здесь работают очень хорошо. Однако я не был доволен тем, что мне приходится вручную перебирать конфигурационные файлы, чтобы установить «правильный» DNS, который я уже получаю через DHCP с помощью NetworkManager.

Я немного поработал и заметил, что файл /etc/resolv.conf на самом деле является ссылкой и указывает на /run/systemd/resolve/stub-resolv.conf. После некоторых экспериментов выяснилось, что каталог /run /systemd /resolve / содержит другой файл с именем resolv.conf, который уже содержит настройки, которые вы получили через DHCP. Поэтому вместо того, чтобы вручную перезаписывать /создавать файлы конфигурации в /etc /, вы можете просто переклассифицировать /etc/resolv.conf, чтобы указать на /run/systemd/resolve/resolv.conf, и все должно быть в порядке:

# sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

Теперь вы можете редактировать настройки даже из Network Manager в Gnome. :)

Не уверен, что это будет работать на более ранних версиях ubuntu, но на Ubuntu 17.10.

ответил tftd 4 MaramSun, 04 Mar 2018 03:21:45 +03002018-03-04T03:21:45+03:0003 2018, 03:21:45
0

для root:

  1. comment dns = dnsmasq в /etc/NetworkManager/NetworkManager.conf
  2. добавить supersede domain-name-servers 4.2.2.1.4.2.2.3.4.2.2.5.4.2.2.4.4.2.2.1.4.2.2.2; в конце /etc /dhcp/dhclient.conf
  3. sudo service network-manager restart

Ниже приводятся изменения, показанные выше:

$ sudo sed -i 's /dns \ x3Ddnsmasq /\ x23dns \ x3Ddnsmasq /' \
   /etc/NetworkManager/NetworkManager.conf

$ echo 'supersede domain-name-servers 4.2.2.1.4.2.2.3.4.2.2.5.4.2.2.4.4.2.2.1.4.2.2.2; | \
   sudo tee --append /etc/dhcp/dhclient.conf

$ sudo перезапуск сетевого менеджера

Подождите 7/10 секунд, чтобы завершить процесс перезагрузки, проверьте свою конфигурацию с помощью msgstr "nslookup nist.gov". Хорошо работает на Ubuntu LTS 14.04.

ответил Sebastien Willemijns 15 FebruaryEurope/MoscowbMon, 15 Feb 2016 19:27:43 +0300000000pmMon, 15 Feb 2016 19:27:43 +030016 2016, 19:27:43

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132