Jak naprawić rozpoznawanie DNS, które nie działa po aktualizacji do Ubuntu 13.10 (Saucy)

64

Po aktualizacji do 13.10 moje rozpoznawanie DNS kończy się niepowodzeniem. Wygląda na to, że serwery DNS, które otrzymuję przez DHCP (LAN) nie są używane.

Mogę tymczasowo rozwiązać problem, dodając nameserver 8.8.8.8do /etc/resolv.conf. Ale wtedy hostów intranetowych nadal nie można rozwiązać.

Po kliknięciu pozycji menu Informacje o połączeniu na wskaźniku sieci, Podstawowy DNS i Dodatkowy DNS są ustawione poprawnie. Ale mój komputer wydaje się nie używać ich.

Więc moje pytania:

  • W co powinienem włożyć resolv.conf?
  • Jak dowiedzieć się, o które serwery nazw pyta mój komputer?
  • Gdzie dalej szukać, aby dowiedzieć się, dlaczego nie używa się serwerów nazw odbieranych przez DHCP?
Witek
źródło
2
Ten sam problem wystąpił podczas aktualizacji z 12.04 na 14.04.
Tarrasch
6
Mam codzienne awarie DNS od czasu aktualizacji do 16.10 kilka dni temu.
WindRider
@WindRider ma ten sam problem, sztuczka z dnsmasq poniżej wydaje się działać.
Suor
Miałem problem ze świeżą instalacją Lubuntu 17.04 i rozwiązałem go ręcznie dodając potrzebne adresy URL do pliku hosts: askubuntu.com/a/936972/34298
rubo77

Odpowiedzi:

83

Najpierw musisz dowiedzieć się trochę o tym, jak działa rozpoznawanie nazw w systemie Ubuntu od wersji Ubuntu 12.04.

Stephane Graber blogu kilka informacji o nim w zeszłym roku tutaj . Najważniejsze, aby wiedzieć, że zarówno Ubuntu Server, jak i Ubuntu Desktop używają resolvconf do zarządzania resolv.confplikiem. Oznacza to, że nie powinieneś już edytować /etc/resolv.confbezpośrednio; zamiast tego należy skonfigurować narzędzie do konfiguracji interfejsu sieciowego, aby zapewniało właściwe informacje do resolvconf. W przypadku Ubuntu Server narzędziem do konfiguracji interfejsu sieciowego jest ifup i jest ono konfigurowane przez plik /etc/network/interfaces. W przypadku Ubuntu Desktop narzędziem do konfiguracji interfejsu sieciowego jest NetworkManager . Tego właśnie używasz.

NetworkManager jest konfigurowany za pomocą wskaźnika Sieć> Edytuj połączenia . Jednak w przypadku interfejsów sieciowych skonfigurowanych przez DHCP zwykle nie trzeba ręcznie zmieniać żadnych ustawień. Zwykle dzieje się tak, że (zdalny) serwer DHCP przekazuje NetworkManagerowi zarówno adres IP dla lokalnego interfejsu, jak i adres (zdalnego) serwera nazw DNS do użycia. NetworkManager uruchamia instancję przekierowującego serwera nazw, który nasłuchuje lokalnie pod adresem 127.0.1.1. Ten adres 127.0.1.1, zostanie wysłany do resolvconf co stawia nameserver 127.0.1.1w/etc/resolv.conf. NetworkManager przekazuje również (zdalny) adres IP serwera DNS dostarczonego przez DHCP do serwera nazw przesyłania dalej. Tak więc program działający w systemie lokalnym prosi resolvera o przetłumaczenie nazwy hosta na adres IP; resolver wysyła zapytanie do lokalnego serwera nazw przekazywania o numerze 127.0.1.1; przekazujący serwer nazw wysyła zapytanie do zdalnego serwera nazw, o którym zostało powiedziane, odbiera odpowiedź i wysyła ją z powrotem do łańcucha.

NetworkManager komunikuje się z procesem przesyłania nazw serwera przez D-Bus. Możesz zobaczyć, co NetworkManager powiedział przekazującemu serwerowi nazw, uruchamiając polecenie

nmcli dev list iface eth0 | grep IP4.DNS

Aktualizacja wynikająca z komentarzy:
Zauważ, że resolvconf faktycznie zapisuje plik, /run/resolvconf/resolv.confdo którego /etc/resolv.confma być dowiązanie symboliczne. Jeśli /etc/resolv.confnie jest dowiązaniem symbolicznym, musisz go ponownie utworzyć. Aby to zrobić, możesz uruchomić

sudo dpkg-reconfigure resolvconf

lub

sudo ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf        
jdthood
źródło
Dziękuję bardzo za tę informację. W moim przypadku polecenie pokazuje prawidłowe serwery DNS. Ale plik resolf.conf nie jest aktualizowany. Ma sygnaturę czasową od momentu umieszczenia tam moich wartości. Będę musiał dowiedzieć się, dlaczego resolvconf nie zapisuje pliku.
Witek
15
Resolvconf faktycznie zapisuje plik /run/resolvconf/resolv.conf i /etc/resolv.conf ma być dowiązaniem symbolicznym do /run/resolvconf/resolv.conf. Jeśli usunąłeś /etc/resolv.conf, to usunąłeś dowiązanie symboliczne. Aby odtworzyć dowiązanie symboliczne, możesz uruchomić sudo dpkg-reconfigure resolvconflub możeszmv /etc/resolv.conf /run/resolvconf/resolv.conf && ln -s ../run/resolvconf/resolv.conf /etc/resolv.conf
jdthood,
7
Ma to wszystko oprócz „poprawki”. Jak mogę rozwiązać ten problem?
Amal Murali
5
Poprawka może być uruchomiona sudo dpkg-reconfigure resolvconfzgodnie z sugestią podaną w ostatniej części odpowiedzi.
jdthood
Dziękuję Ci!!! Nie jestem pewien, co się stało z moim systemem, ale uruchomienie sudo dpkg-reconfigure resolveconfwydawało się działać świetnie!
meanbunny,
49

Dokonałem zmiany sugerowanej na poniższym linku (wyłączenie dnsmasq). Teraz wszystko działa świetnie! http://www.ubuntugeek.com/how-to-disable-dnsmasq-in-ubuntu-12-04precise.html

Otwórz /etc/NetworkManager/NetworkManager.confplik.

sudo gedit /etc/NetworkManager/NetworkManager.conf

Skomentuj wiersz jako:

#dnsmasq deactivated
#dns=dnsmasq
Richard Lindstedt
źródło
4
Po zakomentowanie dnsmasq, trzeba ponownie uruchomić menedżera sieci: sudo restart network-manager.
Don Kirkby,
2
W moim przypadku (Xubuntu) polecenie brzmi: sudo /etc/init.d/network-manager restart
aviram83 26.04.16
Jeśli tak się dzieje, mimo że dnsmasq nie jest zainstalowany i nie ma nawet nic do komentowania, dodaj dns=defaultdo [main]sekcji. NetworkManager ma własną nieprzyjemną wtyczkę dnsmasq, której użyje inaczej.
dstibbe,
1
Muszę to zrobić restart network-manager-sudo service network-manager restart
Sungam
Jedno z moich urządzeń nie miało dns po aktualizacji do 17.10 i okazuje się, że /etc/resolv.conf nie był dowiązaniem symbolicznym. Naprawione. Inne pudełko nie zakończyło aktualizacji i znalazłem plik .dpkg-nowy w katalogu, różnią się, główną różnicą jest dnsmasq. Skopiowałem go i działało bez restartu dowolnego demona
fchen
20

EDYCJA 2: Poprzedni post został słusznie usunięty przez moderatora, publikuję to, co uważam za rozwiązanie. Przepraszam za to.

EDYCJA: Właśnie znalazłem odpowiedź i jest na tej samej stronie - przepraszam za moje zawiłości. Poniżej opublikowałem swoje odkrycia, poszerzając poprawną odpowiedź Richarda Lindstedta znalezioną na tej stronie. Opuściłem swoje wczesne dudnienie dla nieco kontekstu. Proszę głosować za odpowiedzą Richarda, on na to zasługuje.

To jest naprawdę bardzo łatwe.

wystarczy otworzyć plik conf interfejsów -> sudo vi / etc / network / interfaces

To z pewnością nie pomogło OP i nie pomaga mi teraz. Nie chcemy adresów statycznych, chcemy użyć tych, które wysyła nam serwer DHCP. NetworkManager wydaje się je rozpoznawać, ale Ubuntu tępo je ignoruje:

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

Ale...

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

A mój / etc / network / interfaces to:

auto lo
iface lo inet loopback

co jest nieco dziwne, oczekiwałbym, że wszystkie interfejsy zostaną zadeklarowane tutaj (czy coś mi brakuje?).

Krótko mówiąc:

  • Na początku nie zadzierałem z żadnym plikiem
  • Już biegnę dpkg-reconfigure resolvconf
  • Właściwe dowiązanie symboliczne jest na swoim miejscu
  • NetworkManager pobiera prawidłowe serwery DNS z DHCP
  • Ubuntu NIE używa takich adresów
  • Obejściem tego problemu jest umieszczenie stałej wersji 8.8.8.8 na interfejsach / etc / network /, których NIE CHCĘ
  • Chcę używać serwerów DNS udostępnianych przez DHCP w każdej sytuacji.

Nie otwieram kolejnego wątku, ponieważ jest to dokładny problem, z wyjątkiem tego, że mam teraz 14.10 (ale dokucza mi to od czasu aktualizacji z 12.10 na 13.04).

ROZWIĄZANIE

To ostatnie zdanie sprawiło, że znalazłem się na właściwej drodze, i dopiero wtedy zauważyłem odpowiedź Richarda.

Problem wydaje się być związany z konfliktem dnsmasqi resolvconfpakietami. Do 12.10 dnsmasqużywano. Począwszy od 13.04, Ubuntu wydawało się przechodzić na hybrydę dnsmasq / resolvconf, w której zainstalowałeś pakiety dnsmasq-basei resolvconf, ale nie dnsmasqsam.

Nie mogę powiedzieć, czy jest to błąd w skryptach aktualizacji dla 13.04 lub coś innego, ponieważ podczas aktualizacji (jak w nowych instalacjach) resolvconf jest instalowany, dnsmasq-base jest aktualizowany, a dnsmasq jest (poprawnie) odinstalowywany.

Chwytem jest to, że skrypt aktualizacji nie komentuje dns=dnsmasqlinii w /etc/NetworkManager/NetworkManager.conf. Tak więc, mimo że demon dnsmasq nie jest już obecny w systemie, /etc/resolv.conf nadal tego oczekuje.

Henrique
źródło
TO JEST NIESAMOWITE!
metadżety
1
OMG rozwiązało to moje problemy z DNS, które miałem przez ostatnie 3 lata! Jeśli masz dnsmasqi dnsmasq-basezainstalowany, NM będzie umieścić 127.0.0.1w /etc/resolv.confzamiast 127.0.1.1. Po prostu odinstalowałem dnsmasq(i włączyłem NM) i wszystko działa dobrze.
user1129682,
4
Przyszli Googlersi powinni pamiętać, że musisz sudo service network-manager restartto zrobić, aby zadziałało.
timelmer
Dobra uwaga na zrestartowaniu menedżera sieci usług!
Henrique
7

To jest naprawdę bardzo łatwe.

wystarczy otworzyć plik conf interfejsów -> sudo vi / etc / network / interfaces

a pod twoim interfejsem (prawdopodobnie eth0) zobaczysz całą zwykłą konfigurację.

address 192.168.22.71
netmask 255.255.255.0
gateway 192.168.22.1

Po bramie po prostu dodaj „dns-nameservers 8.8.8.8 8.8.8.9” lub inny serwer nazw, którego będziesz używać.

Więc twoja konfiguracja powinna być:

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

następnie po prostu uruchom ponownie usługę sieci sudo i możesz zacząć!

sprut
źródło