Jak dołączyć wiersze do resolv.conf, które nie zgubią się przy ponownym uruchomieniu?

172

W końcu przeprowadziłem migrację do wersji 12.04 z wersji 7.10. Mam ostatnią część do ukończenia, ale jestem zakłopotany. Korzystam z Puppet na każdym serwerze, aw przeszłości podałem adres serwera nazw i nazwę domeny wyszukiwania dla puppetmaster w resolv.conf.

search puppetmaster.com
nameserver 192.168.1.XXX

W 12.04 rezv.conf zostaje zastąpione po ponownym uruchomieniu. Nie mogę użyć do tego statycznego adresu IP, więc użycie / etc / network / interfaces, aby mi pomóc, jest zerowe.

# 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

Czy istnieje sposób, aby resolvconf poradził sobie z tym w głowie, ogonie lub podstawie? Jeśli tak, czy są jakieś przykłady, których mogę użyć, aby dostosować na moim serwerze.

Każda pomoc jest mile widziana.

Sam
źródło
2
resolvconf to złe oprogramowanie, po prostu usuń je i zarządzaj /etc/resolv.conf starym sposobem.
mężczyzna z brązu,

Odpowiedzi:

133

Prawdopodobnie lepiej jest, aby Twój serwer DNS był w stanie rozpoznać „marionetkę” pod właściwym adresem i albo pozwolić serwerowi DHCP na przekazanie adresu serwera nazw DNS i listy wyszukiwania, albo (jeśli masz statyczne adresy IP), aby mieć coś w rodzaju następujące w / etc / network / interfaces.

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

Ale jeśli chcesz to zrobić za pomocą plików konfiguracyjnych resolvconf, będziesz chciał edytować /etc/resolvconf/resolv.conf.d/base. W tym pliku wprowadź swoje dane tak, jak w resolv.conf.

nameserver 192.168.1.XXX

Następnie powiedz resolvconf, aby zregenerował się resolv.conf.

sudo resolvconf -u
tgm4883
źródło
13
Chociaż ta odpowiedź ma głosy, a pierwsza część jest mniej więcej poprawna, druga część odpowiedzi jest niepoprawna. (1) Czy nie umieścić linię „szukaj” w /etc/resolvconf/resolv.conf.d/head. Jeśli umieścisz tam linię „wyszukiwania”, linia ta zostanie zignorowana, jeśli resolvconf zawiera linię „wyszukiwania” w dynamicznej części pliku resolv.conf. Program rozpoznawania nazw glibc ignoruje wszystkie oprócz ostatniego wiersza „search” lub „domain”. Zobacz resolv.conf (5). (2) W przypadku zmiany konfiguracji resolvconf nie należy ponownie uruchamiać zadania resolvconf, ale po prostu uruchomić aktualizację „resolvconf -u”.
jdthood
1
Usunąłem linię. Inną opcją byłoby użycie ogona zamiast głowy.
tgm4883,
6
@tishma: Cześć. Po pierwsze, aby uniknąć nieporozumień: nic nie zapisuje się w plikach podstawy, głowy lub ogona. Nic nie zapisuje żadnych plików w /etc/resolvconf/resolv.conf.d/ w czasie wykonywania. Pliki te są odczytywane przez resolvconf, który gromadzi ich zawartość w pliku, który zapisuje --- /run/resolvconf/resolv.conf --- na który wskazuje dowiązanie symboliczne /etc/resolv.conf. Po drugie, co należy zrobić po zmianie opcji dns- * w / etc / network / interfaces. Czy nie run "/etc/init.d/networking restart"; to jest już przestarzałe. Zamiast tego przejdź do interfejsu, o którym mowa, i ponownie.
jdthood
4
W 14.04 ta odpowiedź nic mi nie zrobiła.
Jay Sullivan
2
Jeśli wszystko inne zawiedzie .. $ sudo resolveconf -u nie zmieniło dla mnie rzeczy, ponownie uruchomiłem maszynę, presto.
MSpreij
35

Myślę, że odpowiedź, to sprawdzić /etc/dhcp/dhclient.conf, to znaczy nie żądać dns-nameserversod dhcp klienta.

Następnie zaktualizuj swój /etc/network/interfaces

auto eth0
iface eth0 inet dhcp
dns-search google.com
dns-nameservers dnsserverip

Następnie resolv.confzostanie automatycznie skonfigurowany tak, jak chcesz.

Dodaj do, dns-searcha następnie uruchom /etc/init.d/networking restart (chociaż ten skrypt jest przestarzały, nadal działa).

Jamin
źródło
5
dhclient rządzi wszystkimi ustawieniami resolvconf, więc powinna to być najlepsza odpowiedź.
Alex R
6
/etc/init.d/networking restartnie działał na moim komputerze, ale sudo ifdown -apotem działał sudo ifup -a. (Trochę mi zajęło uświadomienie sobie, że muszę zastąpić dnsserveripczymś takim 8.8.8.8; czuję się trochę głupio.)
Jason Gross
spróbujsystemctl restart networking.service
Pavel Sayekat,
20

Jest to prawdopodobnie spowodowane konfiguracją DHCP podczas pierwszej instalacji Ubuntu. Wypróbuj ten 3-etapowy proces, aby rozwiązać ten problem z automatyczną konfiguracją.

Pierwszy

Edytuj konfigurację interfejsu, która znajduje się w: /etc/network/interfaces

Dodaj tę linię poniżej iface lo inet loopback:

dns-nameservers yourdns youraltdns

Jako przykład dla Google DNS możesz użyć tego:

dns-nameservers 8.8.8.8 8.8.4.4

druga

Edytuj plik konfiguracyjny DHCP znajdujący się pod:

/etc/dhcp/dhclient.conf

Oznacz składnię jako komentarz za pomocą #w każdym wierszu lub po prostu usuń każdy serwer nazw żądań. W 16.04 może nie być wymagane wprowadzenie tutaj zmian.

Trzeci

Uruchom ponownie sieć za pomocą tego polecenia:

/etc/init.d/networking restart

W 16.04:

sudo ifdown -a
sudo ifup -a
astrajingga
źródło
3
/etc/init.d/networking restartnie działał na moim komputerze, ale sudo ifdown -apotem działał sudo ifup -a.
Jason Gross
Jest to proste i działa, nawet jeśli jest trochę zuchwałe! Problem z takimi rzeczami jak ubuntu polega na tym, że istnieje 1000 sposobów na zrobienie jednej rzeczy!
Willa O Ng'wana
Następnie możesz sprawdzić, czy plik /etc/resolv.conf zawiera te 2 nowe wpisy DNS w pierwszych przydatnych wierszach.
ROMANIA_inżynier
8

Proszę spojrzeć na resolvconfstronę manuala. Możesz wymusić włączenie niektórych ustawień DNS, tworząc np . /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.

Istnieją inne specjalne pliki (głowa i ogon), które mogą pomóc Ci osiągnąć to, co chcesz.

roadmr
źródło
4
Możesz dodawać wiersze do /etc/resolvconf/resolv.conf.d/base, ale ponieważ każdy serwer nazw jest dostępny przez interfejs i jest dostępny tylko wtedy, gdy ten interfejs jest włączony, najlepiej skojarzyć informacje o serwerze nazw z tym interfejsem. Jeśli interfejs jest skonfigurowany z ifup, oznacza to: umieść informacje w wierszach „dns-search” i „dns-nameservers” w sekcjach / etc / network / interfaces. Jeśli interfejs jest skonfigurowany przez DHCP, oznacza to: skonfiguruj serwer DHCP, aby dostarczał klientom nazwy wyszukiwania i adresy serwerów nazw. Itd. Użyj pliku „podstawowego” tylko jako tymczasowego hacka lub w ostateczności.
jdthood
Tak. Dodałem „nameserver 1.2.3.4” w /etc/resolvconf/resolv.conf.d/base
Bastion,
8

Wiele innych odpowiedzi mówi, że ma to związek z resolvconfinstalacją w systemie.

Dlatego najlepszym sposobem na zachowanie czegoś resolv.conf, co nie zgubi się podczas ponownego uruchamiania, jest włączenie go do plików konfiguracyjnych resolvconf, które znajdują się w:

/etc/resolvconf/resolv.conf.d/

Tam idź po headplik. Cokolwiek tam umieścisz, zostanie zapisane na górze/etc/resolv.conf

Więc wszystko pójdzie do czegoś takiego:

# echo nameserver 8.8.8.8 >> /etc/resolvconf/resolv.conf.d/head
# resolvconf --enable-updates
# resolvconf -u
Juan Javier Triff Cabanas
źródło
To jest prawdziwa poprawna odpowiedź! Wreszcie!
user77232,
6

Dla mnie powyższe odpowiedzi były nieodpowiednie z następujących powodów:

  • Nie używam resolvconf, po prostu /etc/resolv.conf.
  • Używanie chattr +ido blokowania resolv.confwydaje się zbyt hackerskie. Potrzebuję Puppet, by móc swobodnie wprowadzać zmiany w razie potrzeby.
  • AFAIK, edycja /etc/network/interfacesnie zapobiega resolv.confzastąpieniu; po prostu określa serwery nazw, które należy zapisać. Dla mnie określenie serwerów nazw nie było celem. Próbuję ustawić options timeout:1i options attempts:1w moim resolv.confpliku.

Najlepszym rozwiązaniem znalazłem zastępuje domyślne zachowanie dhclientwykorzystując swoje udokumentowane haki.

Utwórz nowy plik /etc/dhcp/dhclient-enter-hooks.d/nodnsupdateo następującej treści:

#!/bin/sh
make_resolv_conf() {
    :
}

Następnie uczyń plik wykonywalnym:

chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate

Teraz, gdy dhclient działa - przy ponownym uruchomieniu lub przy ręcznym uruchomieniu sudo ifdown -a ; sudo ifup -a- ładuje ten skrypt nodnsupdate. Ten skrypt zastępuje wywoływaną funkcję wewnętrzną make_resolv_conf(), która normalnie nadpisuje resolv.confi zamiast tego nic nie robi.

To działało dla mnie na Ubuntu 12.04.

Richardkmiller
źródło
1
Działa dobrze w Debianie 8. Eleganckie rozwiązanie!
Artur Bodera
1
tylko dla kompletności: manpage dhclient-script przechowuje informacje o skrypcie konfiguracyjnym sieci klienta DHCP wspomnianym powyżej.
hecke
Nie działało to 16.04, dodałem też rzeczy do /etc/network/interfaces.d, bez żadnego efektu, dodałem puste zastąpienie make_resolv_conf zalecane tutaj, bez efektu .... ale nie zmodyfikowałem / etc / dhcp / dhclient.conf - czy naprawdę muszę zmodyfikować statyczny plik konfiguracyjny, aby to naprawić?
silverjam
3

To może być dziwne dziwactwo w mojej maszynie, ale ktoś inny może mieć tę samą obudowę narożną.

Próbowałem wielu sposobów na włączenie moich serwerów nazw ISP do pliku /etc/resolv.conf bez powodzenia:

  • Włączyłem je /etc/network/interfacesi ponownie uruchomiłem sieć. Nie pojawili się /etc/resolv.conf.

  • Umieściłem je /etc/resolv.confwyraźnie, ale oczywiście zostały nadpisane. Pojawili się /run/resolvconf/interface/eth0.inet, ale nigdy tego nie zrobili /etc/resolv.conf.

  • Próbowałem skonfigurować resolvconf dla aktualizacji dynamicznych. Brak zmiany.

W końcu przeczytałem gdzieś, że jeśli lokalna maszyna (127.0.0.1) pojawia się na /etc/resolv.confinnych serwerach nazw, nie są uwzględnione.

W desperacji redakcją /run/resolvconf/interface/lo.namedusunięty, jedyna linia w nim ( nameserver 127.0.0.1) i ponownie: ifdown eth0 && ifup eth0.

/etc/resolv.conf po raz pierwszy uwzględnił moje serwery nazw ISP! Pobiegłem service network-manager restartsprawdzić, czy jest stabilny i /etc/resolv.confnadal zawiera moje serwery nazw ISP. Ponownie uruchomiony tylko upewnić się i nadal istnieje , ale /run/resolvconf/interface/lo.named został zresetowany do: nameserver 127.0.0.1.

Co ciekawe, restartowanie sieci wciąż działa: /etc/resolv.confnadal zawiera moje serwery nazw ISP. Nie potrafię tego wyjaśnić (czy ktoś może?), Ale może to pomóc komuś utknąć w tym samym miejscu.

użytkownik297954
źródło
Jest to prawdopodobnie spowodowane przez dnsmasq. Możesz go po prostu usunąć za pomocą apt-get remove dnsmasqlub zaktualizować config w /etc/dnsmasq.conf.
Tombart
2

dodaj swój serwer nazw do pliku /etc/resolvconf/resolv.conf.d/head. Plik zawiera otrzymaną wiadomość:

ten plik powinien wyglądać tak po dodaniu 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
HVNSweeting
źródło
3
Dodanie linii do /etc/resolvconf/resolv.conf.d/head jest złym rozwiązaniem, nawet gorszym niż dodanie linii do /etc/resolvconf/resolv.conf.d/base. Prawidłowym rozwiązaniem dla interfejsów skonfigurowanych za pomocą ifup jest dodanie wierszy „dns-search” i „dns-nameservers” do sekcji w / etc / network / interfaces. Zobacz także moje komentarze do innych odpowiedzi.
jdthood
3
To jedyna rzecz, która naprawdę dla mnie działała ... i wydaje się, że trudno zrozumieć, dlaczego żadne z „poprawnych” rozwiązań nie działa.
silverjam
1

dodaj w ostatnim wierszu np .:

nameserver 8.8.8.8

Otwórz terminal i wpisz

sudo chattr +i /etc/resolv.conf

+ i dba o to, aby plik nie został zresetowany podczas rozruchu.

Aby cofnąć powyższe

sudo chattr -i /etc/resolv.conf

Po więcej

man chattr
tanmay.01
źródło
1

Inne rozwiązania nie działały dla mnie w moim systemie Fedora 20. Mój szczególny problem polegał na tym, że wiersz „search” w pliku /etc/resolv.conf był zastępowany. Oto, co to naprawiło. (Zakłada się, że NetworkManager produkuje linię search rn.yourcompany.com i chcesz, aby była search rn.yourcompany.com yourcompany.com intnet.yourcompany.com:

1. Użyj polecenia „ifconfig”, aby dowiedzieć się, który interfejs jest interesujący:

$ ifconfig
  :
  :

em2:  <this was the one which was connected>

2. Zostań rootem i przejdź do katalogu urządzeń sieciowych do konfiguracji systemu:

$ sudo su -[sudo] 
password for youruser:
# cd /etc/sysconfig/networking/devices`
  1. Użyj ulubionego dostępnego edytora, aby dodać Domainwiersz z dodatkowymi domenami do przeszukania:

DOMAIN="yourcompany.com intnet.yourcompany.com"

Zapisz, wyloguj się i zaloguj ponownie. NetworkManager powinien teraz mieć wiersz \etc\resolve.conf:

search rn.yourcompany.com yourcompany.com intnet.yourcompany.com
CBI
źródło
3
Nie padaj na paradę, ale to jest Ask Ubuntu, więc Fedora jest nie na temat.
Flimm,
1

Dodaj wpisy w /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

i uruchom następujące polecenie

sudo resolvconf -u
siz
źródło
1

Dla Ubuntu Server 18 Netplan to nowe narzędzie do konfiguracji sieci.

# cd /etc/netplan

Następnie edytuj wpisy serwerów nazw w pliku yaml (użyj poprawnego wcięcia). Na przykład, jeśli korzystasz z serwerów DNS Google:

nameservers:
    addresses: [8.8.8.8,8.8.4.4]

Aby ponownie uruchomić usługę

# netplan apply

Zobacz https://netplan.io/

https://www.techrepublic.com/article/how-to-set-dns-nameservers-in-ubuntu-server-18-04/

Oscar Escamilla
źródło
0

Jeśli używasz DHCP, edytuj, /etc/dhcp/dhclient.confaby dodać dodatkowe serwery DNS:

prepend domain-name-servers 12.34.56.78, 12.34.56.79;

Klient DHCP nadpisuje dns-nameserversin etc/network/interfacesi myślę, że w /etc/resolvconf/resolv.conf.d/basezbyt.

To działało dla mnie na serwerze Ubuntu 14.04.3.

Szczegółowe informacje zawiera Wiki Debian NetworkConfiguration .

Kevin S. Miller
źródło
0

Po prostu zrób kopię zapasową pliku resol.conf i usuń pakiet resolvconf i edytuj plik /etc/resolv.conf na co tylko chcesz.

apt-get remove -y resolvconf
echo 'nameserver 8.8.8.8' > /etc/resolv.conf

Powinniśmy mieć prawo wyboru, aby nie używać złego oprogramowania, takiego jak resolvconf.

Nawiasem mówiąc, pole wyszukiwania w /etc/resolv.conf jest bezużyteczne.

człowiek z brązu
źródło
0

Używanie resolvconfi wyłączanie systemd-resolved.service(to działa dla mnie ubuntu 19.04):

  1. zainstalować resolvconf

    sudo apt install resolvconf
    
  2. Dodawanie serwerów nazw

    Otwórz za /etc/resolvconf/resolv.conf.d/basepomocą edytora tekstu, używam vim.

    sudo vim /etc/resolvconf/resolv.conf.d/base
    

    następnie dodaj serwery nazw do otwartego pliku, np .:

    nameserver 1.1.1.1
    nameserver 1.0.0.1
    
  3. Aktualizacja resolv.conf

    sudo resolvconf -u
    
  4. Wyłącz systemd-resolved.servicei uruchom ponownie. nameserver 127.0.0.53nie jest napisane do /etc/resolv.conf.

    sudo systemctl disable systemd-resolved.service
    sudo reboot
    

Gotowy!

Źródło

Bania J. Fonseca
źródło
Czy możesz określić, dla której wersji Ubuntu to zrobiłeś? Oryginalne pytanie odnosi się do Ubuntu 12.04, ponieważ dawno przestarzałe.
Marc Vanhoomissen
0

To najprostsza poprawka. Jeśli masz resolv.confi resolvconfpliki, staną na sobie. Musisz usunąć resolv.confplik, który jest pobierany i zastępowany przy każdym ponownym uruchomieniu.

Umieść nameserver 1.1.1.1 1.0.0.1na dole pliku resolvconf, a następnie uruchom

sudo rm /etc/resolv.conf

Aby pozbyć się pliku. Następnie uruchom ponownie i wszystko będzie działać.

Irv
źródło
0

Rozwiązanie Mi w dniu 12.04:

Zauważyłem, że jeśli dodasz serwer nazw dns w interfejsach, które nie zajmują serwerów rozpoznawania nazw

strona podręcznika resolvconf

Aby resolv.conf nie zmieniał się podczas ręcznej edycji, wykonaj to w terminalu:

sudo resolvconf –disable-updates

po:

sudo resolvconf -a eth0 # or your network interface

następnie ręcznie edytuj /run/resolvconf/resolv.confdodając maksymalnie dwa serwery DNS.

Następnie uruchom ponownie usługę:

sudo /etc/init.d/networking restart
enlinea777
źródło
4
To nie jest właściwy sposób rozwiązania problemu.
jdthood
1
@ jdthood jako osoba przeglądająca to możesz opracować DLACZEGO to nie jest właściwy sposób? Wydaje mi się to logiczne, ale nic o tym nie wiem.
ErikPerik
-1

Po prostu umieść

dns-search google.com && dns-nameservers (sample: 8.8.8.8)

polecenie w /etc/network/interfaceskonfiguracji. następnie uruchom ponownie sieć.

powinno działać.

tesar
źródło
-2

Ta konfiguracja jest zadeklarowana w /etc/default/bind9

RESOLVCONF=no|yes

no = nie stosuj warunku winit.d bind9

tak lub inna wartość = zastąpienieresolv.conf

Ten problem występuje, gdy instalujesz bind9i nie przejmuj się sprawdzaniem wszystkich konf.

użytkownik147967
źródło