Як я включаю рядки до resv.conf, які не втратяться при перезавантаженні?


172

Я остаточно переїхав до 12.04 з 7.10. У мене є остання частина, яку я повинен виконати, але я спотиканий. Я використовую Puppet на кожному сервері, і раніше я включив адресу серверу імен та ім'я пошуку домену для лялькового майстра в разрешен.conf.

search puppetmaster.com
nameserver 192.168.1.XXX

У 12.04 резолюція.conf перезаписується при перезавантаженні. Я не можу використовувати статичний IP для них, тому використання / etc / network / інтерфейсів, щоб допомогти мені, є нульовим моментом.

# 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

Чи є спосіб отримати reslavconf, щоб впоратися з цим або в голові, в хвості або в основі? Якщо є, чи є приклади, які я можу використовувати для налаштування на своєму сервері.

Будь-яка допомога дуже цінується.


2
resoluvconf - це погана програма, просто видаліть її та керуйте /etc/resolv.conf старим способом.
— бронзова людина

Відповіді:


133

Напевно, краще, щоб ваш DNS-сервер міг вирішити "маріонетку" на потрібну адресу, або щоб ваш DHCP-сервер роздавав адресу сервера імен DNS і список пошуку, або ще (якщо у вас статичні IP-адреси) мати щось подібне наступні в / etc / network / інтерфейси.

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

Потім скажіть резолюціїconf відновлюватись resolv.conf.

sudo resolvconf -u

13
Хоча ця відповідь має голоси, і перша частина більш-менш правильна, друга частина відповіді невірна. (1) Як НЕ помістити рядок «пошук» в /etc/resolvconf/resolv.conf.d/head. Якщо ви помістите туди рядок "пошук", цей рядок буде ігноровано, якщо резолювконф містить рядок "пошук" в динамічній частині файлу резолюції.conf. Резолютор glibc ігнорує всі, крім останнього рядка "пошук" або "домен". Див. Резолюцію.conf (5). (2) Якщо змінено конфігурацію reslavconcon, ви не повинні перезавантажувати завдання reslavconcon, а просто запустити оновлення, "resolutionvconf -u".
— jdthood

1
Я видалив лінію. Іншим варіантом буде використання хвоста замість голови.
— tgm4883

6
@tishma: Привіт. По-перше, для запобігання будь-якого непорозуміння: нічого не записує в основні, головні або хвостові файли. Нічого не записується в файли /etc/resolvconf/resolv.conf.d/ під час виконання. Ці файли зчитуються дозволом resvconf, який збирає їх вміст у файл, який він пише --- /run/resolvconf/resolv.conf ---, на який вказує символьне посилання /etc/resolv.conf. По-друге, щодо того, що робити після зміни параметрів dns- * в / etc / network / interfaces. Ви НЕ запускати «/etc/init.d/networking перезавантаження»; що зараз застаріло. Замість цього ifdown інтерфейс, про який йде мова, і ifup його знову.
— jdthood

4
14.04 ця відповідь нічого не зробила для мене.
— Джей Салліван

2
Якщо все інше не вдається .. $ sudo resolutionconf -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 щодо будь-яких налаштувань reslavvconf, тому це має бути найкращою відповіддю.
— Alex R

6
/etc/init.d/networking restartне працював на моїй машині, але sudo ifdown -aпотім sudo ifup -aзробив. (Крім того, мені знадобилося трохи зрозуміти, що мені довелося замінити dnsserveripщось на кшталт 8.8.8.8; я відчуваю себе трохи дурним.)
— Jason Gross

спробуйте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

Позначте синтаксис як коментар, використовуючи #кожен рядок або просто видаліть кожен сервер імен запиту. У 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 способів зробити одне!
— Willa O Ng'wana

І тоді ви можете перевірити, що /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що не загубиться при перезавантаженні, - це включити його у файли конфігурації reslavconcon, які знаходяться у:

/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

Це фактично правильна відповідь! Нарешті!
— користувач77232

6

Для мене вищевказані відповіді були недостатніми з наступних причин:

  • Я не використовую resolvconf, просто просто /etc/resolv.conf.
  • Використання chattr +iдля блокування resolv.confздається занадто хитким. Мені потрібна Лялечка, щоб мати змогу вносити зміни, коли це необхідно.
  • 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-скрипт містить інформацію про сценарій конфігурації мережі клієнта DHCP, згаданий вище.
— hecke

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

3

Це може бути просто якась дивна химерність у моїй машині, але у когось іншого може бути такий же кутовий випадок.

Я перепробував численні способи, щоб мої сервери імен провайдера не були успішно включені в /etc/resolv.conf:

  • Я включив їх у /etc/network/interfacesта відновив мережу. Вони не з'явились у /etc/resolv.conf.

  • Я викладаю їх /etc/resolv.confявно, але вони, звичайно, переписуються. Вони з'явились у /run/resolvconf/interface/eth0.inet, але ніколи не домоглися цього /etc/resolv.conf.

  • Я спробував налаштувати resoluvconf для динамічних оновлень. Без змін.

Нарешті я десь прочитав, що якщо локальна машина (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все ще включає мої сервери імен провайдера. Rebooted просто щоб переконатися , і він все ще там , але /run/resolvconf/interface/lo.named отримав скидаються: nameserver 127.0.0.1.

Цікаво, що перезапуск мережі все ще працює: /etc/resolv.confвсе ще містяться мої сервери імен провайдера. Я не можу пояснити це (може хтось?), Але це може допомогти комусь застрягти в тому ж місці.


Це, ймовірно, викликано 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. Моя особлива проблема полягала в тому, що рядок "пошук" у /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 Wiki .


0

Просто створіть резервну копію свого разрешительного файла.conf і видаліть розділ резолюціїconf і відредагуйте файл /etc/resolv.conf у будь-що, що вам потрібно.

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

Ми повинні мати право не використовувати поганого програмного забезпечення, наприклад, резолювконф.

До речі, поле пошуку в /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внизу файла Resolconcon і запустіть

sudo rm /etc/resolv.conf

Щоб позбутися файлу. Потім зробіть перезапуск і все спрацює.


0

Ми рішення 12.04:

Я помітив, що якщо ви додасте dns-nameserver в інтерфейси, які не приймають сервери роздільної здатності імен

Сторінка людини resoluvconf

Щоб резолюція.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, коли хтось переглядає це, ви можете пояснити, Чому це не правильний шлях? Мені це здається логічним, але я нічого про це не знаю.
— ЕрікПерік

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