Jak dodać dnsmasq i zachować systemd-resolved (18.04)

10

Chcę uzyskać szybką rozdzielczość dns z dnsmasq i zachować domyślną rozdzielczość systemd.

Szukasz eleganckiego sposobu na zrobienie tego

cmak.fr
źródło
Czy zdajesz sobie sprawę, że systemd rozwiązany również buforuje wyszukiwania DNS? Nie potrzebujesz dnsmasq w systemie z systemd-resolved. Powinieneś przeczytać Czy systemd rozwiązany jest użyteczny?
Aeyoun,
Wiem - ale jest bardzo znaczący „szczegół” ... - dnsmasq jako ogromna pamięć podręczna dns - Pamięć podręczna dns systemud-resolved jest bardzo mniejsza i nie można jej dostroić - Szybkość rozdzielczości dns ulega znacznej poprawie wraz z ogromną pamięcią podręczną dnsmasq został wypełniony żądaniami.
cmak.fr
Domyślna nieskonfigurowana pamięć podręczna w systemd-resolved jest w rzeczywistości większa niż dnsmasq.
Aeyoun,
W rzeczywistości dnsmasq robi o wiele więcej niż systemd rozwiązany; Zobacz gist.github.com/jult/4eba88bdd34a57cc79d6#gistcomment-1706666 i gist.github.com/jult/4eba88bdd34a57cc79d6#file-hostsupdater-sh, żeby wymienić tylko kilka ...
Julius
@Aeyoun: czytając kod źródłowy rozwiązany przez system, możesz zobaczyć, że limit pamięci podręcznej dns wynoszący 4096 to bajty, a nie wpisy. dnsmasq ma większy - i konfigurowalny - rozmiar pamięci podręcznej dns.
cmak.fr

Odpowiedzi:

10

Chciałem uzyskać szybką rozdzielczość dns z dnsmasq i pozostawić domyślną konfigurację systemu / NetworkManager niezmienioną do wykorzystania w przyszłości. Tak, ogromne buforowanie DNS dnsmasq może poprawić szybkość przeglądania. Tak, celem było utrzymanie domyślnej konfiguracji dns z 18.04

  1. Zainstaluj dnmasq
  2. Skonfiguruj (adresy nasłuchiwania i serwery dns)
  3. Skonfiguruj NetWorkManager do ręcznego adresu serwera dns
  4. Sprawdź weryfikację

1 - Z sudo

apt-get -y install dnsmasq

2 - Z sudo

tee -a /etc/dnsmasq.conf << ENDdm
interface=lo
bind-interfaces
listen-address=127.0.0.1
# DNS server from OpenDns. Use yours...
server=208.67.222.222
server=208.67.220.220
ENDdm

systemctl restart dnsmasq
systemctl enable dnsmasq

3 - W USER skonfiguruj NetworkManager

# Get NM first active profile name
NetManProfile=$(nmcli -t  connection show --active | cut -f 01 -d ':')
# remove, if exists, current dns servers
nmcli con mod "$NetManProfile" ipv4.dns ""
# set 'manual' dns server
nmcli con mod "$NetManProfile" ipv4.ignore-auto-dns yes
# set dnsmasq as manually set dns server
nmcli con mod "$NetManProfile" ipv4.dns 127.0.0.1
# i also disabled ip6, do what u want
nmcli con mod "$NetManProfile" ipv6.method ignore
# reconnect to take effect
nmcli connection down "$NetManProfile"
nmcli connection up "$NetManProfile"

4 - Sprawdź weryfikację

  • domyślnie systemd nasłuchuje na 127.0.0.53
  • dnsmasq nasłuchuje na 127.0.0.1, jak ustawiono w / etc / dnsmasq
  • systemd-resolved wziął 127.0.0.1 z NetworkManager
netstat -antup
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat       PID/Program name    
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      1036/dnsmasq        
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      766/systemd-resolve
cat /run/systemd/resolve/resolv.conf 
nameserver 127.0.0.1
cmak.fr
źródło
1

Próbowałem znaleźć rozsądne rozwiązanie i wygląda na to, że istnieją różne podejścia.

Chciałem pozostać co najwyżej w obrębie układu dystrybucji, jednocześnie spełniając wszystkie wymagania biznesowe. Oto, co zebrałem i przetestowałem, aby pracować na czystym Ubuntu 18.04 i smaku KDE Neon:

# Install required package and reconfigure service plans (i.e. disablesystemd-resolved, enable dnsmasq
sudo apt-get install dnsmasq
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
sudo systemctl enable dnsmasq

# These two lines should work on most environments, but .. :-) - so I kept them commented out for less experienced users
# Just add or change 'dns=dnsmasq' to your NetworkManager.conf to the section [main]
# and yes, the sed expression can be better :-)

#sudo cp /etc/NetworkManager/NetworkManager.conf /etc/NetworkManager/NetworkManager.conf.backup
#sudo bash -c 'cat /etc/NetworkManager/NetworkManager.conf.backup |sed -e "s/^dns=.*//"| sed -e "s/\[main\]/\[main\]\ndns=dnsmasq/" >/etc/NetworkManager/NetworkManager.conf'

# Restart NetworkManager to make the change above applied
sudo systemctl restart NetworkManager

# This removes the systemd resolv.conf link only if it has NetworkManager replacement :-)
ls /var/run/NetworkManager/resolv.conf && sudo rm /etc/resolv.conf

# And add NetworkManager's resolv.conf available for the system resolver
sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf

(należy pamiętać, że jedyną ogólną różnicą w powyższych odpowiedziach jest to, że NetworkManager automatycznie obsługuje przypisania serwera DNS dnsmasq automatycznie

Venca B Spam
źródło
działa, ale co się stanie, gdy menedżer sieci zostanie zaktualizowany o apt-get --upgrade
cmak.fr
Szczerze mówiąc nie wiem. To zależy od decyzji opiekuna Ubuntu 18.04. Jeśli utrzyma wyłączoną usługę systemową i nie zmodyfikuje NetworkManager.conf (która domyślnie jest rozwiązywana interaktywnie w przypadku konfliktu), może przetrwać do Ubuntu 20.04, gdzie, mam nadzieję, zostanie naprawiona.
Venca B Spam
0

Jak wiesz, Docker kopiuje plik host /etc/resolv.conf do kontenerów, ale usuwa lokalny serwer nazw.

Moim rozwiązaniem tego problemu jest nadal używanie systemd-resolvd i NetworkManager, ale dodawanie dnsmasq i używanie go do „przekazywania” zapytań DNS kontenerów Docker do systemd-resolvd .

Przewodnik krok po kroku:

  • Ustaw plik /etc/resolv.conf w „prawdziwy” plik sudo rm /etc/resolv.conf sudo touch /etc/resolv.conf
  • Utwórz plik /etc/NetworkManager/conf.d/systemd-resolved-for-docker.conf, aby poinformować NetworkManager, aby poinformował systemd-resolvd, ale nie dotknął /etc/resolv.conf [main] # NetworkManager will push the DNS configuration to systemd-resolved dns=systemd-resolved # NetworkManager won’t ever write anything to /etc/resolv.conf rc-manager=unmanaged
  • Zainstaluj dnsmasq sudo apt-get -y install dnsmasq
  • Konfiguracja dnsmasq w pliku /etc/dnsmasq.conf do słuchania DNS zapytań nadchodzi z Docker i korzystania Systemd-RESOLVD serwer nazw # Use interface docker0 interface=docker0 # Explicitly specify the address to listen on listen-address=172.17.0.1 # Looks like docker0 interface is not available when dnsmasq service starts so it fails. This option makes dynamically created interfaces work in the same way as the default. bind-dynamic # Set systemd-resolved DNS server server=127.0.0.53
  • Edytuj plik /etc/resolv.conf, aby używać serwera nazw systemd-resolvd (127.0.0.53) i adresu IP hosta (172.17.0.1) w sieci Docker # systemd-resolvd name server nameserver 127.0.0.53 # docker host ip nameserver 172.17.0.1
  • Uruchom ponownie usługi sudo service network-manager restart sudo service dnsmasq restart sudo service docker restart

Aby uzyskać więcej informacji, zobacz mój post (w języku hiszpańskim) https://rubensa.wordpress.com/2020/02/07/docker-no-usa-los-mismos-dns-que-el-host/

rubensa
źródło
-1

Ubuntu 18.10

IMHO, jeśli zamierzasz uruchomić dnsmasq, powinieneś statycznie przypisać swój adres IP zamiast pobierać go z dhcp. W ten sposób możesz po prostu wyłączyć wszystkie rozwiązania systemowe.

  1. sudo apt-get install dnsmasq

  2. sudo systemctl wyłącza systemd-rozwiązany

  3. sudo systemctl stop systemd-rozwiązany

  4. Ręcznie przypisz adres IP, bramę i adres IP do urządzenia jako DNS.

  5. configure /etc/dnsmasq.conf (naprawdę ... RTFM -> man dnsmasq.conf)

  6. sudo systemctl enable dnsmasq

  7. restart
  8. sudo systemctl status dnsmasq

  9. wskaż dhcp na serwerze dhcp na nowy błyszczący serwer dnsmasq (.. jeśli yumpto)

Pasztetowa kiełbasa
źródło
Nie będę wdrażał tego, co opisałeś. Chcę, aby domyślna rozdzielczość systemowa pozostała nietknięta do ewentualnego przyszłego użycia NetworkManager.
cmak.fr