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

Я наконец-то перешел на 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 для обработки этого в голове, хвосте или основании? Если есть, есть ли примеры, которые я могу использовать для настройки на моем сервере.

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

21 ответ

Вероятно, лучше, чтобы ваш 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

Я думаю, что ответом является проверка вашего /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 (хотя этот скрипт устарел, он все еще работает).

Вероятно, это вызвано настройкой 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

Как и во многих других ответах, это связано с 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

Пожалуйста, посмотрите на 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.

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

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

  • Я не пользуюсь 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.

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

Я пробовал многочисленные способы включения моих имен серверов 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 серверов имен. Перезагрузился просто чтобы убедиться и все равно есть но /run/resolvconf/interface/lo.named получил сброс на: nameserver 127.0.0.1,

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

Добавить записи в /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

Это работает для меня 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 208.67.222.123

nameserver 208.67.220.123

3 - обновление resolv.conf

$ sudo resolvconf -u

4 Отключить systemd-resolved

Отключить systemd-resolved и перезагрузиться. nameserver 127.0.0.53 не записывается в /etc/resolv.conf.

$ sudo systemctl отключить systemd-resolved

$ sudo reboot

Готово!

Рекомендации

https://www.hiroom2.com/2017/08/24/ubuntu-1610-nameserver-127-0-0-53-en/

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

nameserver 8.8.8.8

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

sudo chattr +i /etc/resolv.conf

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

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

sudo chattr -i /etc/resolv.conf

Для большего

man chattr

Добавьте свой сервер имен в файл /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

Другие решения не работали для меня в моей системе 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

Для 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/

Другой способ - настроить resolvconf(8) на использование локального домена поиска и серверов имен, прежде чем запрашивать DHCP-домены поиска и серверы имен. Это достигается путем создания /etc/resolvconf.conf (sudo nano /etc/resolvconf.conf):

search_domains="nono.com"
name_servers="1.1.1.1 1.0.0.1"

Спасибо Брайану Кунни в главном блоге

ничего из вышеперечисленного не сработало для меня в Ubuntu 20.4 . В итоге я добавил следующую запись в свой корневой crontab

@reboot sleep 20 && /root/restoreDNS>/etc/restoreDNS.out 1>2&

в основном после 20 секунд загрузки; он выполняет сценарий оболочки, который копирует мою версию в /etc/resolv.conf, и это было хорошо для меня.

Английский перевод:

Мой решен. "только 12,4"

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

http://manpages.ubuntu.com/manpages/lucid/man8/resolvconf.8.html

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

sudo resolvconf –disable-updates

после:

sudo resolvconf -a eth0 # or your network Interfas

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

добавление максимум двух DNS-серверов. спасибо PS не забудь перезагрузить

sudo /etc/init.d/networking restart

Первоначальный текст:

соло убунту 12.4

Ми решение.

Он имеет доступ к общему серверу имен и интерфейсов, не имея разрешения на получение разрешения.

Gracias a la ayuda encontrada en esta pagina он решает проблему.

http://manpages.ubuntu.com/manpages/lucid/man8/resolvconf.8.html

Para hacer que resolv.conf no cambie cuando la editamos manualmente hacemos esto en la Terminal:

sudo resolvconf –disable-updates

Despues:

sudo resolvconf -a eth0 # o tu interfas de red

luego editamos manualmente /run/resolvconf/resolv.conf

agregando un maximo de 2 DNS-сервера. saludos PD no olvidar reiniciar:

sudo /etc/init.d/networking restart

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

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

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

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

Я нашел это самое простое исправление. Если у вас есть файлы resolv.conf и resolvconf, они будут сталкиваться друг с другом. Вам необходимо удалить файл resolv.conf, который перезаписывается при каждой перезагрузке. Поместите сервер имен 8.8.8.8 8.8.4.4 внизу файла resolvconf и затем выполните командуsudo rm /etc/resolv.conf чтобы избавиться от файла. Затем сделайте перезагрузку и все заработает.

Если вы используете 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.

Смотрите подробности в https://wiki.debian.org/NetworkConfiguration.

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

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

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

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

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

RESOLVCONF=no|yes

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

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

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

Другие вопросы по тегам