DNSDIST 2025-06-22
Berikut adalah Panduan Final Konfigurasi dnsdist yang lengkap, benar, dan mudah dipraktikkan, dirancang khusus agar pemula pun bisa berhasil menjalankannya. Panduan ini mengacu pada topologi Anda dan menggunakan best practice dnsdist yang solid.
✅ Panduan Final Konfigurasi dnsdist: Routing DNS Berdasarkan IP Klien
🎯 Tujuan:
-
DNS 1 (172.16.200.34) menjalankan
dnsdistuntuk menerima semua permintaan DNS dari klien. -
Permintaan DNS diteruskan ke resolver yang berbeda berdasarkan IP sumber klien:
-
Klien
192.168.1.100→ ke DNS 2 (172.16.200.2) (Bind9 + RPZ, filtering). -
Klien
192.168.1.101→ ke DNS 3 (172.16.200.18) (PowerDNS Recursor). -
Klien lain → default ke DNS 3.
-
🧩 1. Persyaratan Awal
-
Sistem Operasi: Ubuntu Server 24.04
-
Server
dnsdist: IP 172.16.200.34 -
Upstream:
-
DNS 2 (Bind9 + RPZ): 172.16.200.2
-
DNS 3 (PowerDNS Recursor): 172.16.200.18
-
🧱 2. Instalasi dnsdist
sudo apt update
sudo apt install dnsdist
⚙️ 3. Konfigurasi dnsdist
📝 Edit file konfigurasi utama:
sudo nano /etc/dnsdist/dnsdist.conf
💡 Hapus isi default dan ganti dengan konfigurasi ini:
-- ========================================
-- KONFIGURASI DASAR
-- ========================================
-- Dengarkan permintaan DNS pada port 53
addLocal("172.16.200.34:53")
addLocal("[::]:53") -- Untuk dukungan IPv6 (opsional)
-- Batasi siapa yang boleh query (ganti sesuai subnet Anda)
setACL({"192.168.1.0/24", "127.0.0.1"})
-- ========================================
-- DEFINISI SERVER UPSTREAM
-- ========================================
-- Tambahkan DNS 2 (Bind9 + RPZ)
newServer({
address="172.16.200.2:53",
name="DNS2_Filtering",
useClientSubnet=true,
pool="filtering_pool"
})
-- Tambahkan DNS 3 (PowerDNS Recursor)
newServer({
address="172.16.200.18:53",
name="DNS3_Normal",
useClientSubnet=true,
pool="normal_pool"
})
-- Kebijakan load balancing di masing-masing pool
setPoolPolicy("filtering_pool", firstAvailable)
setPoolPolicy("normal_pool", firstAvailable)
-- ========================================
-- ATURAN ROUTING BERDASARKAN IP KLIEN
-- ========================================
-- Klien 192.168.1.100 → DNS2
addRule(NetmaskGroupRule({"192.168.1.100/32"}), PoolAction("filtering_pool"))
-- Klien 192.168.1.101 → DNS3
addRule(NetmaskGroupRule({"192.168.1.101/32"}), PoolAction("normal_pool"))
-- Semua klien lainnya → default ke DNS3
addRule(AllRule(), PoolAction("normal_pool"))
-- ========================================
-- LOG & DEBUG
-- ========================================
setLogLevel(Info)
setLogSyslog(true)
-- ========================================
-- AKSES KONSOL DAN WEB INTERFACE
-- ========================================
-- Socket lokal untuk dnsdist CLI
setConsoleSocket("/var/run/dnsdist.sock")
setConsoleACL("127.0.0.1/32")
-- Web dashboard dnsdist (opsional)
webserver("0.0.0.0:8083")
setKey("GantiDenganKunciRahasiaYangKuat123!")
📂 4. (Opsional) Kelola IP Klien di File Terpisah
Agar rapi dan scalable:
Buat file aturan IP eksternal:
sudo nano /etc/dnsdist/client-rules.lua
Isi dengan:
-- IP yang diarahkan ke DNS2 (filtering)
local filtering_clients = {
"192.168.1.100/32",
-- Tambah IP lain di sini
}
for _, ip in ipairs(filtering_clients) do
addRule(NetmaskGroupRule({ip}), PoolAction("filtering_pool"))
end
-- IP yang diarahkan ke DNS3 (normal)
local normal_clients = {
"192.168.1.101/32",
-- Tambah IP lain di sini
}
for _, ip in ipairs(normal_clients) do
addRule(NetmaskGroupRule({ip}), PoolAction("normal_pool"))
end
Lalu di dnsdist.conf, tambahkan ini di akhir:
include("/etc/dnsdist/client-rules.lua")
🔐 5. Konfigurasi Firewall (UFW)
Di server dnsdist:
sudo ufw allow from 192.168.1.0/24 to any port 53 proto udp
sudo ufw allow out to 172.16.200.2 port 53 proto udp
sudo ufw allow out to 172.16.200.18 port 53 proto udp
sudo ufw allow 8083/tcp
sudo ufw enable
✅ 6. Verifikasi & Tes
🔎 Cek konfigurasi:
sudo dnsdist --check-config
🔁 Restart layanan:
sudo systemctl restart dnsdist
sudo systemctl status dnsdist
🔍 Tes dari klien:
Klien 192.168.1.100:
dig @172.16.200.34 example.com
Harus diforward ke DNS 2.
Klien 192.168.1.101:
dig @172.16.200.34 example.com
Harus diforward ke DNS 3.
Klien lainnya:
dig @172.16.200.34 example.com
Juga diforward ke DNS 3 (fallback).
📊 7. Monitoring Real-Time
Masuk ke konsol dnsdist:
sudo dnsdist -c
Cek status:
showServers()
showRules()
showPools()
Keluar dari konsol:
quit()
🌐 8. Akses Web Console (Opsional)
Akses via browser:
http://172.16.200.34:8083/
Masukkan key sesuai yang diatur di setKey().
🎯 Catatan Tambahan
-
DNS2 & DNS3 harus menerima query dari IP
172.16.200.34. -
Jika perlu, tambahkan firewall rule di DNS2/DNS3:
sudo ufw allow from 172.16.200.34 to any port 53 proto udp
-
Jangan lupa backup konfigurasi sebelum mengubah.
🏁 Kesimpulan
Dengan panduan ini:
✅ Pemula bisa langsung praktik
✅ Sistem robust dan scalable
✅ Routing DNS berdasarkan IP klien berhasil diterapkan
✅ Siap digunakan di lingkungan ISP, hotel, sekolah, dan jaringan komunitas
Jika Anda butuh versi otomatisasi (bash installer) atau integrasi ke sistem monitoring seperti Prometheus, saya siap bantu lanjutkan.
Comments
Post a Comment