Niedawno zainstalowałem dnsmasq, aby działał jako serwer DNS dla mojej sieci lokalnej. dnsmasq nasłuchuje na porcie 53, który jest już używany przez lokalny odbiornik kodów DNS z systemd-resolved .
Zatrzymanie systemu rozwiązane, a następnie uruchom go ponownie po uruchomieniu dnsmasq rozwiązuje ten problem. Ale powraca po ponownym uruchomieniu: systemd-resolved jest uruchamiany z preferencją i dnsmasq nie uruchamia się, ponieważ port 53 jest już w użyciu.
Pierwsze oczywiste pytanie, jak sądzę, brzmi: jak najlepiej sprawić, by systemd rozwiązał zrozumiał, że nie powinien on uruchamiać lokalnego nasłuchiwania kodu pośredniczącego DNS, a tym samym zachować port 53 do użytku przez dnsmasq?
Bardziej interesującym pytaniem jest jednak to, w jaki sposób obie usługi mają na ogół współpracować. Czy mają nawet działać obok siebie, czy też system jest rozwiązany w taki sam sposób, jeśli używa się dnsmasq?
sudo systemctl disable systemd-resolved
? Myślę, że dnsmasq, jeśli właściwie skonfigurowany, powinien obsługiwać rozdzielczość domeny.sudo systemctl stop systemd-resolved
jeśli jest uruchomione. Użyj,sudo systemctl status systemd-resolved
aby sprawdzićOdpowiedzi:
Od wersji systemd 232 (wydanej w 2017 roku) możesz edytować
/etc/systemd/resolved.conf
i dodawać ten wiersz:Spowoduje to wyłączenie wiązania do portu 53.
Opcja została opisana bardziej szczegółowo na stronie manualnej resolved.conf .
Możesz znaleźć wersję systemd, w której działa twój system:
źródło
Możesz wyłączyć
systemd-resolved
ładowanie podczas rozruchu za pomocąsudo systemctl disable systemd-resolved
.Jeśli chcesz uruchomić oba razem, możesz przekierować
systemd-resolved
do używania localhost jako podstawowego serwera nazw. Dzięki temu wszystkie zapytania będą kierowane do dnsmasq w celu rozwiązania problemu przed trafieniem na zewnętrzny serwer DNS. Można to zrobić, dodając wiersznameserver 127.0.0.1
u góry/etc/resolv.conf
pliku. Spowoduje to również wyłączenie lokalnego buforowania systemd.Możesz przeczytać więcej na wiki Arch Linux . Skopiowałem to stamtąd i całkiem dobrze to obejmuje.
Jednak nie pozwala to niezawodnie uniknąć błędu podczas rozruchu, tzn. Dnsmasq nadal nie powiedzie się, jeśli systemd rozwiązany zostanie uruchomiony jako pierwszy. Jeśli twoja wersja
systemd
jest wystarczająco nowa, użyj odpowiedzi Malvineous . Jeśli twoja wersjasystemd
jest za stara, możesz obejść ten problem, modyfikując jednostkę dnsmasq: w[Unit]
sekcji dodajBefore=systemd-resolved
.Po tym, jeśli chcesz, możesz utworzyć osobny
/etc/dnsmasq-resolv.conf
plik dla głównego serwera nazw i przekazać go za pomocą-r
lub--resolv-file
opcję, albo dodać upstream serwery nazw pliku konfiguracyjnego dnsmasq i użyj-R
lub--no-resolv
opcję. W ten sposób masz tylko lokalnego hosta/etc/resolv.conf
i wszystko przechodzi przez dnsmasq.źródło
Before=systemd-resolved
w[Unit]
sekcji. W ten sposób dnsmasq zawsze będzie uruchamiany jako pierwszy.Sądząc po stronach systemowych, nie jest możliwe ręczne wyłączenie pośredniczącego serwera DNS. Co ciekawe, zauważyłem opisany problem dopiero po aktualizacji systemu z 230 do 231.
Wyłączenie systemu-rozwiązanego nie było dla mnie opcją, ponieważ potrzebuję go do obsługi odebranych serwerów DNS za pośrednictwem DHCP.
Moje rozwiązanie polegało na tym, że dnsmasq przestał działać rozwiązany przed uruchomieniem i uruchomił go ponownie później.
Utworzyłem konfigurację drop-in w
/etc/systemd/system/dnsmasq.service.d/resolved-fix.conf
:To wydaje się być dość hackerskim rozwiązaniem, ale działa.
źródło
DNSStubListener
instrukcji resolved.conf podano poniżej : „Pamiętaj, że detektor kodów pośredniczących DNS jest domyślnie wyłączany, gdy jego adres nasłuchiwania i port są już w użyciu”. Dlatego myślę, że ta metoda działa dobrze.Właśnie włączyłem opcję „interfejsy powiązań”, usuwając „#” na początku wiersza w /etc/dnsmasq.conf.
Mogłem ponownie uruchomić dnsmasq:
Wskazano mi na to rozwiązanie dzięki tej dyskusji rozwiązanej: dodaj opcję, aby wyłączyć przelicznik kodów pośredniczących
źródło
Tam będzie opcja w
systemd
wersji232
wyłączyć słuchacza skrótowe. Zobacz https://github.com/systemd/systemd/pull/4061 .źródło
Jeśli używasz domyślnej konfiguracji Ubuntu 18.04, może to być spowodowane konfliktem między
systemd-resolved
(domyślnym serwerem DNS) adnsmasq
. Jeśli zainstalowałeśdnsmasq
się celowo, ponieważ wyraźnie tego chciałeś, to jedna z pozostałych odpowiedzi na to pytanie, wyjaśniająca, jak wyłączyćsystemd-resolved
, prawdopodobnie będzie dla ciebie dobra. Jeśli nie zainstalowałeś jawniednsmasq
, prawdopodobnie jest na miejscu, ponieważ używaszlxd
. Może to wynikać z tego, że faktycznie używaszlxd
do zarządzania kontenerami, ale najprawdopodobniej dzieje się tak, ponieważ zatrzaski służąlxd
do ochrony podczas instalowania aplikacji. Z mojej perspektywy chcę zachowaćdnsmasq
(bo tegolxd
chce), ale chcę też zachowaćsystemd-resolved
jako serwer DNS (ponieważ to właśnie wybrał zespół Ubuntu i ufam im bardziej niż sobie).Wydaje się, że jest to
lxd
problem w sercu. Jeśli tak, to sposób, w jaki to naprawiłem, zgodnie z postem na liście mailingowej użytkowników lxd , jest następujący:$ lxc network edit lxdbr0
Spowoduje to edycję konfiguracji w edytorze terminali. Będzie to wyglądać mniej więcej tak:
Dodaj do niego trzy linie:
a to powinno spowodować
dnsmasq
, że uruchomione przezlxd
to urządzenie wykryje pętle DNS. To, przynajmniej dla mnie, rozwiązał problem i zatrzymał sięsystemd-resolved
idnsmasq
używając 100% CPU.źródło
Oto rozwiązanie dla (X) Ubuntu 18.04 Bionic.
Zainstaluj dnsmasq
Wyłącz nasłuchiwanie rozpoznane przez system na porcie 53 (nie dotykaj /etc/systemd/resolved.conf, ponieważ może zostać nadpisany podczas aktualizacji):
i uruchom go ponownie
(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.
Wyłącz nadpisywanie pliku /etc/resolv.conf przez NM (istnieje również opcja rc-manager, ale to nie działa, mimo że jest opisane w podręczniku NM):
i uruchom go ponownie:
Powiedz dnsmasq, aby używał resolv.conf z NM:
i uruchom go ponownie:
Użyj dnsmasq do rozwiązania:
źródło
Rozwiązałem to w ten sposób:
Dodaj lub usuń komentarz z następującego wiersza w / etc / default / dnsmasq :
Utwórz własny plik resolv (/etc/resolv.personal), aby zdefiniować serwery nazw. Możesz użyć dowolnego serwera nazw tutaj. Wziąłem dwa z https://www.opennic.org
W /etc/dnsmasq.conf dodaj lub usuń komentarz z następującego wiersza:
Następnie uruchom ponownie dnsmasq i wyłącz domyślny program rozpoznawania nazw: systemd-resolved.
źródło
Nie jestem pewien, dlaczego obie usługi próbują użyć tego samego adresu. Być może możesz je zaaranżować tak jak w moim przypadku na Xubuntu 18.04.1, gdzie ich konfiguracja jest następująca:
Aby systemd został rozwiązany za pomocą mojego dnsmasq, właśnie ustawiłem:
W mojej konfiguracji dnsmasq ustawiam zewnętrzne serwery nazw:
Po ponownym uruchomieniu wszystkiego:
systemd-resolved ustawi domyślny serwer DNS na dnsmasq w:
źródło
/etc/resolv.conf
jest dowiązaniem symbolicznym/run/systemd/resolve/resolv.conf
. Najwyraźniej jest to jeden z czterech (!) Możliwych trybów , w których może działać system-resolved. Wydaje mi się, że zależy to od konfiguracji dystrybucji, tzn. Jest prawdą w przypadku Xubuntu 18.04.1, ale może być inny w innych systemy.Nie mogłem zmusić dnsmasq do rozpoczęcia korzystania z rozwiązań znalezionych online, tj. Wyłączenia systemd-resolved, zmiany dnsmasq.conf na „wiąż dynamiczne” zamiast „łącz interfejsy”. Udało mi się go uruchomić przy starcie, uruchamiając dnsmasq Po network-online.service zamiast network.service:
źródło
Wants=
. freedesktop.org/wiki/Software/systemd/NetworkTargetOto, co zadziałało dla mnie (po godzinach bólu) w Ubuntu 18.10 Cosmic Cuttlefish. Zrobiłem to, aby skorzystać
dnsmasq
ze stosunkowo bardziej niezawodnego mechanizmu buforowania i aby uniknąć luk w programie rozpoznawania nazw NGINX . Zauważ, że korzystam z wersji Ubuntu Server (noNetworkManager
/nmcli
, justsystemd-networkd
) i działa na AWS EC2, więc musiałem też zachować DNS i DHCP w domyślnej domenie wyszukiwania EC2. Nie chciałemsystemd-resolved
całkowicie wyłączać, ponieważ nie mam pojęcia, jak to może wpłynąć na przyszłe aktualizacje. Wszystko tutaj jest uruchamiane jako root / sudo, chyba że zaznaczono inaczej (dzieje się to domyślnie po przekazaniu jako dane użytkownika EC2).Sprawdź,
127.0.0.1#53
czy używana jest rozdzielczość, a DNSSEC działa z czymś takimdig +trace facebook.com
źródło
DNSStubListener=no
?