Sudah terkenal bahwa NetworkManager tidak bermain dengan baik dnsmasq
(ref: di sini ). Saya telah membaca diskusi panjang di sini tapi masih tidak yakin apa cara yang disarankan untuk menangani situasi ini.
Yang saya inginkan adalah menggunakan dnsmasq
DNS dan DHCP untuk jaringan lokal saya. Apa yang akan menjadi cara yang direkomendasikan dalam kasus ini?
Tampaknya masalah tetap ada bahkan untuk Ubuntu 14.04, bahkan bug tersebut diklaim telah diperbaiki.
Saat bekerja di sekitarnya, orang-orang menonaktifkan NM yang diperbudak dnsmasq-base
karena alasan berikut:
NM-diperbudak dnsmasq
menggunakan opsi hardcoded (dalam C) yang menyediakan fungsionalitas yang sangat terbatas.
- Itu tidak mendengarkan di ethX (
--listen-address=127.0.0.1
). Jadi kami tidak dapat menggunakan server kami sebagai server DNS untuk PC jaringan lokal kami, artinya sama sekali tidak berguna untuk LAN. - Itu tidak men-cache permintaan (
--cache-size=0
). Tanpa caching ==> tidak ada speedup permintaan DNS. Ini lagi sangat penting untuk LAN karena ada banyak pengguna bersamaan. - Akhirnya, kita juga memerlukan fungsionalitas DHCP dan TFTP dari dnsmasq, jadi meskipun NM + dnsmasq menyertakan server DNS asli, kita harus menjalankan dnsmasq lainnya
Tapi saya tidak yakin apakah mereka masih memegang dan / atau bagaimana perbaikannya telah memecahkan masalah. Lebih jauh, tidak satupun dari mereka yang sangat jelas apa yang mereka lakukan dan bagaimana mereka lakukan untuk menyelesaikan masalah mereka. Yaitu, bagian solusinya hilang dari diskusi panjang . Bisakah seseorang mengisi bagian yang kosong? Yaitu,
The dnsmasq
disediakan out-of-box dengan Ubuntu tidak bekerja, pada sisi server, karena alasan di atas. Dan juga, di sisi klien, "dnsmasq yang diinstal pada laptop Ubuntu tersebut tidak dapat melakukan permintaan DNS LAN dari server DNS saya" , karena "NetworkManager (Ubuntu laptops) menyebabkan mereka memiliki pengaturan nameserver 127.0.1.1 yang aneh" ( ref: solusi DNS untuk LAN atau jaringan rumah lokal )
Bagaimana membuat dnsmasq agar bekerja dengan NetworkManager, sehingga dapat memberikan DNS dan DHCP (dan TFTP) ke jaringan lokal saya, baik di sisi server dan klien?
TL'dr
bagi mereka yang mencari jawabannya. Dari semua jawaban di bawah ini, saya menemukan solusi paling sederhana adalah @ brad, untuk sisi server (masih belum ada jawaban yang baik untuk sisi klien):
satu-satunya solusi untuk masalah ini adalah dengan menonaktifkan NM-drive dnsmasq ..., dan menginstal "standar" dnsmasq dan kemudian mengkonfigurasinya melalui
/etc/dnsmasq.conf
file konfigurasi standarnya .
Jawaban:
Saya juga punya masalah.
Pada prinsipnya, setelah wiki.archlinux , tampaknya untuk mengaktifkan caching harus cukup untuk membuat file yang
/etc/NetworkManager/dnsmasq.d/cache
berisi sederhanaSaya mencoba ini tetapi, setelah NM restart, saya masih tidak memiliki cache:
Perhatikan bahwa file conf yang dikutip selalu kosong: Saya belum dapat mengkonfigurasi opsi apa pun menggunakan prosedur ini.
Secara keseluruhan, nampaknya dnsmask NM yang diperbudak dalam 14,04 (yang disediakan oleh paket dnsmasq-base) benar-benar terkunci, sehingga tidak mungkin untuk mengaktifkan caching, atau apa pun yang lain (dhcp, tftp).
Jika ini benar saya pikir, seperti yang Anda katakan, satu-satunya solusi untuk masalah ini adalah dengan menonaktifkan NM-drive dnsmasq dengan mengomentari baris
dalam file
/etc/NetworkManager/NetworkManager.conf
dan instal "standar" dnsmasq dan kemudian konfigurasikan melalui/etc/dnsmasq.conf
file konfigurasi standarnya .sumber
--conf-dir=/etc/NetworkManager/dnsmasq.d
, yangcache-size
ditentukan dalam file yang Anda buat digunakan. Anda dapat melihat perbedaannya menggunakandig
Dimungkinkan untuk mengganti pengaturan dengan memasukkannya ke dalam
/etc/NetworkManager/dnsmasq.d/*.conf
. Pengaturan file konfigurasi lebih diutamakan daripada flag baris perintah. Mereka diterapkan ketika NetworkManager memulai dnsmasq. Jalankansudo service network-manager restart
untuk mendaftar kembali. (Jika ada keraguan: jawaban brad melewatkan fakta yangps ax | grep dns
menunjukkan--conf-dir
argumen)Sebagai contoh:
Seingat saya NetworkManager menonaktifkan caching dnsmasq secara default karena kekhawatiran akan keracunan cache. Untuk mesin yang dipercaya semua pengguna, ini mungkin bukan masalah.
NetworkManager tidak berintegrasi dengan
resolvconf
, dan server NM di127.0.1.1
tidak akan digunakan secara lokal jika paket resolvconf diinstal. resolvconf adalah bagian dari penginstalan Debian minimal-Ubuntu dan standar; NetworkManager menambahkan kembali fungsionalitas itu dengan cara yang lebih terintegrasi, kurang berbasis script.NetworkManager memastikan untuk tidak mengganggu instance global dnsmasq (mengikat IP loopback sekunder dan pengaturan
bind-interfaces
melalui/etc/dnsmasq.d/network-manager
). Jika Anda menginstal turunan global dnsmasq dan menyimpan turunan milik NM, periksa ulang/etc/resolv.conf
untuk melihat mana yang akan digunakan oleh host secara default.Meskipun Anda dapat mengkustomisasi instance dnsmasq NetworkManager seperti yang ditunjukkan di atas, jika Anda ingin server DNS yang mengikat ke antarmuka publik, Anda harus menginstal
dnsmasq
paket (NetworkManager hanya menggunakandnsmasq-base
, yang tidak mengkonfigurasi instance global) dan memasukkan konfigurasi Anda/etc/dnsmasq.d/*.conf
. Contoh slave NetworkManager hanya dimaksudkan untuk mengikat ke antarmuka loopback dan mengonfigurasinya di luar lingkup itu akan berisiko melanggar itu.Singkatnya, untuk seseorang yang hanya ingin caching DNS lokal:
Untuk LAN sederhana, berbagi koneksi NetworkManager masih cukup. Tetapi untuk LAN yang dikonfigurasi khusus, dengan TFTP dan sebagainya:
sumber
dnsmasq
paket. lalu untuk apaecho
perintah selanjutnya ? karenadnsmasq
akan hilang.dnsmasq
, tetapi Anda harus tetapdnsmasq-base
menginstal karena NM.Saya ingin menetapkan MAC tertentu ke alamat IP tertentu dan untuk tujuan stabilitas, tetap menggunakan Network Manager / dnsmasq default sebanyak mungkin.
https://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/src/dnsmasq/nm-dnsmasq-manager.c memang memiliki komentar tentang penggunaan --conf-file untuk mengabaikan konfigurasi, tetapi kemudian pada file yang kita miliki
Di bawah Ubuntu 16.04 LTS, setelah menyiapkan Hot Spot Wi-Fi dan berbagi koneksi lain,
ps auxgww | grep dnsmasq
menunjukkan bahwa argumen baris perintah terakhir dari setiap proses dnsmasq adalah:Dengan demikian, dimungkinkan untuk membuat file config di direktori tersebut yang dibagikan di antara semua permintaan dnsmasq yang dimulai oleh Network Manager.
Saya membuat /etc/NetworkManager/dnsmasq-share.d/Hue
dan reboot, meskipun sedang berjalan
akan bekerja.
Ini mengakibatkan perangkat saya mendapatkan alamat IP yang sesuai.
Ya, ini salah karena itu berarti bahwa semua doa dnsmasq oleh NetworkManager akan mendapatkan deklarasi ini, tetapi dalam kasus ini, tidak berbahaya karena itu hanya masalah jika MAC muncul di jaringan yang dimaksud. Jika jaringan bukan 192.168.1, maka akan ada masalah.
Ini lebih kuat daripada mengganti / usr / sbin / dnsmasq dengan skrip seperti yang diusulkan di https://gist.github.com/magnetikonline/6236150
Solusi yang tepat adalah memodifikasi bagaimana dnsmasq dipanggil untuk menggunakan file konfigurasi dnsmasq dengan benar. Saya mengerti keinginan untuk memiliki Network Manager "hanya bekerja", tetapi membuat alat-alat idiot-proof berarti hanya idiot yang dapat menggunakannya.
sumber
Solusi saya mungkin merusak Network Manager dan menjaga segala cara sederhana dalam melakukan sesuatu. Dengan cara NM yang rusak dalam menangani dnsmasq, saya hanya menimpanya dengan metode saya di bawah ini.
Solusi untuk masalah ini adalah dengan hanya melakukan hal berikut:
Edit
~/dnsmasq.conf
file di direktori pengguna Anda seperti yang Anda inginkan dan simpan.Saya membuat alias bash sederhana dan meletakkannya di bagian bawah file ~ / .bash_aliases saya untuk memudahkan mengedit file dnsmasq.conf. Inilah alias:
Tentu saja, Anda dapat memilih editor yang Anda sukai untuk perintah sudo kedua di alias, tapi saya menggunakan nano di sana untuk memudahkan semua orang. Simpan file, tutup dan buka kembali tab / jendela terminal perintah Anda. Itu harus memungkinkan alias tersedia untuk tab / jendela terminal yang baru dibuka.
Cukup jalankan
eddmc
dari akun pengguna Anda dan itu akan meminta kata sandi Anda untuk melakukan perintah yang ditinggikan.Perhatikan bahwa saya selalu
chattr +i
file. Ini agar Network Manager tidak akan menimpa konfigurasi Anda dengan miliknya.Pada koneksi ethernet kabel seharusnya tidak ada masalah. Saya telah menemukan sejak saya menggunakan dnsmasq untuk caching dns pada laptop dengan nirkabel yang saya harus me-restart secara manual dnsmasq.service setelah terhubung ke titik akses. Saya pikir Network Manager dapat melakukan tugas-tugas seperti memulai kembali layanan saat menghubungkan, tetapi saya belum melihatnya.
sumber
Meskipun klaim di sini dan di tempat lain sebaliknya, NetworkManager sepenuhnya mengabaikan semua dan semua file konfigurasi dmsmasq - bahkan yang ada di direktori sendiri
/etc/NetworkManager/dnsmasq-shared.d
. Buktinya ada dalam kode sumber untuk NetworkManager ... Berikut adalah komentar yang relevan:Berikut ini tautan ke kode sumber yang relevan (baris 139-144).
sumber