dnsmasq tidak bisa mengikat port 53: temukan soket yang memegangnya
Kegagalan bind pada port 53 adalah soal kepemilikan soket. Baca pendengar, periksa cakupan wildcard, lalu putuskan daemon mana yang menjawab klien VPN.
dnsmasq berhenti dengan kesalahan alamat sudah digunakan, dan log menyebut port alih-alih pelakunya. Pada mesin yang juga menjalankan VPN, reaksi pertama adalah menyalahkan rute yang didorong, tetapi kegagalan bind terjadi sebelum klien mana pun mengirim kueri. Sesuatu sudah memegang soket, dan tugasnya adalah mengidentifikasinya. Perubahan rute tidak dapat membebaskan port.
Lima langkah, dalam urutan ini: reproduksi kesalahan, daftar pendengar, pahami wildcard, tugaskan pekerjaan, lalu verifikasi.
Langkah 1: reproduksi dan baca kesalahannya
Jalankan dnsmasq di latar depan dengan konfigurasi yang sama dengan yang dipakai layanan, agar kesalahan muncul di terminal Anda alih-alih di log yang harus Anda tebak. Perhatikan keluarga alamat dan alamat lokal dalam pesan. Bind ke alamat tertentu dan bind ke wildcard adalah kegagalan berbeda dengan pemilik berbeda.
Simpan teks persisnya. Alamat sedang digunakan, kegagalan izin, dan antarmuka yang hilang semuanya datang sebagai kegagalan mulai, dan semuanya menunjuk ke tiga perbaikan berbeda.
Langkah 2: daftar pemiliknya
Daftar soketnya lebih dulu. Filter pada port sumber 53 menampilkan kedua transport dan proses pemiliknya bila Anda punya hak untuk melihatnya:
ss -lntup 'sport = :53'Baca keluarannya per kolom: transport, alamat lokal, port, proses. Pendengar TCP dan pendengar UDP adalah soket terpisah, jadi menghentikan yang satu tidak membebaskan yang lain. Alamat wildcard mencakup setiap antarmuka, yang berarti alamat VPN sudah terpakai meskipun tidak ada baris yang menyebutnya. Dan nama proses memberi tahu Anda apakah ini resolver yang dikelola distribusi, kontainer, atau sesuatu yang ditinggalkan eksperimen sebelumnya.
Langkah 3: jebakan wildcard
Opsi bind-interfaces mengubah apakah dnsmasq mengikat soket wildcard atau satu soket per antarmuka yang dikonfigurasi, seperti yang dijelaskan referensi dnsmasq. Tanpanya, dnsmasq dapat mengikat wildcard dan menyaring permintaan per antarmuka, yang langsung gagal ketika daemon lain memegang wildcard. Linux menambahkan bind-dynamic, yang menangani antarmuka yang dibuat setelah mulai, kekhawatiran nyata ketika antarmuka VPN hanya muncul saat tersambung.
Itulah sebabnya dua daemon yang keduanya tampak dikonfigurasi untuk antarmuka berbeda tetap bertabrakan. Konfliknya ada di soket, bukan di niat. Pilih mode bind dengan sengaja dan baca perilaku terdokumentasi untuk versi Anda sebelum mengubahnya.
Langkah 4: tugaskan pekerjaan
Putuskan daemon mana yang menjawab klien VPN dan mana yang menjawab host. Satu resolver yang mendengarkan di alamat terowongan dan meneruskan ke hulu adalah pengaturan yang umum; dua resolver yang masing-masing menganggap memiliki port 53 sama sekali bukan pengaturan.
Lalu nyatakan keputusan itu dalam konfigurasi tiap layanan: alamat dengar, filter antarmuka, dan penerusan. Ubahlah melalui pemilik layanan, entah unit distribusi, pengelola jaringan, atau runtime kontainer, agar perubahan bertahan setelah mulai ulang.
Langkah 5: verifikasi soket, lalu jalurnya
Setelah mulai ulang, pastikan soket yang dimaksud ada sebelum menguji klien. Daemon yang tidak pernah mengikat tidak dapat diselamatkan oleh rute, dan kegagalan klien terhadap soket yang terikat dengan benar adalah masalah lain dengan perbaikan lain. Lalu periksa keterjangkauan dari klien di terowongan. Baru setelah itu bertanya apakah nama yang diperlukan teresolusi.
Tiga hasil terpisah yang harus dibedakan: soketnya ada, klien menjangkaunya, jawabannya benar.
Yang tidak boleh dilakukan
Jangan hentikan resolver yang tidak dikenal untuk membebaskan port tanpa tahu apa yang bergantung padanya, karena pencarian host itu sendiri biasanya bergantung. Jangan menyalin resep lama yang memindahkan daemon kedua ke alamat dengar publik, karena itu sebagai efek samping menentukan siapa yang boleh bertanya kepada Anda. Dan jangan menambahkan penerusan ketika kegagalannya lokal.
Jika mesin dikelola, catat keputusan kepemilikan di tempat yang akan ditemukan administrator berikutnya. Konflik port kembali setiap kali image dibangun ulang.