Як виправити розв’язання DNS, яке не працює після оновлення до Ubuntu 13.10 (Saucy)


64

Після оновлення до 13.10 не вдалося вирішити DNS. Здається, сервери DNS, які я отримую через DHCP (LAN), не використовуються.

Я можу тимчасово вирішити проблему, додавши nameserver 8.8.8.8до /etc/resolv.conf. Але тоді хости інтрамережі все-таки вирішити неможливо.

При натисканні на пункт меню Інформація про підключення індикатора мережі, первинний DNS і вторинний DNS встановлені правильно. Але мій комп'ютерні шви не користуватися ними.

Тож мої запитання:

  • Що я маю вкласти resolv.conf, якщо що?
  • Як дізнатися, на які сервери імен запитується мій комп’ютер?
  • Куди дивитись далі, щоб дізнатися, чому сервери імен, отримані DHCP, не використовуються?

2
Я отримав те саме питання при переході з 12.04 до 14.04.
Тарраш

6
З моменту оновлення до 16.10 у мене були щоденні збої в DNS кілька днів тому.
WindRider

@WindRider мають таку ж проблему, фокус із dnsmasq нижче, здається, працює.
Сур

У мене виникла проблема з новою установкою Lubuntu 17.04 і вирішив її, вручну додавши потрібні URL-адреси до файлу хостів: askubuntu.com/a/936972/34298
rubo77

Відповіді:


83

Спочатку потрібно трохи дізнатися про те, як працює розв’язання імен в Ubuntu з часу Ubuntu 12.04.

Stéphane Грабер блозі деякою інформацією про нього в минулому році тут . Найголовніше, що потрібно знати, це те, що і Ubuntu Server, і Ubuntu Desktop використовують Resoluconf для управління resolv.confфайлом. Це означає, що вам більше не слід редагувати /etc/resolv.confбезпосередньо; натомість слід налаштувати утиліту конфігурації мережевого інтерфейсу, щоб надати потрібну інформацію до resvconf. Для сервера Ubuntu сервісом конфігурації мережевого інтерфейсу є ifup і він налаштований файлом /etc/network/interfaces. Для Ubuntu Desktop утиліта налаштування мережевого інтерфейсу - NetworkManager . Це те, що ти використовуєш.

NetworkManager налаштовується за допомогою індикатора мережі> Редагувати з'єднання . Однак для мережевих інтерфейсів, налаштованих DHCP, зазвичай не потрібно змінювати будь-які налаштування вручну. Зазвичай відбувається те, що (віддалений) DHCP-сервер надає NetworkManager як IP-адресу для локального інтерфейсу, так і адресу (віддаленого) сервера імен DNS, який потрібно використовувати. NetworkManager запускає екземпляр сервера перенаправлення імен, який прослуховує локально за номером 127.0.1.1. Ця електронна адреса 127.0.1.1, відправляється Resolvconf , який ставить nameserver 127.0.1.1в/etc/resolv.conf. NetworkManager також надає (віддалену) IP-адресу сервера імен, що надається DHCP, серверу імен переадресації. Таким чином, програма, що працює в локальній системі, просить резолютора перевести ім'я хоста в IP-адресу; резольвер запитує локальний сервер перенаправлення імен на 127.0.1.1; сервер імен перенаправлення запитує віддаленого сервера імен, про який йому було сказано, отримує відповідь і відправляє його назад в ланцюг.

NetworkManager спілкується з сервером переадресації імен через D-Bus. Ви можете побачити, що NetworkManager сказав серверу імен переадресації, виконавши команду

nmcli dev list iface eth0 | grep IP4.DNS

Оновлення, що випливає з коментарів:
Зауважте, що resvconf насправді записує файл, /run/resolvconf/resolv.confна який /etc/resolv.confповинен бути символічним посиланням. Якщо /etc/resolv.confце не символічне посилання, то вам потрібно його відтворити. Для цього ви можете бігти

sudo dpkg-reconfigure resolvconf

або

sudo ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf        

Дуже дякую за цю інформацію. У моєму випадку команда показує правильні сервери DNS. Але файл resolutionf.conf не оновлюється. Він має часові позначки від того часу, коли я розмістив свої значення там. Тому мені доведеться з’ясувати, чому rezlvconf не пише файл.
Witek

15
Resolvconf насправді пише файл /run/resolvconf/resolv.conf та /etc/resolv.conf, як належить, символічним посиланням на /run/resolvconf/resolv.conf. Якщо ви видалили /etc/resolv.conf, ви видалили символічне посилання. Для відтворення символічного посилання ви можете запустити sudo dpkg-reconfigure resolvconfабо зробити цеmv /etc/resolv.conf /run/resolvconf/resolv.conf && ln -s ../run/resolvconf/resolv.conf /etc/resolv.conf
jdthood

7
У цьому є все, крім «виправлення». Як я можу вирішити цю проблему?
Амаль Муралі

5
Виправлення може бути запущено, sudo dpkg-reconfigure resolvconfяк було запропоновано в останній частині відповіді.
jdthood

Дякую!!! Я не впевнений, що сталося з моєю системою, але запуск, sudo dpkg-reconfigure resolveconfздавалося, працює чудово!
meanbunny

49

Я вніс зміни, запропоновані за посиланням нижче (відключення dnsmasq). Зараз все чудово працює! http://www.ubuntugeek.com/how-to-disable-dnsmasq-in-ubuntu-12-04precise.html

Відкрити /etc/NetworkManager/NetworkManager.confфайл.

sudo gedit /etc/NetworkManager/NetworkManager.conf

Прокоментуйте рядок як:

#dnsmasq deactivated
#dns=dnsmasq

4
Після коментування Dnsmasq, вам необхідно перезапустити менеджер мережі: sudo restart network-manager.
Дон Кіркбі

2
У моєму випадку (Xubuntu) команда така: sudo /etc/init.d/network-manager restart
aviram83

Якщо у вас це трапляється, навіть якщо не встановлено dnsmasq і немає нічого, що можна навіть коментувати, додайте dns=defaultдо [main]розділу. NetworkManager має власний неприємний плагін dnsmasq, який він використовуватиме інакше.
dstibbe

1
Мені потрібно зробити цей перезапуск network-manager-sudo service network-manager restart
Sungam

Один мій ящик не мав dns після оновлення до 17.10, і, виявляється, /etc/resolv.conf не був символічним посиланням. Виправлено це. Ще одне поле не закінчило оновлення, і я знайшов .dpkg-новий файл у dir, відмінні від них, головна відмінність - dnsmasq. Скопіював це і працював, не перезавантажуючи жодного демона
лютого

20

EDIT 2: Попереднє повідомлення було справедливо видалено модерацією, я публікую те, що знайшов рішення. Вибачте за це.

EDIT: Я щойно знайшов відповідь, і це на цій самій сторінці - вибачте за міопію. Я опублікував свої висновки нижче, розширивши правильну відповідь Річарда Ліндштедта, знайденого на цій сторінці. Я залишив своє раннє бурчання для трохи контексту. Будь ласка, підкресліть відповідь Річарда, він це заслуговує.

Це насправді дуже просто.

просто відкрийте конф-файл вашого інтерфейсу -> sudo vi / etc / network / interfaces

Це точно не допомогло ОП і не допомагає мені зараз. Ми не хочемо статичних адрес, ми хочемо використовувати ті, які надсилає нам сервер DHCP. Схоже, NetworkManager розпізнає їх, але Ubuntu прямо ігнорує їх:

# nmcli dev list iface wlan0 | grep IP4.DNS
IP4.DNS[1]:          10.*.*.*
IP4.DNS[2]:          10.*.*.*
IP4.DNS[3]:          8.8.8.8

Але ...

# dig microsoft.com
; <<>> DiG 9.9.5-4.3-Ubuntu <<>> microsoft.com
;; global options: cmd
;; connection timed out; no servers could be reached

І мій / etc / network / інтерфейси:

auto lo
iface lo inet loopback

що трохи дивно, я б очікував, що тут будуть оголошені всі інтерфейси (чи я щось пропускаю?).

Отже, коротше:

  • Я не возився ні з одним файлом для початку
  • Я вже бігав dpkg-reconfigure resolvconf
  • Праве симпосилання є на місці
  • NetworkManager отримує правильні DNS-сервери від DHCP
  • Ubuntu НЕ використовує таких адрес
  • Вирішення проблеми полягає в тому, щоб встановити фіксовану 8.8.8.8 на / etc / network / інтерфейси, Яких НЕ ХОЧУ
  • Я хочу використовувати надані DHCP сервери DNS у будь-яких ситуаціях.

Не відкривати інший потік, тому що це точна проблема, за винятком того, що я зараз на 14.10 (але це мене натякає з моменту оновлення з 12.10 до 13.04).

РІШЕННЯ

Ця остання фраза вивела мене на правильний шлях, і лише тоді я помітив відповідь Річарда.

Здається, проблема пов'язана з конфліктом dnsmasqта resolvconfпакетами. До 12.10 dnsmasqвикористовувався. З 13.04 по тому Ubuntu, здавалося, перейшов на гібрид dnsmasq / resolutionvconf, де ви встановили пакунки dnsmasq-baseі resolvconf, але не dnsmasqсам.

Я не можу сказати, чи це помилка в скриптах оновлення для 13.04 або щось інше, тому що при оновленні (як і в новому встановленні) встановлено Reslavvconf, dnsmasq-базу оновлюють, а dnsmasq (правильно) видаляють.

Суть в тому, що сценарій оновлення не коментує dns=dnsmasqрядок в /etc/NetworkManager/NetworkManager.conf. Тож, хоча демона dnsmasq більше немає в системі, /etc/resolv.conf все ще очікує, що це буде.


ЦЕ НАСТУПНО!
метадінги

1
OMG це вирішило мої проблеми з DNS у мене протягом останніх 3 років! Якщо у вас є dnsmasqі dnsmasq-baseвстановлений, NM помістить 127.0.0.1в /etc/resolv.confзамість 127.0.1.1. Я просто видалив dnsmasq(і включив NM), і все працює чудово.
користувач1129682

4
Майбутні службовці Google повинні зазначити, що ви повинні зробити sudo service network-manager restartце для вступу в силу.
таймеллер

Хороший момент у перезапуску менеджера сервісної мережі!
Анріке

7

Це насправді дуже просто.

просто відкрийте конф-файл вашого інтерфейсу -> sudo vi / etc / network / interfaces

і під вашим інтерфейсом (можливо, eth0) ви побачите всі звичні конфігурації.

address 192.168.22.71
netmask 255.255.255.0
gateway 192.168.22.1

Після шлюзу просто додайте "dns-nameservers 8.8.8.8 8.8.8.9" або будь-який сервер імен, який ви збираєтеся використовувати.

Отже, ваш конфігурація повинен бути:

address 192.168.22.71
netmask 255.255.255.0
gateway 192.168.22.1
dns-nameservers 8.8.8.8 8.8.8.9

тоді просто зробіть «перезапуск сервісної мережі« sudo », і ви готові йти!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.