Как добавить DNS-сервер через resolv.conf?


207

Является ли /etc/resolv.confбесполезным в Ubuntu 12.04 LTS (Precise Pangolin)?

Я вижу, что информация о DNS-сервере теперь хранится в NetworkManager . Инструмент nmcliкомандной строки может перечислить это для вас.

Если я хочу добавить еще один DNS- сервер, добавлю ли его /etc/resolv.confс помощью resolvconfсправки пакета?


2
Я думаю, что команда, упомянутая выше, должна быть nm-tool, а не nmcli.
Джесси Глик

Ответы:


139

Если /etc/resolv.confсодержит, nameserver 127.0.0.1то добавление записей /etc/resolvconf/resolv.conf.d/tailне будет действительно ничего полезного.

Если вы используете NetworkManager, вам следует вместо этого статически добавлять адреса серверов имен с помощью индикатора сети : Редактировать соединения ... | Редактировать ... | Настройки IPv4 | Дополнительные DNS-серверы .

Если вы действительно хотите добавить больше записей /etc/resolv.conf, создайте /etc/resolvconf/resolv.conf.d/tailи добавьте их туда.

Как и в каждом выпуске Ubuntu, рекомендуется прочитать примечания к выпуску Ubuntu, доступные здесь:

Разделы «Рабочий стол» и «Общая инфраструктура» содержат ссылку на


1
@stgraber, пожалуйста, прокомментируйте альтернативный подход, который я нашел и опубликовал ниже. Как это соотносится с добавлением /etc/resolvconf/resolv.conf.d/tailфайла или использованием Network Manager? Благодарю.
Рэндалл Кук

3
@stgraber Что вы рекомендуете для Ubuntu Server? Я заметил в вашем блоге и комментариях, что Network-Manger, кажется, лучший способ справиться с этим, но установка сетевого менеджера в моей системе установит целую кучу вещей, которые мне не нужны (например, GUI ).
Эйвери Чан

1
Что за добавление записей в /etc/resolvconf/resolv.conf.d/head (согласно вашему посту в блоге)?
вир

3
@AveryChan, используйте «третий подход», предложенный @ randallcook - просто добавьте dns-nameserversв свой раздел eth0 в /etc/network/interfaces.
mrm

1
/etc/resolvconf/update.d/libcна сервере Ubuntu 14.04.1: # Set TRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS=no # to allow additional nameserver addresses to be listed in # resolv.conf after an initial loopback address 127.* or ::1. (установите его /etc/default/resolvconf, как строки 23 и 24 /etc/resolvconf/update.d/libcшоу.
immeëmosol

134

Я нашел другой подход здесь , что включает в себя добавление строки , как ниже , чтобы /etc/dhcp/dhclient.conf:

prepend domain-name-servers x.x.x.x, y.y.y.y;

Кроме того, я нашел третий подход здесь , что включает в себя добавление строки /etc/network/interfaces:

auto eth0
iface eth0 inet static
    . . .
    dns-nameservers 8.8.8.8 8.8.4.4

Обновление: вот официальная документация для третьего подхода.


18
Я проголосовал за это, потому что third approachэто самый простой способ сделать это.
Билли Мун

1
@billy Я не мог заставить работать третий метод вообще ... только первый из перечисленных здесь, редактирующий dclient.conf, работал для меня.
Джефф Этвуд

9
Примечание: редактирование dhclient.conf имеет какой-либо эффект, только если используется dhclient (и он используется как ifup, так и NetworkManager!). Редактирование / etc / network / interfaces имеет какой-либо эффект, только если используется ifup. Настройка подключений NetworkManager с помощью редактора подключений NetworkManager оказывает влияние только в том случае, если используется NetworkManager.
Jdthood

1
Если я не ошибаюсь, третий подход добавляет еще один сервер имен ПОСЛЕ тех, которые возвращаются DHCP. Если вы хотите, чтобы он был первым, тогда вам подойдет один из других вариантов. Я использовал /etc/resolvconf/resolv.conf.d/head(после преодоления вводящего в заблуждение комментария «НЕ РЕДАКТИРОВАТЬ» там :))
starfry

1
@ Mr.Hyde, это не команды командной строки, это строки для добавления в / etc / network / interfaces.
Рэндалл Кук

91

Похоже, вы говорите о пакете resolvconf.

Установите пакет resolvconf .

Бегать

cd /etc/resolvconf/resolv.conf.d
sudo cp -p head head.orig  #backup copy, always do this
sudo nano head

Верхняя часть файла - страшное предупреждение. Файл /etc/resolv.conf создается автоматически из содержимого этого файла; предупреждение есть, поэтому оно будет помещено в /etc/resolv.conf при генерации /etc/resolv.conf. В конец файла добавьте

nameserver <ip_of_nameserver>

Нажмите Ctrl xи ответьте да, чтобы сохранить файл. Чтобы закончить, создайте заново /etc/resolv.conf, чтобы изменения вступили в силу прямо сейчас:

sudo resolvconf -u

Затем проверьте содержимое /etc/resolv.conf, чтобы увидеть, что добавленная вами строка теперь там. Кроме того, он все еще будет там при следующей загрузке вашей машины или перезапуске вашей сетевой службы, в зависимости от того, что произойдет раньше.


Информация о файле предупреждения как раз то, что мне нужно. У меня сложилось впечатление, что я не должен редактировать файл! Спасибо!
Xunnamius

Это лучший ответ для меня!
Siwei Shen 申思维

31

Ниже я покажу вам лучший способ, который я нашел, так как я запускаю Ubuntu Server Edition и использую ifup, а не NetworkManager.

На самом деле для меня они сделали это проще :), поместив все это в файл / etc / network / interfaces. Те же конфигурации, которые вы записали бы в resolv.conf, теперь могут находиться в том же файле, что и конфигурации вашего сетевого адаптера, как в примере ниже:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
        dns-nameservers 75.75.75.75 75.75.76.76
        dns-search local

Я надеюсь, что это поможет и облегчит, как и для меня, теперь мы можем создавать статические IP-адреса и добавлять имена серверов и домен DNS в одном файле :)


1
Спасибо. Это также стало моим любимым методом. Примечание не по теме: указывать адреса «сети» и «широковещания» необязательно, поскольку они автоматически рассчитываются по «адресу» и «маске сети». Все, что вам действительно нужно, это «адрес», «маска сети» и «шлюз».
Мартейн Химельс

Это самый чистый ответ. Просто убедитесь, что правильно написали ключевые слова dns- *. «DNS-nameservers» с ошибками был моей настоящей проблемой.
Джон МакГи

18

Мой работает под управлением Ubuntu Server 12.04. Я внес следующие изменения и перезагрузил сервер (обычно это можно сделать, только отключив сетевой интерфейс, ifdown eth0или ifup eth0).

В файл /etc/resolvconf/resolv.conf.d/baseя добавил следующие записи:

nameserver 8.8.8.8
nameserver 8.8.4.4

Я надеюсь, что вышеупомянутое помогает!


12

Вы можете использовать NetworkManager, как указано в ответе Фрэнка, но если вы предпочитаете редактировать вручную /etc/resolv.conf, вы можете сделать это, удалив его (на самом деле это символическая ссылка), а затем создав новый простой файл с нужным вам содержимым. resolvconfУтилита только когда - либо записи в файл /run/resolvconf/resolv.conf.


9

Примечание. Этот ответ был для довольно другой версии Вопроса до слияния, с акцентом только на предварительное ожидание желаемого сервера имен.

Это работает до 12.04:

Отредактируйте /etc/dhcp3/dhclient.confи добавьте:
prepend domain-name-servers 127.0.0.1;

(На самом деле, эта строка уже присутствует; все, что вам нужно сделать, это откомментировать.)


Это работает, если у вас нет адресов, назначенных DHCP?
Азендейл

Если вы хотите узнать больше о конфигурации dhclient, вы можете сделать это, man dhclient.confчтобы получить доступ к справочной странице dhclient. (Это не ответ на вопрос Азендейла.)
Кристиан Скьёдт,

Этот ответ совершенно неверный. Прежде всего, отправитель вопроса хочет добавить адрес внешнего сервера, а не адрес 127.0.0.1. Конфигуратор интерфейса для внешнего интерфейса - это не место для добавления адреса для внутреннего сервера имен. Во-вторых, файл находится в / etc / dhcp, а не в / etc / dhcp3. В-третьих, начиная с Ubuntu 12.04, такие вещи настраиваются с помощью resolvconf.
13

1
Прежде всего - первоначальный вопрос был резко изменен слиянием модератора, поэтому мой ответ, конечно, выглядит странно. Файл dhcp3 был местом, когда я ответил на это в 2011 году , и даже если он не идеален, он работал. Я использовал это решение на нескольких машинах. Очевидно, вы бы изменили адрес обратной петли на тот, который хотите добавить. Я предполагаю, что большинство людей знают, что такое петля, даже если они не читали RFC6890.
Белаква

@jdthood Почему бы не добавить свой ответ? Лично я не был знаком с bsd-ish resolvconf способом ведения дел. Я предпочел прямой подход /etc/resolv.conf, и я не уверен, в чем преимущество новой системы Rube Goldberg. (Аналогично с / etc / motd).
Белаква

7

resolvconfбесполезно. Я нахожусь на сервере Linux, и мой IP-адрес статичен, а мои DNS- серверы статичны. Мне не нужен resolvconfили NetworkManager .

Простота - моя политика при работе на сервере. Чем меньше сложности, тем легче будет справиться / исправить ситуацию, когда что-то сломается.

Так что я сделал aptitude purge resolvconfи вручную убедился, что /etc/resolv.confэто не символическая ссылка, а просто создал статический файл. На всякий случай, если программа пытается изменить файл, я сделал chattr +i(неизменяемый) /etc/resolv.confв качестве меры предосторожности.


4
Поскольку resolvconf является частью базовой системы, удаляя ее, вы создаете проблемы в будущем, во время обновления.
Jdthood

3
Я согласен как с комментарием, так и с ответом: подумайте, сколько проблем это вызвало, и сколько часов поддержки ушло на решение этой «проблемы», а также сколько ИТ-специалистов потратили время на поиски ответов. Просто лучше - мне не нужно, чтобы мои серверы меняли DNS на то, чего я не хочу.
Мэй

6

В большинстве вышеперечисленного предполагается, что у вас нетронутая система, но реальность часто такова, что вы устанавливали разные клиенты dhcp, отключали сетевой менеджер в определенной предыдущей версии Ubuntu и т. Д. Возможно, стоит знать следующее. Я использовал dnsmasq некоторое время, но удалил его. В настоящее время моя система имеет следующее содержимое /etc/resolv.conf(которое является символической ссылкой в /run/resolvconf/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.0.1

Неважно, как часто я запускаю sudo resolvconf -uили sudo dpkg-reconfigure resolvconfне обновлял сервер имен до тех, которые я установил в NetworkManager. Информация, которую действительно использует resolvconf из NetworkManager:

cat /run/resolvconf/interface/NetworkManager  
nameserver 8.8.4.4
nameserver 8.8.8.8

Однако оказывается, что, если в этом каталоге несколько файлов, этот файл может вообще не использоваться. Виновником был файл, не удаленный при деинсталляции dnsmasq:

cat /run/resolvconf/interface/lo.dnsmasq                        
nameserver 127.0.0.1

Просто удаление этого файла (и запуск sudo resolvconf -uпосле) решил мои проблемы с DNS:

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 8.8.4.4
nameserver 8.8.8.8 

Я надеюсь, что это также поможет другим в отладке (сложные взаимодействия между всеми этими различными сетевыми инструментами). Если вы используете, resolvconfне забудьте запустить, ls /run/resolvconf/interfacesчтобы увидеть, что там.


1
Спасибо, это было очень полезно. Сначала я попробовал ответы с более высоким рейтингом, но ни один из них не помог. У меня не было никаких дополнительных файлов в /run/resolvconf/interface/директории, но мой NetworkManagerфайл нуждался в любви. Ваш ответ помог решить эту проблему для меня.
mason81

4

Я просто удалил ссылку /etc/resolv.confи создал обычный файл с адресами серверов имен. Это работает, и я не вижу причин использовать эту довольно странную конструкцию, созданную разработчиками Ubuntu.


1
Да, я не фанат такого рода изменений, которые влияют на серверы, увеличивают сложность и непрозрачность. Это основное поведение, которое не должно меняться от выпуска к выпуску.
Белаква

Этому ответу 5 лет, и ИМХО по-прежнему лучший из всех перечисленных. Это просто, быстро и эффективно. Есть ли минус?
Крейг С. Андерсон

3

Вы можете редактировать соединение «AUTO ETH0» или любое другое имя, которое вы используете для подключения в NM. Вы можете сделать это, щелкнув правой кнопкой мыши на NM и выбрав «Редактировать соединения ...». На вкладке IPv4 вы можете выбрать «Только (DHCP) адреса» в качестве «метода», и NM позволит вам установить адрес (а) сервера имен вручную, даже если адреса доставляются через DHCP.


3

Добавив мой бит в уже длинный список, вот еще один способ (проверено 12.04):

Изменить /run/resolvconf/interface/NetworkManagerв соответствии с вашими потребностями. Вот пример:

search foobar.com example.com
nameserver 192.168.1.1

Затем, как указано для большинства других примеров, выполните a sudo resolvconf -u. Теперь вы найдете свой resolv.confвнешний вид так:

nameserver 192.168.1.1
nameserver 127.0.0.1
search foobar.com example.com

Мне все еще не нравится, как это реализовано сейчас (кажется, Ubuntu нужен сервис для каждого созданного ею фу), и я предпочел бы resolv.confнаверняка простой . Но этот подход кажется мне лучшим компромиссом. Добавленный «localhost-NS» не должен причинять слишком много вреда.


2

Я исправил это, изменив порядок источников. Я переместил dnsисточник раньше mdnsв /etc/nsswitch.conf:

hosts: files dns mdns4_minimal [NOTFOUND=return] mdns4

Вы можете сохранить настройки и по-прежнему использовать локальный сервер кэширования таким образом.


Вместо того, чтобы добавлять записи, исправьте систему, которая сломана и дает вам информацию, которую вы действительно хотите. +1.
nelaaro

2

Как насчет:

sudo dpkg-переконфигурировать resolvconf

Перед этим используйте Network Manager, чтобы изменить адрес DNS и изменить метод на

Только автоматические (DHPC) адреса

Затем выполните команду выше и перезагрузите компьютер. Это сделало решение для меня.


2
vi /etc/network/interfaces


This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The primary network interface
allow-hotplug eth0


# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#auto eth0         <<----- change this comment with the #
iface eth0 inet dhcp

2

Это очень популярный вопрос с набором стандартных возможных ответов, и все они, IMO, довольно забавные. У меня всегда были проблемы с тем, чтобы в Ubuntu соблюдались настройки DNS, которые я установил в NetworkManager - в частности, установка статических DNS-серверов с «только автоматическими (DHCP) адресами»), и сегодня я наконец-то выяснил, что на самом деле НЕПРАВИЛЬНО.

Проблема заключается во взаимодействии resolvconf и NetworkManager. resolvconf имеет этот файл с именем /etc/resolvconf/interface-order. По крайней мере, в моих системах NetworkManager вообще отсутствует в этом файле (за исключением того, что в конце он обозначен * символом подстановки). Итак, что происходит, последний отчет dhclient для resolvconf имеет приоритет перед тем, что NetworkManager должен сказать.

Таким образом, по крайней мере, в моем случае, фактический ответ должен был добавить

NetworkManager

в или около вершины /etc/resolvconf/interface-order.

(Да, я знаю, что многие люди просто говорят «удалить resolvconf», что само по себе кажется мне плохой идеей. Но более того, по крайней мере, хитрый и ксениальный считают resolvconf жизненно важной частью системы [т.е. ubuntu -minimal зависит от него], поэтому было бы трудно поддерживать вашу систему в согласованном, обновленном состоянии без resolvconf.)

По запросу я могу предоставить более подробную информацию о том, как я понял это. ( РЕДАКТИРОВАТЬ : очевидно, я не сделал этого, когда это было запрошено, извините. На данный момент я не помню намного больше деталей, чем то, что я говорю дальше :) В двух словах, я заменил исполняемый файл resolvconf оболочкой оболочки вокруг него который сбрасывает свои аргументы, ввод, вывод и stderr в файлы; и добавил set -x в сценарии обновления resolvconf.

( РЕДАКТИРОВАТЬ : я могу сказать, что под первой частью я имею в виду то, что я использовал sudo для перемещения реального исполняемого файла resolvconf, который можно найти с помощью команды which или команды type. Затем создайте сценарий оболочки, который в конечном итоге просто выполняет перемещенный resolvconf, но также выводит аргументы в некоторый файл и использует перенаправление оболочки для отправки stdin, stdout и stderr в другие файлы. Я не помню, где находятся «сценарии обновления resolvconf», и в настоящее время я не могу их легко проверить. многие фанаты Linux могут понять, что я имею в виду; возможно, какой-нибудь добрый самаритянин предоставит еще больше подробностей в комментарии.)


Пожалуйста , «
опишите


1

Чтобы изменить DNS, следуйте инструкциям в: https://developers.google.com/speed/public-dns/docs/using

  1. Перейти в сеть

  2. Выберите соединение, для которого вы хотите настроить DNS.

  3. Чтобы изменить настройки беспроводного соединения, выберите вкладку «Беспроводная связь», затем выберите соответствующую беспроводную сеть.

  4. Нажмите стрелку (вправо) и в появившемся окне выберите вкладку Настройки IPv4 или Настройки IPv6.

  5. Если выбран метод «Автоматический (DHCP)», откройте раскрывающийся список и выберите «Только автоматические (DHCP) адреса». Если метод установлен на что-то другое, не меняйте его.

  6. В поле DNS-серверы введите IP-адреса DNS, разделенные запятой.


0

0.Добавить временный DNS. Отредактируйте /etc/resolv.conf.

nameserver 4.4.4.4
nameserver 8.8.8.8

1.Установите или обновите resolvconf.

root@ubuntu:~# apt-get install resolvconf -y

2. Добавьте свой сервер имен в /etc/resolvconf/resolv.conf.d/tail

nameserver 4.4.4.4
nameserver 8.8.8.8

3. Перезагрузите компьютер.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.