Jak dodać serwer DNS za pośrednictwem resolv.conf?

207

Czy system Ubuntu 12.04 LTS (Precise Pangolin) jest /etc/resolv.confbezużyteczny ?

Widzę, że informacje o serwerze DNS są teraz przechowywane w NetworkManager . Narzędzie nmcliwiersza polecenia może to dla ciebie wyświetlić.

Jeśli chcę dodać jeszcze jeden serwer DNS , czy dodam go /etc/resolv.conf, korzystając z resolvconfpomocy pakietu?

PnotNP
źródło
2
Myślę polecenia wymienione powyżej powinny być nm-tool, nie nmcli.
Jesse Glick,

Odpowiedzi:

139

Jeśli /etc/resolv.confzawiera, nameserver 127.0.0.1to dodawanie wpisów do /etc/resolvconf/resolv.conf.d/tailtak naprawdę nic nie da.

Jeśli używasz NetworkManagera, powinieneś zamiast tego statycznie dodać adresy serwerów nazw poprzez wskaźnik sieci : Edytuj połączenia ... | Edytuj ... | Ustawienia IPv4 | Dodatkowe serwery DNS .

Jeśli naprawdę chcesz dodać więcej wpisów /etc/resolv.conf, utwórz /etc/resolvconf/resolv.conf.d/taili dodaj je tam.

Podobnie jak w przypadku każdej wersji Ubuntu, zaleca się przeczytać Informacje o wersji Ubuntu, dostępne tutaj:

Sekcje Pulpit i wspólna infrastruktura zawierają link do

stgraber
źródło
1
@stgraber, skomentuj alternatywne podejście, które znalazłem i opublikowałem poniżej. Jak to się ma do dodania /etc/resolvconf/resolv.conf.d/tailpliku lub korzystania z Network Managera? Dzięki.
Randall Cook
3
@stgraber Co polecasz dla Ubuntu Server? Zauważyłem z twojego bloga i komentarzy, że Network-Manger wydaje się być najlepszym sposobem na zarządzanie tym, ale wykonanie instalacji menedżera sieci w moim systemie zainstalowałoby całą masę rzeczy, których nie potrzebuję (tj. GUI ).
Avery Chan,
1
Co za dodawanie wpisów do /etc/resolvconf/resolv.conf.d/head (zgodnie z postem na blogu)?
sup
3
@AveryChan, użyj „trzeciego podejścia” sugerowanego przez @ randallcook - po prostu dodaj dns-nameserversdo swojej sekcji eth0 w /etc/network/interfaces.
mrm
1
/etc/resolvconf/update.d/libcna serwerze 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. (ustaw go /etc/default/resolvconf, jako wiersz 23 i 24 /etc/resolvconf/update.d/libcpokazu.
immeëmosol
134

Znalazłem tutaj inne podejście , które polega na dodaniu linii podobnej do poniższej /etc/dhcp/dhclient.conf:

prepend domain-name-servers x.x.x.x, y.y.y.y;

Podobnie znalazłem tutaj trzecie podejście , które polega na dodaniu wierszy do /etc/network/interfaces:

auto eth0
iface eth0 inet static
    . . .
    dns-nameservers 8.8.8.8 8.8.4.4

Aktualizacja: Oto oficjalna dokumentacja trzeciego podejścia.

Randall Cook
źródło
18
Głosowałem za tym, ponieważ third approachjest to zdecydowanie najprostszy sposób, aby to zrobić.
Billy Moon,
1
@billy Nie mogłem w ogóle uruchomić trzeciej metody. Tylko dla mnie działała pierwsza z wymienionych tutaj, edycja dclient.conf.
Jeff Atwood
9
Uwaga: Edycja pliku dhclient.conf ma jakikolwiek efekt tylko wtedy, gdy używany jest dhclient (i jest używany zarówno przez ifup, jak i NetworkManagera!) Edycja / etc / network / interfaces ma jakikolwiek efekt, jeśli jest używany ifup. Konfigurowanie połączeń NetworkManager za pomocą edytora połączeń NetworkManager ma jakikolwiek wpływ tylko wtedy, gdy używany jest NetworkManager.
jdthood
1
Jeśli się nie mylę, trzecie podejście dodaje kolejny serwer nazw PO tych zwracanych przez DHCP. Jeśli chcesz, aby pojawił się na pierwszym miejscu, jedna z pozostałych opcji jest bardziej odpowiednia. Użyłem /etc/resolvconf/resolv.conf.d/head(po przezwyciężeniu wprowadzającego w błąd komentarza „NIE EDYTUJ” tam :))
starfry
1
@ Mr.Hyde, to nie są polecenia wiersza poleceń, to wiersze do dodania do / etc / network / interfaces.
Randall Cook
90

Wygląda na to, że mówisz o pakiecie resolvconf.

Zainstaluj pakiet resolvconf .

Biegać

cd /etc/resolvconf/resolv.conf.d
sudo cp -p head head.orig  #backup copy, always do this
sudo nano head

Góra pliku jest przerażającym ostrzeżeniem. Plik /etc/resolv.conf jest generowany automatycznie z zawartości tego pliku; ostrzeżenie jest tam, więc zostanie umieszczone w /etc/resolv.conf po wygenerowaniu /etc/resolv.conf. Na końcu pliku dodaj

nameserver <ip_of_nameserver>

Naciśnij Ctrl xi odpowiedz „tak”, aby zapisać plik. Aby zakończyć, ponownie wygeneruj plik /etc/resolv.conf, aby zmiany zostały zastosowane w tej chwili:

sudo resolvconf -u

Następnie sprawdź zawartość pliku /etc/resolv.conf, aby zobaczyć, że dodana linia już tam jest. Ponadto będzie nadal dostępny przy następnym uruchomieniu komputera lub ponownym uruchomieniu usługi sieciowej, w zależności od tego, co nastąpi wcześniej.

Azendale
źródło
Informacje o ostrzeżeniu dotyczącym pliku są dokładnie tym, czego potrzebowałem. Miałem wrażenie, że nie powinienem edytować pliku! Dzięki!
Xunnamius
To dla mnie najlepsza odpowiedź!
Siwei Shen 申思维
31

Poniżej pokażę najlepszy sposób, jaki znalazłem, odkąd uruchamiam edycję Ubuntu Server i używam ifup zamiast NetworkManager.

Właściwie dla mnie ułatwili to, umieszczając to wszystko w pliku / etc / network / interfaces. Te same konfiguracje, które napisałeś do resolv.conf, mogą teraz znajdować się w tym samym pliku, co konfiguracje karty sieciowej, jak w poniższym przykładzie:

# 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

Mam nadzieję, że to pomaga i ułatwia, tak jak dla mnie, teraz możemy tworzyć statyczne adresy IP i dodawać serwery nazw i domenę dns w jednym pliku :)

Joseph Mituzas
źródło
1
Dziękuję Ci. To także stała się moją ulubioną metodą. Uwaga nie na temat: nie trzeba określać adresów „sieci” i „rozgłaszania”, ponieważ są one automatycznie obliczane na podstawie „adresu” i „maski sieci”. Wszystko, czego naprawdę potrzebujesz, to „adres”, „maska ​​sieci” i „brama”.
Martijn Heemels
To najczystsza odpowiedź. Pamiętaj tylko o poprawnym wpisaniu słów kluczowych dns- *. Błędnie napisane „dns-nameservers” było moim faktycznym problemem.
John McGehee,
18

Mój działa Ubuntu Server 12.04. Dokonałem następujących zmian i zrestartowałem serwer (zazwyczaj można to zrobić tylko poprzez wyłączenie interfejsu sieciowego, czyli ifdown eth0lub ifup eth0).

W pliku /etc/resolvconf/resolv.conf.d/basedodałem następujące wpisy:

nameserver 8.8.8.8
nameserver 8.8.4.4

Mam nadzieję, że powyższe pomaga!

Don Chai
źródło
12

Możesz użyć NetworkManagera, jak podano w odpowiedzi Franka, ale jeśli wolisz ręcznie edytować /etc/resolv.conf, możesz to zrobić, usuwając go (tak naprawdę to dowiązanie symboliczne), a następnie tworząc nowy zwykły plik z pożądaną treścią. resolvconfNarzędzie tylko kiedykolwiek zapisuje do pliku /run/resolvconf/resolv.conf.

Jase
źródło
9

Uwaga: Ta odpowiedź dotyczyła raczej odmiennej wersji pytania przed scaleniem, z naciskiem tylko na oczekiwanie na żądany serwer nazw.

Działa to przed 12.04:

Edytuj /etc/dhcp3/dhclient.confi dodaj:
prepend domain-name-servers 127.0.0.1;

(W rzeczywistości ten wiersz jest już obecny; wszystko, co musisz zrobić, to cofnąć komentarz.)

Belacqua
źródło
Czy to działa, jeśli nie masz żadnych adresów przypisanych przez DHCP?
Azendale
Jeśli chcesz dowiedzieć się więcej o konfiguracji dhclient, możesz zrobić, man dhclient.confaby uzyskać dostęp do strony podręcznika dhclient. (To nie jest odpowiedź na pytanie Azendale.)
Christian Skjødt,
Ta odpowiedź jest całkowicie błędna. Po pierwsze, osoba wysyłająca pytanie chce dodać adres zewnętrznego serwera nazw, a nie adres 127.0.0.1. Konfigurator interfejsu dla zewnętrznego interfejsu nie jest miejscem na dodanie adresu dla wewnętrznego serwera nazw. Po drugie, plik znajduje się w / etc / dhcp, a nie w / etc / dhcp3. Po trzecie, od Ubuntu 12.04 takie rzeczy są konfigurowane za pomocą resolvconf.
jdthood
1
Po pierwsze - pierwotne pytanie zostało radykalnie zmienione przez scalenie moderatora, więc moja odpowiedź oczywiście wygląda dziwnie. Plik dhcp3 był miejscem, w którym odpowiedziałem na to w 2011 roku , i nawet jeśli nie jest idealny, działał. Użyłem tego rozwiązania na wielu komputerach. Oczywiście zmieniłbyś adres sprzężenia zwrotnego na ten, który chcesz dodać. Zakładam, że większość ludzi wie, co to jest pętla zwrotna, nawet jeśli nie przeczytały RFC6890.
belacqua
@jdthood Dlaczego nie dodać własnej odpowiedzi? Osobiście nie byłem zaznajomiony z bsd-ish resolvconf sposobem robienia rzeczy. Wolałem bezpośrednie podejście /etc/resolv.conf i nie jestem pewien, jaka jest zaleta nowego systemu Rube Goldberg. (Podobnie z / etc / motd).
belacqua
7

resolvconfjest bezużyteczny. Jestem na serwerze Linux, a mój adres IP jest statyczny, a moje serwery DNS są statyczne. Nie potrzebuję resolvconfani NetworkManager .

Prostota jest moją zasadą podczas pracy na serwerze. Im mniej złożoność, tym łatwiej będzie zarządzać / naprawiać, gdy coś się zepsuje.

Więc zrobiłem aptitude purge resolvconfi ręcznie upewniłem się, że /etc/resolv.confnie jest dowiązaniem symbolicznym i właśnie utworzyłem plik statyczny. Na wypadek, gdyby jakiś program próbował zmienić plik, zrobiłem to chattr +i(niezmiennie) /etc/resolv.confjako środek ostrożności.

znak
źródło
4
Ponieważ resolvconf jest częścią systemu podstawowego, usuwając go, pytasz o kłopoty w przyszłości, w czasie aktualizacji.
jdthood
3
Zgadzam się zarówno z komentarzem, jak i odpowiedzią: zastanów się, ile problemów to spowodowało i ile godzin pomocy technicznej poświęcono na rozwiązanie tego „problemu” oraz ilu pracowników IT szukało odpowiedzi. Proste jest najlepsze - nie potrzebuję, aby moje serwery zmieniały DNS na coś, czego nie chcę.
Mei
6

Większość z powyższych zakłada, że ​​masz nieskazitelny system, ale rzeczywistość często jest taka, że ​​instalujesz różnych klientów dhcp, wyłączasz menedżera sieci w niektórych poprzednich wersjach Ubuntu itp. Warto wiedzieć: Używam dnsmasq od dłuższego czasu, ale go odinstalowałem. Obecnie mój system ma następującą zawartość /etc/resolv.conf(która jest dowiązaniem symbolicznym /run/resolvconf/resolv.confw moim systemie):

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

To nie ma znaczenia, jak często biegnę sudo resolvconf -ulub sudo dpkg-reconfigure resolvconf, że nie aktualizuje serwera nazw dla tych ustawić w NetworkManager. Informacje, które resolvconf wykorzystuje z NetworkManager, były obecne:

cat /run/resolvconf/interface/NetworkManager  
nameserver 8.8.4.4
nameserver 8.8.8.8

Okazuje się jednak, że jeśli w tym katalogu znajduje się wiele plików, ten plik może w ogóle nie zostać użyty. Winowajcą był plik, który nie został usunięty podczas dezinstalacji programu dnsmasq:

cat /run/resolvconf/interface/lo.dnsmasq                        
nameserver 127.0.0.1

Właśnie usunięcie tego pliku (i uruchomienie go sudo resolvconf -upóźniej) rozwiązało moje problemy z 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 

Mam nadzieję, że pomoże to również innym w debugowaniu (złożone interakcje między tymi wszystkimi różnymi narzędziami sieciowymi). Jeśli używasz, resolvconfupewnij się, aby uruchomić, ls /run/resolvconf/interfacesaby zobaczyć, co tam jest.

Anne van Rossum
źródło
1
Dziękuję, to było bardzo pomocne. Najpierw wypróbowałem wyżej głosowane odpowiedzi i żadna z nich nie sprawdziła się. Nie miałem żadnych dodatkowych plików w katalogu /run/resolvconf/interface/, ale mój NetworkManagerplik potrzebował trochę miłości. Twoja odpowiedź pomogła mi rozwiązać ten problem.
mason81
4

Właśnie usunąłem link /etc/resolv.confi utworzyłem standardowy plik z adresami serwerów nazw. Działa i nie widzę powodów, aby używać tej dość dziwnej konstrukcji, którą stworzyli programiści Ubuntu.

Ivan
źródło
1
Tak, nie jestem fanem tego rodzaju zmian, które wpływają na serwery, dodają złożoności i krycia. Jest to podstawowe zachowanie, które nie powinno się zmieniać w zależności od wersji.
belacqua
Ta odpowiedź ma 5 lat, a IMHO jest nadal najlepszą spośród wszystkich wymienionych. To jest proste, szybkie i skuteczne. Czy jest jakiś minus?
Craig S. Anderson
3

Możesz edytować połączenie „AUTO ETH0” lub dowolną nazwę używaną do łączenia w NM. Możesz to zrobić, klikając prawym przyciskiem myszy NM i wybierając „Edytuj połączenia ...”. Na karcie IPv4 możesz wybrać „Tylko adresy automatyczne (DHCP)”, ponieważ „Metoda”, a NM pozwoli ci ręcznie ustawić adresy serwerów nazw, nawet adresy są dostarczane przez DHCP.

Frank Barcenas
źródło
3

Dodając mój kawałek do już długiej listy, oto inny sposób (testowany 12.04):

Edytuj /run/resolvconf/interface/NetworkManagerwedług własnych potrzeb. Oto przykład:

search foobar.com example.com
nameserver 192.168.1.1

Następnie, jak stwierdzono w przypadku większości innych przykładów, wykonaj polecenie sudo resolvconf -u. Teraz znajdziesz swój resolv.confwyglądający tak:

nameserver 192.168.1.1
nameserver 127.0.0.1
search foobar.com example.com

Nadal nie podoba mi się sposób, w jaki jest teraz implementowany (wydaje się, że Ubuntu potrzebuje usługi dla każdego foo, który robi) i na pewno wolałbym zwykły resolv.conf. Ale takie podejście wydaje mi się jak dotąd najlepszym kompromisem. Dodany „localhost-NS” nie powinien zbytnio boleć.

Izzy
źródło
2

Naprawiłem to, zmieniając kolejność źródeł. Przesunąłem dnsźródło wcześniej mdnsw /etc/nsswitch.conf:

hosts: files dns mdns4_minimal [NOTFOUND=return] mdns4

Możesz zachować ustawienia i nadal korzystać z lokalnego serwera buforowania w ten sposób.

Dan B.
źródło
zamiast dodawać wpisy, napraw system jest zepsuty i podaj informacje, których naprawdę potrzebujesz. +1.
nelaaro
2

Co powiesz na:

sudo dpkg-rekonfiguruj resolvconf

Wcześniej użyj Menedżera sieci, aby zmienić adres DNS i zmienić metodę na

Tylko adresy automatyczne (DHPC)

Następnie uruchom powyższe polecenie i uruchom ponownie. To rozwiązało dla mnie rozwiązanie.

Adige72
źródło
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
Roy Rogers
źródło
2

To bardzo popularne pytanie, z zestawem standardowych możliwych odpowiedzi, z których wszystkie, IMO, są dość hackerskie. Z jednej strony zawsze miałem problemy z zmuszeniem Ubuntu do przestrzegania ustawień DNS, które skonfigurowałem w NetworkManager - w szczególności ustawienia statycznych serwerów DNS z „tylko adresami automatycznymi (DHCP)” - i dzisiaj w końcu zorientowałem się, co jest faktycznie NIEPRAWIDŁOWE.

Problem dotyczy interakcji między resolvconf i NetworkManager. resolvconf ma ten plik o nazwie /etc/resolvconf/interface-order. Przynajmniej w moich systemach NetworkManager w ogóle nie znajduje się w tym pliku (poza tym, że na końcu jest objęty * symbolem wieloznacznym). Tak więc dzieje się tak, że najnowszy raport dhclient do resolvconf ma pierwszeństwo przed wszystkim, co ma do powiedzenia NetworkManager.

Tak więc, przynajmniej w moim przypadku, właściwą odpowiedzią było dodanie

NetworkManager

na górze lub w pobliżu /etc/resolvconf/interface-order.

(Tak, wiem, że wiele osób mówi mi „odinstaluj resolvconf”, co samo w sobie wydaje się złym pomysłem. Ale co więcej, przynajmniej przebiegle i ksenialnie uważają resolvconf za istotną część systemu [tj. Ubuntu -minimal zależy od tego], więc trudno byłoby utrzymać system w spójnym, zaktualizowanym stanie bez resolvconf.)

Na życzenie mogę podać więcej szczegółów na temat tego, jak to wymyśliłem. ( EDYCJA : najwyraźniej nie zrobiłem tego, kiedy o to proszono, przepraszam. W tym momencie nie pamiętam o wiele więcej szczegółów niż to, co powiem dalej :) W skrócie, zamieniłem plik wykonywalny resolvconf na otoczkę powłoki który zrzucił swoje argumenty, dane wejściowe, wyjściowe i stderr do plików; i dodał zestaw -x do skryptów aktualizacji resolvconf.

( EDIT : I może . Powiedzieć, że to, co mam na myśli w pierwszej części jest to, że użyłem sudo przenieść rzeczywisty wykonywalny resolvconf, które można odnaleźć za pomocą którego polecenia lub polecenia typu Następnie należy utworzyć skrypt, który ostatecznie po prostu wykonuje przeniesiony resolvconf, ale także echa argumentów do jakiegoś pliku i używa przekierowania powłoki do wysyłania stdin, stdout i stderr do różnych innych plików. Nie pamiętam, gdzie znajdują się „skrypty aktualizacji resolvconf” i nie można ich obecnie łatwo sprawdzić. wielu maniaków Linuksa może zrozumieć, co mam na myśli; być może jakiś dobry samarytanin poda jeszcze więcej szczegółów w komentarzu.)

Steven Collins
źródło
Proszę „ podać więcej szczegółów na temat tego, jak to wymyśliliście
Pierre.Vriens,
1

Aby zmienić DNS, postępuj zgodnie z instrukcjami w: https://developers.google.com/speed/public-dns/docs/using

  1. Przejdź do sieci

  2. Wybierz połączenie, dla którego chcesz skonfigurować DNS.

  3. Aby zmienić ustawienia połączenia bezprzewodowego, wybierz kartę Bezprzewodowe, a następnie wybierz odpowiednią sieć bezprzewodową.

  4. Kliknij strzałkę (po prawej) iw wyświetlonym oknie wybierz kartę Ustawienia IPv4 lub Ustawienia IPv6.

  5. Jeśli wybraną metodą jest Automatyczny (DHCP), otwórz menu rozwijane i wybierz Tylko adresy automatyczne (DHCP). Jeśli metoda jest ustawiona na coś innego, nie zmieniaj jej.

  6. W polu Serwery DNS wpisz adresy IP DNS oddzielone przecinkiem

Ferroao
źródło
0

0. Dodaj tymczasowy DNS. Edytuj /etc/resolv.conf.

nameserver 4.4.4.4
nameserver 8.8.8.8

1. Zainstaluj lub zaktualizuj resolvconf.

root@ubuntu:~# apt-get install resolvconf -y

2. Dodaj swój serwer nazw do /etc/resolvconf/resolv.conf.d/tail

nameserver 4.4.4.4
nameserver 8.8.8.8

3. Uruchom ponownie komputer.

xiaoliuzi
źródło