Odpowiedzi:
dnsmasq
pakiety są nadal dostępne w wersji 16.10 i 17.04.
Zainstaluj dnsmasq
i zależności (lub przynajmniej pobierz ich pakiety) przed wyłączeniemsystemd-resolved
:
sudo apt-get install dnsmasq
Wyłącz systemd-resolved
i sprawdź, czy dnsmasq
działa:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
systemctl status dnsmasq
Dopraw dnsmasq
do 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 dnsmasq
działać z domyślnymi konfiguracjami. W moich testach dodanie znanego serwera DNS /etc/dnsmasq.conf
i ponowne uruchomienie dnsmasq
wystarczyło, aby działał w środowisku liveCD.
dns=dnsmasq
config do/etc/NetworkManager/NetworkManager.conf
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.conf
musi 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
dns=default
i 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.
Zgodnie z instrukcją systemd-resolved systemd-resolved zapewnia usługi rozpoznawania nazw za pośrednictwem trzech różnych interfejsów:
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 getaddrinfo
powinien 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.
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