DNSDIST (default filer)
Berikut ini adalah Panduan Final dnsdist langkah demi langkah, lengkap, akurat, dan siap dipraktikkan oleh pemula. Panduan ini disusun berdasarkan keinginan Anda, yaitu:
🔁 Semua klien secara default diarahkan ke DNS 2 (Bind9 + RPZ)
✅ Hanya IP tertentu (misal192.168.15.150dan192.168.88.8) yang dibebaskan dari filtering, dan diarahkan ke DNS 3 (PowerDNS Recursor)
🌐 Topologi DNS Anda
| Peran | IP | Keterangan |
|---|---|---|
| dnsdist | 172.16.200.34 |
Dispatcher DNS (DNS 1) |
| DNS 2 | 172.16.200.2 |
Bind9 + RPZ (Filter) |
| DNS 3 | 172.16.200.18 |
PowerDNS Recursor (Netral) |
✅ LANGKAH 1 — Instalasi dnsdist di Ubuntu 24.04
sudo apt update
sudo apt install dnsdist
✅ LANGKAH 2 — Siapkan File Konfigurasi Utama
Backup file lama:
sudo cp /etc/dnsdist/dnsdist.conf /etc/dnsdist/dnsdist.conf.bak
Edit file konfigurasi:
sudo nano /etc/dnsdist/dnsdist.conf
Lalu isi seperti ini:
-- ========================
-- Konfigurasi Dasar dnsdist
-- ========================
addLocal("172.16.200.34:53") -- Dengarkan permintaan DNS
addLocal("[::]:53") -- IPv6 opsional
setACL({"192.168.0.0/16", "127.0.0.1"}) -- Sesuaikan subnet klien
-- ========================
-- Server Upstream (Resolver)
-- ========================
-- DNS 2 = Filtering (Bind9 + RPZ)
newServer({
address = "172.16.200.2:53",
name = "DNS2_Filter",
useClientSubnet = true,
pool = "filtering_pool"
})
-- DNS 3 = Netral (PowerDNS Recursor)
newServer({
address = "172.16.200.18:53",
name = "DNS3_Normal",
useClientSubnet = true,
pool = "normal_pool"
})
setPoolPolicy("filtering_pool", firstAvailable)
setPoolPolicy("normal_pool", firstAvailable)
-- ========================
-- Include daftar IP dibebaskan dari filter
-- ========================
include("/etc/dnsdist/nonfilter-clients.lua")
-- ========================
-- Default Rule: Semua ke Filtering (DNS 2)
-- ========================
addRule(AllRule(), PoolAction("filtering_pool"))
-- ========================
-- Logging & Monitoring (Opsional)
-- ========================
setLogLevel(Info)
setLogSyslog(true)
setConsoleSocket("/var/run/dnsdist.sock")
setConsoleACL("127.0.0.1/32")
webserver("0.0.0.0:8083")
setKey("KunciRahasiaGantiSaya123!@#")
✅ LANGKAH 3 — Buat File IP Bebas Filter
Buat file:
sudo nano /etc/dnsdist/nonfilter-clients.lua
Isi file dengan IP-IP yang dibebaskan dari filtering:
-- IP-IP klien yang diarahkan ke DNS3 (tidak difilter)
local free_clients = {
"192.168.15.150/32",
"192.168.88.8/32"
}
for _, ip in ipairs(free_clients) do
addRule(NetmaskGroupRule({ip}), PoolAction("normal_pool"))
end
✅ LANGKAH 4 — Validasi Konfigurasi
Sebelum dijalankan, pastikan konfigurasi benar secara sintaks:
sudo dnsdist --check-config
✅ Jika muncul
Configuration check passed, lanjutkan.
✅ LANGKAH 5 — Aktifkan dan Jalankan dnsdist
sudo systemctl restart dnsdist
sudo systemctl status dnsdist
✅ LANGKAH 6 — Konfigurasi Firewall
Di DNS 1 (dnsdist):
sudo ufw allow 53/udp
sudo ufw allow 53/tcp
sudo ufw allow 8083/tcp
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 enable
Di DNS 2 dan DNS 3:
sudo ufw allow from 172.16.200.34 to any port 53 proto udp
✅ LANGKAH 7 — Uji Coba
🔹 Dari IP 192.168.15.150 atau 192.168.88.8:
dig @172.16.200.34 example.com
Harus diteruskan ke DNS 3 (netral)
🔹 Dari IP lain (misal 192.168.1.100):
dig @172.16.200.34 example.com
Harus diteruskan ke DNS 2 (filtered)
🔍 Monitoring (opsional):
sudo dnsdist -c
Dalam CLI, jalankan:
showRules()
showServers()
showPools()
🧠 Catatan Tambahan
| Hal | Saran |
|---|---|
| Menambah IP netral | Cukup edit file /etc/dnsdist/nonfilter-clients.lua lalu restart |
| File IP terlalu banyak | Bisa pisah jadi banyak file dan include() beberapa kali |
| Akses web dashboard | http://172.16.200.34:8083/ |
| Ubah ACL | Gunakan setACL() untuk batasi siapa yang bisa query ke dnsdist |
🏁 Kesimpulan
Dengan panduan ini:
-
Semua klien otomatis lewat DNS filtering
-
IP khusus dibebaskan dari filter
-
Pemisahan aturan mudah diatur dan scalable
-
Aman, efisien, dan siap produksi
Jika Anda ingin versi installer otomatis (bash script) atau integrasi ke database (misal untuk ISP), saya siap bantu lanjutkan.
Comments
Post a Comment