Bagaimana cara menonaktifkan systemd-resolved dan mengatasi DNS dengan dnsmasq?

Jawaban:

35

dnsmasq paket masih tersedia dalam 16.10 dan 17.04.

  1. Instal dnsmasqdan dependensi (atau setidaknya unduh paketnya) sebelum menonaktifkansystemd-resolved :

    sudo apt-get install dnsmasq
    
  2. Nonaktifkan systemd-resolveddan verifikasi dnsmasqsedang berjalan:

    sudo systemctl stop systemd-resolved
    sudo systemctl disable systemd-resolved
    
    systemctl status dnsmasq
    
  3. Bumbui dnsmasqsecukupnya. Setelah menerapkan pengaturan Anda, mulai ulang dnsmasq:

    sudo systemctl stop dnsmasq
    sudo systemctl start dnsmasq
    

Setelah langkah 2 Anda mungkin tanpa penyelesai sistem kerja sampai langkah 3 selesai. Anda mungkin perlu me-restart subsistem jaringan (atau cukup reboot) agar bisa dnsmasqberfungsi dengan konfigurasi default. Dalam pengujian saya, menambahkan server DNS yang dikenal ke /etc/dnsmasq.confdan memulai kembali dnsmasqsudah cukup untuk membuatnya bekerja di lingkungan liveCD.

pemurah
sumber
Jawaban yang bagus, dan sepertinya satu-satunya solusi ketika menonaktifkan NetworkManager tidak dapat diterima!
bogl
3
Bagi saya, ini adalah jawaban yang bagus tetapi juga memerlukan langkah-langkah tambahan dari jawaban @ blabla, menambahkan dns=dnsmasqkonfigurasi ke/etc/NetworkManager/NetworkManager.conf
Roberto Tyley
Sama disini. Setelah berjuang dengan systemd-resolved dan unbound switching ke dnsmasq melakukan trik di ubuntu 17.10. Saya memang harus menggunakan tambahan blabla.
Alberto L. Bonfiglio
17

Selain jawaban @quixotic:

Pastikan Anda memiliki di /etc/NetworkManager/NetworkManager.conf:

[main]
dns=dnsmasq

jika Anda perlu menambahkannya, restart NetworkManager seperti ini:

sudo systemctl restart NetworkManager

dan /etc/resolv.confperlu menjadi symlink ke /var/run/NetworkManager/resolv.conf. bisa dilakukan seperti ini

sudo rm /etc/resolv.conf; sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf
blabla
sumber
Sebenarnya saya telah menetapkannya dns=defaultdan berfungsi dengan baik karena saya memiliki nameserver yang didefinisikan kemudian oleh NetworkManager alih-alih didefinisikan dalam dnsmasq; ini berfungsi untuk saya - NM mendapatkan nameserver dari pengaturan yang dibuat dalam konfigurasi NME KDE melalui baki sistem. Saya menggunakan IP tetap pada jaringan rumah saya FWIW.
pbhj
1
Langkah ini merupakan tambahan yang diperlukan untuk jawaban @ quixotic untuk saya (ubuntu 17.04, instalasi lengkap, bukan LiveCD).
Roberto Tyley
0

Menurut manual systemd-resolved , systemd-resolved menyediakan layanan resolusi nama melalui tiga antarmuka yang berbeda:

  1. "API berfitur lengkap yang dipecahkan oleh sistem systemd"
  2. "pendengar rintisan DNS lokal pada alamat IP 127.0.0.53 pada antarmuka loopback lokal"
  3. API getibrinfo (3) glibc sebagaimana didefinisikan oleh RFC3493 dan fungsi resolver terkait, termasuk gethostbyname (3). API ini didukung secara luas, termasuk di luar platform Linux. Namun, dalam bentuknya yang sekarang, ia tidak memaparkan informasi status validasi DNSSEC, dan hanya sinkron. API ini didukung oleh Switch Layanan Nama glibc (nss (5)). Penggunaan modul NSS glibc nss-resol (8) diperlukan untuk memungkinkan fungsi NSS resolver glibc untuk menyelesaikan nama host melalui sistemd-diselesaikan.

Tampaknya dua antarmuka pertama tidak akan mengganggu dalam resolusi DNS normal dan bagi saya masalahnya cenderung berada pada yang ketiga.

Dalam manual nss-resol :

Untuk mengaktifkan modul NSS, tambahkan "resolusikan" ke baris yang dimulai dengan "hosts:" di /etc/nsswitch.conf. Secara khusus, disarankan untuk menempatkan "menyelesaikan" di awal baris "hosts: /etc/nsswitch.conf:" (tetapi setelah entri "files" atau "mymachines"), tepat sebelum entri "dns" jika ada, diikuti oleh "[! UNAVAIL = return]", untuk memastikan permintaan DNS selalu dirutekan melalui systemd-resolved (8) jika sedang berjalan, tetapi dialihkan ke nss-dns jika layanan ini tidak tersedia

Jadi yang diperlukan adalah membuat "dns" mendahului "resol" di "host:" baris /etc/nsswitch.conf . Dan kemudian getaddrinfocukup mematuhi /etc/resolv.conf .

Solusi ini hanya mencegah systemd-diselesaikan dari menangani semua permintaan resolusi DNS dan tidak terbatas pada manajer jaringan tertentu. Dan itu juga memastikan layanan LLMNR dan mDNS beroperasi secara normal.

(Saya tidak cukup terbiasa dengan bagaimana resolusi nama bekerja di Linux dan juga tidak yakin tentang apa yang saya pahami dari manual ini. Permohonan menunjukkan jika saya mendapatkan kesalahan. Thx :))

Dummmy
sumber
0

Untuk (X) Ubuntu 18.04 (lihat jawaban saya di stackexchange ).

Ini salinannya (haruskah saya membuat salinan?)

Ini adalah solusi untuk (X) Ubuntu 18.04 Bionic.

Instal dnsmasq

sudo apt install dnsmasq

Nonaktifkan pendengar yang diselesaikan systemd pada port 53 (jangan menyentuh /etc/systemd/resolved.conf, karena dapat ditimpa saat upgrade):

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

dan mulai kembali

$ sudo systemctl restart systemd-resolved

(Atau nonaktifkan sepenuhnya dengan $ sudo systemctl disable systemd-resolved.service)

Hapus /etc/resolv.conf dan buat kembali. Ini penting, karena resolv.conf adalah tautan simbolis ke /run/systemd/resolve/stub-resolv.conf secara default. Jika Anda tidak akan menghapus tautan simbolis, file akan ditimpa oleh systemd saat reboot (walaupun kami menonaktifkan systemd-resolved!). NetworkManager (NM) juga memeriksa apakah itu adalah tautan simbolis untuk mendeteksi konfigurasi yang diselesaikan sistem.

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

Nonaktifkan penimpaan /etc/resolv.conf oleh NM (ada juga opsi rc-manager, tetapi tidak berfungsi, meskipun dijelaskan dalam manual):

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

dan mulai lagi:

$ sudo systemctl restart NetworkManager

Beri tahu dnsmasq untuk menggunakan resolv.conf dari NM:

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

dan mulai lagi:

$ sudo systemctl restart dnsmasq

Gunakan dnsmasq untuk menyelesaikan:

$ cat /etc/resolv.conf 
# Use local dnsmasq for resolving
nameserver 127.0.0.1
sena
sumber