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 dnsdist untuk 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

Popular posts from this blog

Cara Menyembunyikan Router MikroTik Rumahan dari ISP Broadband

billing bawal

Strategi Indonesia 2045–2120: Model Pembangunan Lima Fase Berkeadilan dan Berbasis Bukti