Jak wyłączyć systemd-resolved i DNS za pomocą dnsmasq?

Odpowiedzi:

35

dnsmasq pakiety są nadal dostępne w wersji 16.10 i 17.04.

  1. Zainstaluj dnsmasqi zależności (lub przynajmniej pobierz ich pakiety) przed wyłączeniemsystemd-resolved :

    sudo apt-get install dnsmasq
    
  2. Wyłącz systemd-resolvedi sprawdź, czy dnsmasqdziała:

    sudo systemctl stop systemd-resolved
    sudo systemctl disable systemd-resolved
    
    systemctl status dnsmasq
    
  3. Dopraw dnsmasqdo smaku. Po zastosowaniu ustawień uruchom ponownie dnsmasq:

    sudo systemctl stop dnsmasq
    sudo systemctl start dnsmasq
    

Po kroku 2 możesz być bez działającego resolvera systemu, dopóki krok 3 nie zostanie ukończony. Może być konieczne zrestartowanie podsystemu sieciowego (lub po prostu ponowne uruchomienie), aby dnsmasqdziałać z domyślnymi konfiguracjami. W moich testach dodanie znanego serwera DNS /etc/dnsmasq.confi ponowne uruchomienie dnsmasqwystarczyło, aby działał w środowisku liveCD.

donkiszotowski
źródło
Świetna odpowiedź i pozornie jedyne rozwiązanie po wyłączeniu NetworkManagera jest niedopuszczalne!
bagno 7.04.17
3
Dla mnie była to świetna odpowiedź, ale wymagała także dodatkowych kroków od odpowiedzi @ blabla, dodając dns=dnsmasqconfig do/etc/NetworkManager/NetworkManager.conf
Roberto Tyley
To samo tutaj. Po zmaganiu się z rozwiązaniami systemowymi i niezwiązanymi z przejściem na dnsmasq wykonał lewy system na Ubuntu 17.10. Musiałem jednak użyć dodatków blabla.
Alberto L. Bonfiglio
17

Oprócz odpowiedzi @quixotic:

Upewnij się, że masz plik /etc/NetworkManager/NetworkManager.conf:

[main]
dns=dnsmasq

jeśli chcesz go dodać, uruchom ponownie NetworkManager w następujący sposób:

sudo systemctl restart NetworkManager

i /etc/resolv.confmusi być dowiązaniem symbolicznym do /var/run/NetworkManager/resolv.conf. można to zrobić w ten sposób

sudo rm /etc/resolv.conf; sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf
Blabla
źródło
Właściwie mam to ustawione jako dns=defaulti działa dobrze, ponieważ mam wtedy serwery nazw zdefiniowane przez NetworkManager zamiast być zdefiniowane w dnsmasq; to działa dla mnie - NM pobiera serwery nazw z ustawień dokonanych w konfiguracji NM KDE za pomocą zasobnika systemowego. Używam stałego adresu IP w mojej domowej sieci FWIW.
pbhj
1
Ten krok był dla mnie niezbędnym dodatkiem do odpowiedzi @ quixotic (ubuntu 17.04, pełna instalacja, nie LiveCD).
Roberto Tyley,
0

Zgodnie z instrukcją systemd-resolved systemd-resolved zapewnia usługi rozpoznawania nazw za pośrednictwem trzech różnych interfejsów:

  1. „w pełni funkcjonalny API rozwiązany systemowo wyświetla się w magistrali”
  2. „lokalny odbiornik kodów DNS na adres IP 127.0.0.53 w lokalnym interfejsie sprzężenia zwrotnego”
  3. Interfejs API glibc getaddrinfo (3) zdefiniowany przez RFC3493 i powiązane z nim funkcje tłumaczące, w tym gethostbyname (3). Ten interfejs API jest szeroko obsługiwany, w tym poza platformą Linux. W obecnej formie nie ujawnia jednak informacji o statusie sprawdzania poprawności DNSSEC i jest tylko synchroniczny. Ten interfejs API jest wspierany przez przełącznik usługi nazw glibc (nss (5)). Konieczne jest użycie modułu NSS glibc nss-resolver (8), aby umożliwić funkcjom NSS glibc rozpoznawanie nazw hostów poprzez systemd-resolved.

Wygląda na to, że dwa pierwsze interfejsy nie będą zakłócały normalnej rozdzielczości DNS i dla mnie problem prawdopodobnie dotyczy trzeciego.

W instrukcji nss-resolver :

Aby aktywować moduł NSS, dodaj „resol” do linii zaczynającej się od „hosts:” w /etc/nsswitch.conf. W szczególności zaleca się umieszczenie „rozwiązania” na początku w wierszu „hosts:” /etc/nsswitch.conf (ale po wpisach „files” lub „mymachines”), tuż przed wpisem „dns”, jeśli istnieje, a następnie „[! UNAVAIL = return]”, aby upewnić się, że zapytania DNS są zawsze kierowane przez systemd-resolved (8), jeśli jest uruchomiony, ale są kierowane do nss-dns, jeśli ta usługa jest niedostępna

Potrzebne jest więc, aby „dns” poprzedza „resol” w linii „host:” w pliku /etc/nsswitch.conf . A następnie getaddrinfopowinien po prostu stosować się do /etc/resolv.conf .

To rozwiązanie zapobiega jedynie obsłudze przez systemd wszystkich rozwiązań rozpoznawania nazw DNS i nie jest ograniczone do konkretnego menedżera sieci. Zapewnia to również, że usługi LLMNR i mDNS działają normalnie.

(Nie jestem do końca zaznajomiony z działaniem rozpoznawania nazw w systemie Linux, a także nie jestem pewien, co zrozumiałem z tych podręczników. Zarzuty wskazują, czy coś poszło nie tak.

Manekin
źródło
0

Dla (X) Ubuntu 18.04 (patrz moja odpowiedź na stackexchange ).

Oto jego kopia (czy mam zrobić kopię?)

Oto rozwiązanie dla (X) Ubuntu 18.04 Bionic.

Zainstaluj dnsmasq

sudo apt install dnsmasq

Wyłącz nasłuchiwanie rozpoznane przez system na porcie 53 (nie dotykaj /etc/systemd/resolved.conf, ponieważ może zostać nadpisany podczas aktualizacji):

$ cat /etc/systemd/resolved.conf.d/noresolved.conf 
[Resolve]
DNSStubListener=no

i uruchom go ponownie

$ sudo systemctl restart systemd-resolved

(alternatywnie wyłącz to całkowicie przez $ sudo systemctl disable systemd-resolved.service)

Usuń /etc/resolv.conf i utwórz ponownie. Jest to ważne, ponieważ resolv.conf jest domyślnie dowiązaniem symbolicznym do /run/systemd/resolve/stub-resolv.conf. Jeśli nie usuniesz dowiązania symbolicznego, plik zostanie zastąpiony przez systemd przy ponownym uruchomieniu (nawet jeśli wyłączono systemd-rozwiązany!). Również NetworkManager (NM) sprawdza, czy jest to dowiązanie symboliczne do wykrywania konfiguracji rozwiązanej przez system.

$ sudo rm /etc/resolv.conf
$ sudo touch /etc/resolv.conf

Wyłącz nadpisywanie pliku /etc/resolv.conf przez NM (istnieje również opcja rc-manager, ale nie działa, mimo że jest opisana w instrukcji):

$ cat /etc/NetworkManager/conf.d/disableresolv.conf 
[main]
dns=none

i uruchom go ponownie:

$ sudo systemctl restart NetworkManager

Powiedz dnsmasq, aby używał resolv.conf z NM:

$ cat /etc/dnsmasq.d/nmresolv.conf 
resolv-file=/var/run/NetworkManager/resolv.conf

i uruchom go ponownie:

$ sudo systemctl restart dnsmasq

Użyj dnsmasq do rozwiązania:

$ cat /etc/resolv.conf 
# Use local dnsmasq for resolving
nameserver 127.0.0.1
Sena
źródło