Bagaimana cara Menambahkan dnsmasq dan menjaga systemd-resolved (18.04)

10

Saya ingin mendapatkan resolusi dns cepat dengan dnsmasq dan menjaga sistem default-diselesaikan.

Mencari cara yang elegan untuk melakukan ini

cmak.fr
sumber
Anda menyadari bahwa systemd-resolved juga melakukan cache pencarian DNS? Anda tidak perlu dnsmasq pada sistem dengan systemd-diselesaikan. Anda harus membaca Apakah systemd-resolved berguna?
Aeyoun
Saya tahu - Tapi ada 'detail' yang sangat signifikan ... - dnsmasq sebagai cache dns besar - Cache dns dari systemd-resolved sangat kecil dan tidak dapat disetel - Kecepatan resolusi dns menjadi sangat ditingkatkan karena cache yang besar dnsmasq telah diisi oleh permintaan.
cmak.fr
Cache tidak terkonfigurasi default di systemd-diselesaikan sebenarnya lebih besar dari dnsmasq.
Aeyoun
Sebenarnya, dnsmasq melakukan jauh lebih banyak daripada yang diselesaikan oleh systemd; Lihat gist.github.com/jult/4eba88bdd34a57cc79d6#gistcomment-1706666 dan gist.github.com/jult/4eba88bdd34a57cc79d6#file-hostsupdater-sh untuk menyebutkan beberapa nama ...
Julius
@Aeyoun: dengan membaca kode sumber yang diselesaikan sistemd, Anda dapat melihat bahwa batas cache dns 4096 adalah byte, bukan entri. dnsmasq memiliki ukuran cache dnsmasq yang lebih besar dan dapat dikonfigurasi.
cmak.fr

Jawaban:

10

Saya ingin mendapatkan resolusi dns cepat dengan dnsmasq dan menjaga pengaturan default systemd-resolved / NetworkManager tidak tersentuh untuk penggunaan di masa mendatang. Ya, caching dns dnsmasq yang sangat besar dapat meningkatkan kecepatan penelusuran. Ya tujuannya adalah untuk menjaga pengaturan fitur default dns 18,04

  1. Instal dnmasq
  2. Konfigurasikan (dengarkan alamat dan server dns)
  3. Mengkonfigurasi NetWorkManager untuk alamat server dns manual
  4. Periksa verifikasi

1 - Dengan sudo

apt-get -y install dnsmasq

2 - Dengan 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 - Dengan USER, konfigurasikan 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 - Periksa verifikasi

  • mendengarkan systemd-diselesaikan pada 127.0.0.53 sebagaimana mestinya secara default
  • dnsmasq dengarkan pada 127.0.0.1 sebagaimana diatur di / etc / dnsmasq
  • systemd-resolved mengambil 127.0.0.1 dari 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
sumber
1

Saya mencoba mencari solusi yang masuk akal dan terlihat ada pendekatan yang berbeda.

Saya ingin tetap paling dalam dalam tata letak distribusi sambil menjaga semua persyaratan bisnis terpenuhi. Inilah yang saya kumpulkan dan diuji untuk bekerja pada Ubuntu clean 18,04 dan KDE Neon rasa:

# 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

(harap dicatat bahwa satu-satunya perbedaan umum dengan jawaban di atas adalah bahwa NetworkManager menangani penugasan server DNS dnsmasq secara otomatis

Venca B Spam
sumber
berfungsi tetapi apa yang terjadi ketika networkmanager ditingkatkan dengan apt-get --upgrade
cmak.fr
Sejujurnya saya tidak tahu. Tergantung apa yang diputuskan oleh pengelola Ubuntu 18.04. Jika ia membuat layanan yang diselesaikan systemd dinonaktifkan dan tidak akan memodifikasi NetworkManager.conf (yang secara default diselesaikan secara interaktif jika terjadi konflik), maka ia dapat bertahan hingga Ubuntu 20,04 di mana ia diharapkan akan diperbaiki.
Venca B Spam
0

Seperti yang Anda ketahui, Docker menyalin file host /etc/resolv.conf ke wadah tetapi menghapus server nama lokal apa pun.

Solusi saya untuk masalah ini adalah tetap menggunakan systemd-resolvd dan NetworkManager tetapi menambahkan dnsmasq dan menggunakannya untuk "meneruskan" Docker memuat permintaan DNS ke systemd-resolvd .

Panduan langkah demi langkah:

  • Jadikan /etc/resolv.conf file "nyata" sudo rm /etc/resolv.conf sudo touch /etc/resolv.conf
  • Buat file /etc/NetworkManager/conf.d/systemd-resolved-for-docker.conf untuk memberi tahu NetworkManager untuk memberi tahu systemd-resolvd tetapi untuk tidak menyentuh /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
  • Instal dnsmasq sudo apt-get -y install dnsmasq
  • Konfigurasikan dnsmasq di /etc/dnsmasq.conf untuk mendengarkan permintaan DNS yang datang dari Docker dan menggunakan server nama systemd-resolvd # 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
  • Edit /etc/resolv.conf untuk menggunakan nameserver systemd-resolvd (127.0.0.53) dan IP host (172.17.0.1) di jaringan Docker # systemd-resolvd name server nameserver 127.0.0.53 # docker host ip nameserver 172.17.0.1
  • Mulai kembali layanan sudo service network-manager restart sudo service dnsmasq restart sudo service docker restart

Untuk info lebih lanjut lihat posting saya (dalam bahasa Spanyol) https://rubensa.wordpress.com/2020/02/07/docker-no-usa-los-mismos-dns-que-el-host/

rubensa
sumber
-1

Ubuntu 18.10

IMHO, jika Anda akan menjalankan dnsmasq, Anda harus menetapkan alamat ip Anda secara statis alih-alih mendapatkannya dari dhcp. Dengan cara ini Anda bisa menonaktifkan semua sistemd-diselesaikan.

  1. sudo apt-get install dnsmasq

  2. sudo systemctl nonaktifkan systemd-diselesaikan

  3. sudo systemctl berhenti systemd-diselesaikan

  4. Tetapkan alamat ip, gateway, dan tetapkan alamat ip secara manual ke mesin Anda sebagai DNS.

  5. konfigurasikan /etc/dnsmasq.conf (benar-benar ... RTFM -> man dnsmasq.conf)

  6. sudo systemctl aktifkan dnsmasq

  7. reboot
  8. sudo systemctl status dnsmasq

  9. arahkan dhcp pada server dhcp Anda ke server dnsmasq baru Anda yang mengkilap (..jika yumpto)

Sosis yg mengandung cincangan hati
sumber
Saya tidak akan menerapkan apa yang Anda gambarkan. Saya ingin sistem default-diselesaikan tetap tidak tersentuh untuk penggunaan NetworkManager nantinya.
cmak.fr