Как включить строки в resolv.conf, которые не будут потеряны при перезагрузке?


174

Я наконец-то перешел на 12.04 с 7.10. У меня есть одна последняя часть для завершения, но я в тупике. Я использую Puppet на каждом сервере, и в прошлом я включал адрес сервера имен и имя поискового домена для puppetmaster в resolv.conf.

search puppetmaster.com
nameserver 192.168.1.XXX

В 12.04 resolv.conf перезаписывается при перезагрузке. Я не могу использовать статический IP-адрес для них, поэтому использование / etc / network / interfaces для помощи мне не имеет смысла.

# 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

Есть ли способ получить resolvconf для обработки этого в голове, хвосте или основании? Если есть, есть ли примеры, которые я могу использовать для настройки на моем сервере.

Буду признателен за любую оказанную помощь.


2
resolvconf - плохое программное обеспечение, просто удалите его и управляйте /etc/resolv.conf по-старому.
— бронзовый мужчина

Ответы:


134

Вероятно, лучше, чтобы ваш DNS-сервер мог разрешить «марионетку» по правильному адресу, а также чтобы ваш DHCP-сервер выдавал адрес DNS-сервера и список поиска, либо (если у вас есть статические IP-адреса) иметь что-то вроде следующее в / etc / network / interfaces.

iface eth0 inet static
    address 192.168.3.3
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-search example.com
    dns-nameservers 192.168.3.45 192.168.8.10

Но если вы хотите сделать это через конфигурационные файлы resolvconf, вам нужно будет отредактировать /etc/resolvconf/resolv.conf.d/base. В этом файле введите ваши данные, как в resolv.conf.

nameserver 192.168.1.XXX

Затем скажите resolvconf для регенерации resolv.conf.

sudo resolvconf -u

13
Хотя этот ответ имеет голоса, и первая часть более или менее правильная, вторая часть ответа неверна. (1) Как не поместить строку «поиск» в /etc/resolvconf/resolv.conf.d/head. Если вы поместите туда строку «search», эта строка будет игнорироваться, если resolvconf включает строку «search» в динамическую часть файла resolv.conf. Средство распознавания glibc игнорирует все, кроме последней строки "search" или "domain". Смотрите resolv.conf (5). (2) Если конфигурация resolvconf изменена, вам не следует перезапускать задание resolvconf, а просто запустить обновление, «resolvconf -u».
— Jdthood

1
Я удалил линию. Другой вариант будет использовать хвост вместо головы.
— tgm4883

6
@tishma: Привет. Во-первых, чтобы избежать недоразумений: ничего не записывается в файлы базы, заголовка или хвоста. Во время выполнения ничего не записывается ни в какие файлы в /etc/resolvconf/resolv.conf.d/. Эти файлы читаются resolvconf, который собирает их содержимое в записываемый файл --- /run/resolvconf/resolv.conf ---, на который указывает символическая ссылка /etc/resolv.conf. Во-вторых, что делать после изменения параметров dns- * в / etc / network / interfaces. Вы не запускать «/etc/init.d/networking перезагрузки»; сейчас это устарело. Вместо ifdown интерфейс, о котором идет речь, и ifup снова.
— Jdthood

4
В 14.04 этот ответ ничего не сделал для меня.
— Джей Салливан

2
Если ничего не помогло .. $ sudo resolconf -u, похоже, ничего не изменило для меня, перезапустил машину, presto.
— MSpreij

35

Я думаю, что ответом является проверка вашего /etc/dhcp/dhclient.conf, т.е. не запрашивать dns-nameserversу вашего клиента DHCP .

Затем обновите свой /etc/network/interfaces

auto eth0
iface eth0 inet dhcp
dns-search google.com
dns-nameservers dnsserverip

Тогда ваш resolv.confбудет автоматически настроен так, как вы этого хотите.

Добавьте к dns-searchи затем запустите /etc/init.d/networking restart (хотя этот скрипт устарел, он все еще работает).


5
dhclient управляет любыми настройками resolvconf, так что это должен быть лучший ответ.
— Алекс Р

6
/etc/init.d/networking restartне работал на моей машине, но sudo ifdown -aи тогда sudo ifup -aсделал. (Кроме того, мне потребовалось немного времени, чтобы понять, что я должен был заменить dnsserveripчто-то вроде 8.8.8.8; я чувствую себя немного глупо.)
— Джейсон Гросс

попробуйsystemctl restart networking.service
— Павел Сайекат

20

Вероятно, это вызвано настройкой DHCP при первой установке Ubuntu. Попробуйте этот трехэтапный процесс для решения этой проблемы автоматической конфигурации.

Первый

Отредактируйте конфигурацию вашего интерфейса, которая находится в: /etc/network/interfaces

Добавьте эту строку ниже iface lo inet loopback:

dns-nameservers yourdns youraltdns

В качестве примера для Google DNS вы можете использовать это:

dns-nameservers 8.8.8.8 8.8.4.4

второй

Отредактируйте файл конфигурации DHCP, расположенный по адресу:

/etc/dhcp/dhclient.conf

Пометьте синтаксис как комментарий, используя #каждую строку или просто удалите каждый запрос name-server. В 16.04 от вас может не потребоваться вносить какие-либо изменения здесь.

Третий

Перезагрузите сеть с помощью этой команды:

/etc/init.d/networking restart

В 16.04:

sudo ifdown -a
sudo ifup -a

3
/etc/init.d/networking restartне работал на моей машине, но sudo ifdown -aи тогда sudo ifup -aсделал.
— Джейсон Гросс

Это просто и работает, хотя это немного хакерски! Проблема с такими вещами, как Ubuntu имеет 1000 способов сделать одну вещь!
— Вилла О Нгвана

И затем вы можете проверить, что /etc/resolv.conf содержит эти 2 новые записи DNS в первых полезных строках.
— ROMANIA_engineer

8

Пожалуйста, посмотрите на resolvconfсправочную страницу. Вы можете принудительно включить определенные настройки DNS, создав, например /etc/resolvconf/resolv.conf.d/base:

  /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.

Есть и другие специальные файлы (голова и хвост), они могут помочь вам достичь того, что вы хотите.


4
Вы можете добавить строки в /etc/resolvconf/resolv.conf.d/base, но поскольку каждый сервер имен доступен через интерфейс и доступен только при работающем интерфейсе, лучше связать информацию о сервере имен с этим интерфейсом. Если интерфейс настроен с помощью ifup, это означает: поместите информацию в строки "dns-search" и "dns-nameservers" в разделы / etc / network / interfaces. Если интерфейс настроен через DHCP, это означает: настройте DHCP-сервер для предоставления имен поиска и адресов серверов имен клиентам. И т. Д. Используйте «базовый» файл только в качестве временного хака или в качестве крайней меры.
— Jdthood

Ага. Я добавил "nameserver 1.2.3.4" в /etc/resolvconf/resolv.conf.d/base
— Бастион

8

Как и во многих других ответах, это связано с resolvconfустановкой в ​​вашей системе.

Таким образом, лучший способ сохранить что-то, resolv.confчто не потеряется при перезагрузке, это включить его в файлы конфигурации resolvconf, которые находятся в:

/etc/resolvconf/resolv.conf.d/

Там пойти на headфайл. Все, что вы положите туда, будет написано наверху/etc/resolv.conf

Так что все пойдет примерно так:

# echo nameserver 8.8.8.8 >> /etc/resolvconf/resolv.conf.d/head
# resolvconf --enable-updates
# resolvconf -u

Это актуальный правильный ответ! В заключение!
— user77232

6

Для меня приведенные выше ответы были неадекватными по следующим причинам:

  • Я не использую resolvconf, просто ясно /etc/resolv.conf.
  • Использование chattr +iдля блокировки resolv.confкажется слишком хакерским. Мне нужно, чтобы Puppet мог свободно вносить изменения, когда это необходимо.
  • AFAIK, редактирование /etc/network/interfacesне предотвращает resolv.confперезапись; он просто указывает серверы имен, которые должны быть записаны. Для меня указание серверов имен не имеет смысла. Я пытаюсь установить options timeout:1и options attempts:1в моем resolv.confфайле.

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

Создайте новый файл /etc/dhcp/dhclient-enter-hooks.d/nodnsupdateсо следующим содержимым:

#!/bin/sh
make_resolv_conf() {
    :
}

Затем сделайте файл исполняемым:

chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate

Теперь, когда dhclient запускается - либо при перезагрузке, либо когда вы запускаете вручную sudo ifdown -a ; sudo ifup -a- он загружает этот скрипт nodnsupdate. Этот скрипт переопределяет внутреннюю функцию make_resolv_conf(), которая обычно перезаписывается, resolv.confи ничего не делает.

Это работало для меня на Ubuntu 12.04.


1
Отлично работает на Debian 8. Элегантное решение!
— Артур Бодера

1
просто для полноты: manpage dhclient-script содержит информацию о скрипте конфигурации сети клиента DHCP, упомянутом выше в ответе.
— хекк

Это не сработало 16.04, я тоже кое-что добавил в /etc/network/interfaces.d, без эффекта, добавил рекомендованное здесь пустое переопределение make_resolv_conf, без эффекта .... но не изменил / etc / dhcp / dhclient.conf - мне действительно нужно изменить статический файл конфигурации, чтобы это исправить?
— silverjam

3

Это может быть какой-то странной причудой в моей машине, но у кого-то еще может быть такой же угловой случай.

Я пробовал многочисленные способы включения моих имен серверов ISP в /etc/resolv.conf, но безуспешно:

  • Я включил их /etc/network/interfacesи перезапустил сеть. Они не появились в /etc/resolv.conf.

  • Я вставил их /etc/resolv.confявно, но, конечно, они были перезаписаны. Они появились /run/resolvconf/interface/eth0.inet, но так и не смогли /etc/resolv.conf.

  • Я попытался настроить resolvconf для динамических обновлений. Без изменений.

Наконец я где-то читал, что если локальная машина (127.0.0.1) обнаруживается в /etc/resolv.confкаких-либо других серверах имен, они не включаются.

В отчаянии я редактировал /run/resolvconf/interface/lo.named, удалил только строки в нем ( nameserver 127.0.0.1) и перезапущен: ifdown eth0 && ifup eth0.

Затем /etc/resolv.conf впервые включил мои ISP-серверы имен! Я побежал, service network-manager restartчтобы увидеть, была ли она стабильной и /etc/resolv.confвсе еще включает в себя мои ISP-серверы имен. Rebooted просто чтобы убедиться , и он все еще там , но /run/resolvconf/interface/lo.named получил сбрасываются: nameserver 127.0.0.1.

Любопытно, что перезапуск сети все еще работает: /etc/resolv.confвсе еще содержит мои ISP-серверы имен. Я не могу объяснить это (может кто-то?), Но это может помочь кому-то застрять в одном месте.


Это, вероятно, вызвано dnsmasq. Вы можете просто удалить его с помощью apt-get remove dnsmasqили обновить конфигурацию в /etc/dnsmasq.conf.
— Томбарт

2

добавьте свой сервер имен в файл /etc/resolvconf/resolv.conf.d/head. Файл содержит сообщение, которое вы получили:

этот файл должен выглядеть следующим образом после добавления 8.8.8.8

root@hvnatvcc: ~ # 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
nameserver 8.8.8.8

3
Добавление строк в /etc/resolvconf/resolv.conf.d/head - плохое решение, даже хуже, чем добавление строк в /etc/resolvconf/resolv.conf.d/base. Правильным решением для интерфейсов, настроенных с помощью ifup, является добавление строк "dns-search" и "dns-nameservers" в разделы в / etc / network / interfaces. Смотрите также мои комментарии к другим ответам.
— Jdthood

3
Это единственное, что действительно сработало для меня ... и, кажется, трудно понять, почему ни одно из "правильных" решений не работает.
— silverjam

1

добавьте в последнюю строку, например:

nameserver 8.8.8.8

Откройте терминал и введите

sudo chattr +i /etc/resolv.conf

+ я позаботился о том, чтобы файл не перезагружался при загрузке.

Отменить вышеуказанное

sudo chattr -i /etc/resolv.conf

Для большего

man chattr

1

Другие решения не работали для меня в моей системе Fedora 20. Моя конкретная проблема заключалась в том, что строка «search» в /etc/resolv.conf была перезаписана. Вот что это исправило. (Это предполагает, что NetworkManager производит строку, search rn.yourcompany.com и вы хотите, чтобы она была search rn.yourcompany.com yourcompany.com intnet.yourcompany.com:

1. Используйте команду ifconfig, чтобы узнать, какой интерфейс представляет интерес:

$ ifconfig
  :
  :

em2:  <this was the one which was connected>

2. Войдите в систему и перейдите в каталог сетевых устройств конфигурации системы:

$ sudo su -[sudo] 
password for youruser:
# cd /etc/sysconfig/networking/devices`
  1. Используйте ваш любимый доступный редактор, чтобы добавить Domainстроку с дополнительными доменами для поиска:

DOMAIN="yourcompany.com intnet.yourcompany.com"

Сохраните, выйдите из системы и снова войдите в систему. Теперь в NetworkManager должна быть строка \etc\resolve.conf:

search rn.yourcompany.com yourcompany.com intnet.yourcompany.com

3
Не для дождя на вашем параде, но это Ask Ubuntu, и поэтому Fedora не по теме.
— Flimm

1

Добавить записи в /etc/resolvconf/resolv.conf.d/head

echo 'search puppetmaster.com' | sudo tee -a /etc/resolvconf/resolv.conf.d/head
echo 'nameserver 192.168.1.XXX' | sudo tee -a /etc/resolvconf/resolv.conf.d/head

и выполните следующую команду

sudo resolvconf -u

1

Для Ubuntu Server 18 Netplan - новая утилита для настройки сети.

# cd /etc/netplan

Затем отредактируйте запись адресов серверов имен в файле yaml (используйте правильный отступ). Например, если вы используете DNS-серверы Google:

nameservers:
    addresses: [8.8.8.8,8.8.4.4]

Перезапустить сервис

# netplan apply

Смотрите https://netplan.io/

https://www.techrepublic.com/article/how-to-set-dns-nameservers-in-ubuntu-server-18-04/


0

Если вы используете DHCP, отредактируйте, /etc/dhcp/dhclient.confчтобы добавить дополнительные DNS-серверы:

prepend domain-name-servers 12.34.56.78, 12.34.56.79;

Клиент DHCP перезаписывает dns-nameserversв систему, etc/network/interfacesи я думаю , что в /etc/resolvconf/resolv.conf.d/baseтоже.

Это работало для меня на сервере Ubuntu 14.04.3.

Смотрите подробности в вики Debian NetworkConfiguration .


0

Просто сделайте резервную копию вашего resol.conf, удалите пакет resolvconf и отредактируйте файл /etc/resolv.conf так, как вам нужно.

apt-get remove -y resolvconf
echo 'nameserver 8.8.8.8' > /etc/resolv.conf

Мы должны иметь право не использовать плохое программное обеспечение, такое как resolvconf.

Кстати, поле поиска в /etc/resolv.conf бесполезно.


0

Использование resolvconfи отключение systemd-resolved.service(это работает для меня Ubuntu 19.04):

  1. устанавливать resolvconf

    sudo apt install resolvconf
    
  2. Добавление серверов имен

    Откройте /etc/resolvconf/resolv.conf.d/baseс помощью вашего текстового редактора, я использую vim.

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

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

    nameserver 1.1.1.1
    nameserver 1.0.0.1
    
  3. обновление resolv.conf

    sudo resolvconf -u
    
  4. Отключить systemd-resolved.serviceи перезагрузить. nameserver 127.0.0.53не написано /etc/resolv.conf.

    sudo systemctl disable systemd-resolved.service
    sudo reboot
    

Готово!

Источник


Не могли бы вы указать, для какой версии Ubuntu вы это сделали? Оригинальный вопрос относится к Ubuntu 12.04, поскольку давно устарел.
— Марк Ванхомиссен

0

Я нашел это самое простое исправление. Если у вас есть resolv.confи resolvconfфайлы, они будут наступать друг на друга. Вам нужно удалить resolv.confфайл, который получает и перезаписывает каждый раз, когда вы делаете перезагрузку.

Поместите nameserver 1.1.1.1 1.0.0.1внизу файла resolvconf и затем запустите

sudo rm /etc/resolv.conf

Чтобы избавиться от файла. Затем сделайте перезагрузку и все заработает.


0

Ми решение на 12.04:

Я заметил, что если вы добавляете dns-nameserver в интерфейсах, которые не принимают серверы разрешения имен

справочная страница resolvconf

Чтобы не допустить изменения resolv.conf при редактировании вручную, сделайте это в терминале:

sudo resolvconf –disable-updates

после:

sudo resolvconf -a eth0 # or your network interface

затем вручную отредактируйте, /run/resolvconf/resolv.confдобавив максимум два DNS-сервера.

Затем перезапустите сервис:

sudo /etc/init.d/networking restart

4
Это очень не правильный путь , чтобы решить эту проблему.
— Jdthood

1
@jdthood, как кто-то просматривает это, вы можете уточнить, ПОЧЕМУ это не правильный путь? Это кажется мне логичным, но я ничего не знаю об этом.
— ErikPerik

-1

Просто положить

dns-search google.com && dns-nameservers (sample: 8.8.8.8)

Команда в вашей /etc/network/interfacesконфигурации. затем перезагрузите вашу сеть.

он должен работать.


-2

Эта конфигурация объявлена ​​в /etc/default/bind9

RESOLVCONF=no|yes

нет = не применять условие вinit.d bind9

да , или другое значение = переопределитьresolv.conf

Эта проблема возникает при установке bind9и не заботится о проверке всех конфессий.

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