Як я включаю рядки до 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.