Jawaban:
dnsmasq
paket masih tersedia dalam 16.10 dan 17.04.
Instal dnsmasq
dan dependensi (atau setidaknya unduh paketnya) sebelum menonaktifkansystemd-resolved
:
sudo apt-get install dnsmasq
Nonaktifkan systemd-resolved
dan verifikasi dnsmasq
sedang berjalan:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
systemctl status dnsmasq
Bumbui dnsmasq
secukupnya. 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 dnsmasq
berfungsi dengan konfigurasi default. Dalam pengujian saya, menambahkan server DNS yang dikenal ke /etc/dnsmasq.conf
dan memulai kembali dnsmasq
sudah cukup untuk membuatnya bekerja di lingkungan liveCD.
dns=dnsmasq
konfigurasi ke/etc/NetworkManager/NetworkManager.conf
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.conf
perlu 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
dns=default
dan 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.
Menurut manual systemd-resolved , systemd-resolved menyediakan layanan resolusi nama melalui tiga antarmuka yang berbeda:
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 getaddrinfo
cukup 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 :))
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