resolv.conf terus ditimpa ketika dnsmasq dimulai ulang, melanggar dnsmasq

9

Saya menjalankan Debian Jessie dan saya mencoba mengkonfigurasi dnsmasq sebagai server DNS caching. Saya menggunakan panduan untuk membuat yang berikut ini /etc/dnsmasq.conf:

listen-address=127.0.0.1
bind-interfaces
domain-needed
bogus-priv
no-hosts
dns-forward-max=150
cache-size=1000
neg-ttl=3600
resolv-file=/etc/resolv.dnsmasq
no-poll

Melakukan sudo service dnsmasq restartgagal dan itu tidak akan mulai, katakan padaku

Mar 26 17:13:01 user dnsmasq[26743]: dnsmasq: syntax check OK.
Mar 26 17:13:01 user dnsmasq[26746]: dnsmasq: only one resolv.conf file allowed in no-poll mode.

Ok, agak aneh bahwa konfigurasi langsung dari panduan gagal. Saya hanya akan menghapus no-pollopsi untuk melihat apakah itu berfungsi. Kali ini mulai baik-baik saja, tetapi resolusi DNS jelas gagal. Dokumen relevan:

/etc/resolv.conf:

nameserver 127.0.0.1

/etc/resolv.dnsmasq:

nameserver 8.8.8.8

/var/run/dnsmasq/resolv.conf:

nameserver 127.0.0.1

File ketiga tampaknya menjadi file resolv.conf langsung dnsmasq, karena menambahkan baris nameserver ke dalamnya ketika dnsmasq sudah berjalan menyebabkan resolusi DNS untuk segera mulai bekerja. Jadi sepertinya diabaikan saya /etc/resolv.dnsmasq. Saya juga mencoba menambahkan baris nameserver ke saya /etc/resolv.confdan menghapus resolv-filebaris di /etc/dnsmasq.conf, tetapi akan ditimpa segera dengan apa yang Anda lihat di atas setelah melakukan sudo service dnsmasq restart.

Apa yang terjadi dengan dnsmasq dan apakah saya mengkonfigurasi dnsmasq sebagai server DNS caching?

nullPengguna
sumber
1
Jika Anda hanya ingin server statis, mengapa Anda tidak memasukkan server=8.8.8.8konfigurasi dnsmasq Anda?
tripleee
Saya pikir pada no-polldasarnya mengatakan untuk mengabaikan resolv-file. Saat startup, dibutuhkan file mana saja yang lebih baru, sehingga akan ada /etc/resolv.confdalam kasus Anda (karena akan ditulis ulang ketika sesuatu berubah).
tripleee
Saya masih tidak tahu apa cara yang benar untuk melakukannya jika saya memiliki lebih dari satu server DNS dalam pikiran, tetapi karena saya tidak, saya hanya akan senang bahwa komentar Anda memecahkan masalah saya.
null Pengguna

Jawaban:

11

Tampaknya ada bug dalam skrip start-up untuk dnsmasqyang digunakan resolvconfuntuk memecahkan resolver lokal jika antarmuka loopback lokal tidak secara eksplisit except-ed dalam /etc/defaults/dnsmasqfile.

Jawaban singkatnya adalah Anda dapat menambahkan ...

DNSMASQ_EXCEPT=lo

untuk /etc/defaults/dnsmasqmenyelesaikan masalah.

Untuk info lebih lanjut, lihat pertanyaan ini ...

/raspberrypi/37439/proper-way-to-prevent-dnsmasq-from-overwriting-dns-server-list-supplied-by-dhcp

bigjosh
sumber
Ini menyelamatkan hidupku. Terima kasih.
Ryan Bobrowski
3

bigjosh benar - kecuali ada pembaruan untuk dnsmasq, dan sekarang ada opsi di /etc/default/dnsmasqmana Anda dapat membatalkan hash:

IGNORE_RESOLVCONF=yes
Maynard
sumber
Beginilah cara kerjanya dengan pengaturan kompleks saya di Ubuntu 16.04.
Ikon
1
Cara bigjosh bekerja untukku. Meskipun /etc/defaults/dnsmasqsudah IGNORE_RESOLVECONF=yesdengan instruksi untuk menghapus komentar untuk menyelesaikan masalah ini, yang tidak.
andho
2

Jangan gunakan

resolv-file=/etc/resolv.dnsmasq

Masukkan server dns ke dnsmasq.conf, seperti

server=/localnet/192.168.0.1 # change ip for your ip-server
server=8.8.8.8
server=8.8.4.4

Dan tambahkan ke dnsmasq.conf

no-resolv
aclg
sumber
1

Jika Anda hanya menginginkan server DNS khusus caching dan tidak ada hal lain yang dapat dilakukan dnsmasq, Anda sebaiknya menginstal lwresdatau unboundmenggunakan konfigurasi default stock yang memberikan Anda server DNS khusus caching. Kemudian Anda hanya mengatur /etc/resolv.confuntuk menggunakan "nameserver 127.0.0.1" dan Anda selesai.

Yang menyenangkan adalah kedua paket ini tidak dipusingkan dengan apa yang ada di /etc/resolv.confdnsmasq seperti dan dengan demikian solusi IMHO bersih. Anda juga biasanya dapat menghapus resolvconfpaket sehingga tidak ada yang berantakan /etc/resolv.conf.

FYI, dnsmasq menjadi agak rumit, terlalu banyak lonceng dan peluit dan hanya menyebabkan rasa sakit bagi kebanyakan orang lagi. Melanggar KISS dalam buku saya.

mili
sumber
Sayangnya, beberapa paket bergantung dnsmasq-base, seperti network-managerdan libvirt-bin(jika Anda melakukan KVM), jadi tidak selalu mungkin untuk sepenuhnya menghilangkannya. Dalam hal ini, Anda dapat menghapus /usr/sbin/dnsmaqdan menjadikannya sebagai tautan keras /bin/truesehingga selalu berhasil (untuk mengelabui skrip init) Kemudian chattr +i /usr/sbin/dnsmasquntuk menguncinya agar tidak diperbarui. Saya harus melakukan ini pada beberapa laptop.
milli
+1 juga dijelaskan di philandstuff.com/2013/11/07/dnsmasq-resolvconf.html . Perilaku menjijikkan dan terus menyebabkan rasa sakit bahkan 5 tahun setelah posting dan laporan bug ...
user2480144