Jak uzyskać resolvconf w celu ponownego wygenerowania resolv.conf po zmianie / etc / network / interfaces?


92

Jak zaktualizować /etc/network/interfacescoś po aktualizacji bardzo podobnej do poniższej /etc/resolv.conf? Próbowałem (jako root) resolver -u, service networking restartale nie działały. Naprawiłem także dowiązanie symboliczne resolv.confi spróbowałem resolver -uponownie. W końcu z frustracji zrestartowałem komputer, co naprawiło problem poprzez przebudowę /etc/resolv.conf.

Ubuntu 12.04, serwer 64-bitowy, wszystkie najnowsze zainstalowane łatki.

Przykład /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


Co próbowałeś zrobić, aby resolv.conf Ci to uniemożliwiło?
— kingmilo,

Odpowiedzi:


106

service networking restart nie zawsze jest niezawodnym sposobem obniżania poziomu wszystkich interfejsów.

resolvconf -uDowodzenia tylko aktualizacje resolv.confz własnej bazy danych resolvconf jest. Musisz zaktualizować bazę danych.

Aby zaktualizować bazę danych, musisz wywołać resolvconf z opcją -alub -d. Dzieje się tak za kulisami, gdy uruchamiasz ifup lub ifdown. Tak więc normalnie, podobnie jak w przypadku każdej innej zmiany /etc/network/interfaces, aby aktywować zmiany w opcjach dns- *, należy przejść do danego interfejsu i ponownie. Lub możesz uruchomić ponownie.

Jeśli chcesz wprowadzić zmiany w interfejsie bez wyłączania go (być może dlatego, że administrujesz maszyną zdalnie i zdarza się, że jesteś podłączony przez ten interfejs, natch), możesz osiągnąć ten sam wynik, uruchamiając resolvconf bezpośrednio z wiersza poleceń. Wymaga to nieco większej wiedzy na temat semantyki resolvconf. Załóżmy, że odpowiednia sekcja / e / n / i to

iface IIII FFFF static
    address ...
    ...
    dns-nameservers X.X.X.X Y.Y.Y.Y
    dns-search SSSS

gdzie FFFF jest rodziną adresów („inet” lub „inet6”).

Aby aktywować te opcje dns- *, uruchom komendę resolvconf w następujący sposób (tak, z nowymi wierszami w strumieniu do resolvconf).

echo "nameserver X.X.X.X
nameserver Y.Y.Y.Y
search SSSS" | sudo resolvconf -a IIII.FFFF

Dla zwrotki podanej w pytaniu byłoby to następujące.

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com" | sudo resolvconf -a eth0.inet

Więcej informacji można znaleźć na stronie podręcznika resolvconf (8) i pliku README pakietu resolvconf (/usr/share/doc/resolvconf/README.gz).


„Nie rób„ restartu sieci serwisowej ”; to nie jest niezawodny sposób na obniżenie poziomu wszystkich interfejsów”. Działa dla mnie dobrze. Dobrze jednak wiedzieć, jak to zrobić.
— Aki

11
Jeśli nie powinieneś „restartować sieci serwisowej”, czy mogę zasugerować, abyś nie umieszczał go w pierwszym wierszu tego pytania? Gdy pośpiesznie szukałem rozwiązania, pierwszą rzeczą, którą zrobiłem, było skopiowanie i wklejenie pierwszego polecenia, które zobaczyłem.
— Robin Winslow

4
@RobinWinslow +1 za zrobienie mojego dnia
— Pete

8
Ta odpowiedź pochodzi od osoby, która się rozwinęła resolvconf :)
— heemayl

2
Aby ponownie uruchomić / ponownego odczytania /etc/network/interfaces, można to zrobić: ifdown eth0 && ifup eth0; działa nawet w zdalnej sesji ssh.
— Pierre-Damien


5

Dla tych, którzy zdalnie zarządzają serwerami, możesz:

  1. zaktualizuj dns-nameserverslinię w/etc/network/interfaces
  2. # ifdown eth01; ifup eth01

Zauważ, że musi to być jedna linia podzielona; (separator linii poleceń linux). Nie powinieneś nawet tracić obecnego połączenia. Wyjątkiem jest literówka w pliku interfejsów. Jeśli tak się ifupstanie, zawiedzie i będziesz musiał mieć fizyczny dostęp lub inne ethxxpołączenie.


2

service resolvconf restartzregeneruje /etc/resolv.confplik bez większego zamieszania.


2
RozumiemFailed to restart resolvconf.service: Unit resolvconf.service not found.
— Mobigital

polecenie zakończone, ale nie zostało zregenerowane /etc/resolv.confna serwerze Ubuntu 14.04
— Jossef Harush

1

Ta odpowiedź jest podobna do powyższej, ale wykorzystuje konfigurację przykładowego pytania, aby odpowiedzieć na pytanie. Ponadto wyjaśnia to, dlaczego oba polecenia są konieczne.

Edytuj /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-nameserver 192.168.3.45
    dns-nameserver 192.168.8.10

Te zmiany nie zostaną wprowadzone, chyba że uruchomisz ponownie lub ponownie załadujesz plik konfiguracyjny:

Aby zaktualizować plik interfejsów na żywo, należy uruchomić następujące polecenie:

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com" | sudo resolvconf -a eth0.inet

Umożliwia to aktualizację interfejsu bez ponownego uruchamiania lub ponownego ładowania.

Jednak powyższe zmiany poleceń zostaną utracone po ponownym uruchomieniu, jeśli zmiany /etc/network/interfacesnie zostaną wprowadzone.

Nawiasem mówiąc, ostatnia odpowiedź z BDenis na tej liście faktycznie działa zamiast ostatniego polecenia, analizując /etc/network/interfacesplik i przesyłając te wiersze do polecenia. sudo resolvconf -a eth0 To właściwie połowa odpowiedzi i naprawdę dobry przykład wbudowanego parsowania sed. Jeśli chcesz zobaczyć, jak to działa, po prostu uruchom pierwszą część polecenia i obejrzyj go, parsując /etc/network/interfacesplik i wypluwając wszystkie niezbędne informacje potrzebne do uruchomienia sudo resolvconf -a eth0polecenia:

sed 's/#.*$//' /etc/network/interfaces | grep dns- | sed 's/dns-//g'

Zauważ, że spowodowałoby to takie samo wyjście jak polecenie:

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com"

Pod warunkiem, że /etc/network/interfacesplik jest skonfigurowany z tymi informacjami:

iface eth0 inet static
    address 192.168.3.3
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-search example.com
    dns-nameserver 192.168.3.45 
    dns-nameserver 192.168.8.10

Niestety nie mogę tego użyć. Mój interfejs jest zarządzany przez menedżera sieci i DHCP, więc dodanie go /etc/network/interfacesnie jest prawidłową opcją w tym przypadku. (Ubuntu 14.04)
— Tino

1

Prosta odpowiedź:

Wystarczy zainstalować resolvconf. apt install resolvconf

Następnie ifup eth0aktualizuje dns w etc/resolv.conf, zgodnie z dns-nameserverslinią w /etc/network/interfaces.


nieznany interfejs. Wszyscy naprawdę wiedzą, jak zaciemnić szczegóły tutaj ... Myślę, że powinniśmy dążyć do zgrupowania wszystkich poleceń. Pełny skrypt dla każdego, bez prozy.
— mathtick

1

W dniu 18.04 następujące działa niezawodnie (uruchom jako root):

systemctl stop networking
ip address flush dev <device> # just to be safe
systemctl start networking

Ważne: Upewnij się, że masz resolvconfzainstalowany pakiet .
Wydaje się, że nie jest domyślnie i bez tego niektóre (!) Zmiany z /etc/network/interfacessą po cichu ignorowane (np dns-*.).


0

To działało dla mnie:

sed -re '/nameservers|dns-search/ !d' -e 's/dns-nameservers/nameserver/' -e 's/dns-search/search/' /etc/network/interfaces  | resolvconf -a eth0.inet && resolvconf -u

Odpowiednio wyreguluj.


0

Na komputerowej wersji Ubuntu 18.04, gdzie nie ma usługi networkingi resolvconfnie jest instalowana domyślnie, udało mi się zregenerować resolv.confpoprzez ponowne uruchomienie network-manager:

sudo service network-manager restart

-3

Możesz także wypróbować to polecenie:

cat /etc/network/interfaces |sed 's/#.*$//'|grep dns-|sed 's/dns-//g'|sudo resolvconf -a eth0.inet

3
Czy możesz wyjaśnić, dlaczego to polecenie powinno działać?
— αғsнιη

1
To nie działa poprawnie, jeśli masz więcej niż jeden adres IP serwera nazw w linii dns-nameserver IP1 IP2. Linia musi zostać powtórzona resolv.conf, ale nie jest.
— Tino

Co więcej, /etc/network/interfaceszastosowania dns-nameservers(zauważ sna końcu) podczas resolvconfużywania nameserver. Polecenie tego nie rozwiązuje. I nawet jeśli wszystko jest w porządku, rurociąg sed | grep | sedzdecydowanie nie byłby najbardziej wydajnym sposobem.
— Melebius
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.