Як додати DNS-сервер через резоль.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файлу або використанням Менеджера мережі? Дякую.
Кухар Рендалл

3
@stgraber Що ви рекомендуєте для сервера Ubuntu? Я помітив із вашого блогу та коментарів, що Network-Manger, здається, є найкращим способом управління цим, але якщо встановити мережевий менеджер у моїй системі, то встановіть цілу купу речей, які мені не потрібні (наприклад, GUI-матеріали ).
Евері Чан

1
Яке поєднання додає записи до /etc/resolvconf/resolv.conf.d/head (відповідно до вашого блогу)?
sup

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 / інтерфейсів.
Кухар Randall Cook

90

Це здається, що ви говорите про пакет Resolconf.

Встановіть пакет resvconf .

Біжи

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 і використовую ifup, а не NetworkManager.

Насправді для мене вони зробили це простіше :), помістивши все це у файл / etc / network / interfaces. Ті самі конфігурації, які ви були б написані до reslav.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
Дякую. Це також стало моїм улюбленим методом. Зауваження поза темою: не потрібно вказувати "мережеві" та "широкомовні" адреси, оскільки вони автоматично обчислюються з "адреси" та "мережевої маски". Все, що вам дійсно потрібно, - це адреса, мережева маска та «шлюз».
Martijn Heemels

Це найчистіша відповідь. Просто переконайтесь, що правильно написано ключові слова 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?
Azendale

Якщо ви хочете дізнатися більше про конфігурацію dhclient, ви можете зробити це, man dhclient.confщоб отримати доступ до сторінки "dhclient man". (Це не відповідь на запитання Азендейла.)
Крістіан Скьодт,

Ця відповідь абсолютно неправильна. Перш за все, подавець запитання хоче додати адресу зовнішнього сервера namserver, а не адресу 127.0.0.1. Конфігуратор інтерфейсу для зовнішнього інтерфейсу - це не місце для додавання адреси для внутрішнього сервера імен. По-друге, файл знаходиться в / etc / dhcp, а не в / etc / dhcp3. По-третє, оскільки Ubuntu 12.04 такі речі конфігуруються за допомогою resolvconf.
jdthood

1
Перш за все - оригінальне запитання було кардинально змінено об'єднанням модераторів, тому моя відповідь, звичайно, виглядає дивно. Файл dhcp3 був місцем, коли я відповів на це в 2011 році , і навіть якщо це не ідеально, він працював. Я використовував це рішення на кількох машинах. Очевидно, ви б змінили адресу петлі на ту, яку хочете зробити попередньо. Я припускаю, що більшість людей знає, що таке зворотний зв'язок, навіть якщо вони не читали RFC6890.
belacqua

@jdthood Чому б не додати власну відповідь? Особисто я не був знайомий із способом виконання bsd-ish резолюvconf. Я віддав перевагу прямому /etc/resolv.conf підходу, і не знаю, у чому перевага нової системи Rube Goldberg. (Аналогічно з / etc / motd).
belacqua

7

resolvconfмарно. Я на сервері Linux, і моя IP-адреса статична, а мої DNS- сервери статичні. Мені не потрібен resolvconfабо NetworkManager .

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

Так що я зробив aptitude purge resolvconfі вручну переконався, що /etc/resolv.confце не символьна посилання, і просто створив статичний файл. Про всяк випадок, коли програма намагається змінити файл, я зробив це chattr +i(незмінний) /etc/resolv.confв якості запобіжного заходу.


4
Оскільки resoluvconf є частиною базової системи, видаляючи її, ви задаєте проблеми в майбутньому, під час оновлення.
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. Інформація, яку resvconf використовує від 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
Так, я не прихильник подібних змін, які впливають на сервери, додають складності та непрозорості. Це основна поведінка, яка не повинна змінюватися від релізу до випуску.
belacqua

Цій відповіді 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

Потім, як зазначено для більшості інших прикладів, зробіть 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-переконфігуруйте resolutionvconf

Перед цим використовуйте Менеджер мереж, щоб змінити адресу 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) адресами" лише ", і сьогодні я нарешті з'ясував, що ПОСТІЙНО НЕГОЛОВНО.

Проблема полягає у взаємодії між reslavconf та NetworkManager. Цей файл називається резолконф /etc/resolvconf/interface-order. Принаймні, у моїх системах NetworkManager взагалі відсутній у цьому файлі (за винятком того, що в кінці він охоплений символом * wild card). Отже, що відбувається - останній звіт dhclient до resoluvconf має перевагу над тим, що має сказати NetworkManager.

Таким чином, принаймні в моєму випадку, фактичну відповідь було додати

NetworkManager

вгорі або біля вершини /etc/resolvconf/interface-order.

(Так, я знаю, що багато людей просто кажуть "видалити резольконф", що здається мені поганою ідеєю саме по собі. Але більше того, принаймні хитрі та ксеніальні вважають резолюціюconf життєво важливою частиною системи [тобто ubuntu -мінімум від цього залежить], тому важко буде тримати вашу систему в послідовному, оновленому стані без резольконф.)

За запитом я можу надати більш детальну інформацію про те, як я це зрозумів. ( EDIT : мабуть, я цього не зробив, коли просив, вибачте. На даний момент я не пам'ятаю набагато детальніше, ніж те, що я кажу далі :) Коротше кажучи, я замінив виконуваний файл Reslavvconf оболонкою оболонки навколо нього який скидав свої аргументи, введення, виведення та stderr до файлів; і додав set -x до сценаріїв оновлення rezolconconf.

( EDIT : Я можу сказати, що я маю на увазі під першою частиною те, що я використовував sudo для переміщення фактичного виконуваного файлу Reslavvconf, який можна було знайти за допомогою команди, яка використовується або команда type. Потім створіть скрипт оболонки, який в кінцевому підсумку просто виконує переміщення resoluvconf, але також повторює аргументи до якогось файлу та використовує перенаправлення оболонки для надсилання stdin, stdout та stderr у різні інші файли. Я не пригадую, де знаходяться "сценарії оновлення resvconf" і наразі не можу легко перевірити. багато підлітків Linux можуть зрозуміти, що я маю на увазі; можливо, якийсь хороший самарянин надасть у коментарі ще більше деталей.)


Будь ласка, " надайте більш детальну інформацію про те, як ви це зрозуміли "
Pierre.Vriens


1

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

  1. Перейдіть до мережі

  2. Виберіть з'єднання, для якого потрібно налаштувати DNS.

  3. Щоб змінити установки бездротового з'єднання, виберіть вкладку Wireless, а потім виберіть відповідну бездротову мережу.

  4. Клацніть стрілку (праворуч) і у вікні, що з’явиться, виберіть вкладку IPv4 Settings або IPv6 Settings.

  5. Якщо вибраним методом є Автоматичний (DHCP), відкрийте спадне меню та виберіть лише автоматичні (DHCP) адреси. Якщо метод встановлений на щось інше, не змінюйте його.

  6. У поле DNS-серверів введіть IP-адреси DNS, розділені комою


0

0.Додайте тимчасовий DNS. Редагувати /etc/resolv.conf.

nameserver 4.4.4.4
nameserver 8.8.8.8

1.Установіть або оновіть резолюціюconf.

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.