Dijamin Paham! Inilah Cara Build Public DNS Server Di VPS Menggunakan AdGuard Home + Docker
👋🏻Welcome!

Halo visitians, gimana kabarnya ? Semoga sehat selalu ya. Kali ini saya ingin share cara bangun DNS Server sendiri dengan AdGuardHome menggunakan Docker. Pertama-tama izinkan saya menjelaskan apa itu AdGuardHome. AdGuard Home adalah perangkat lunak (software) open-source yang berfungsi sebagai server DNS lokal (self-hosted) dengan kemampuan untuk melakukan pemfilteran lalu lintas DNS secara real-time. Secara teknis, AdGuard Home bekerja dengan cara menerima permintaan DNS dari perangkat dalam suatu jaringan, kemudian:
- Menganalisis permintaan tersebut berdasarkan daftar filter (blocklist/allowlist)
- Memblokir domain yang teridentifikasi sebagai iklan, pelacak (tracker) atau mengandung malware berbahaya
- Meneruskan permintaan yang aman ke server DNS upstream (seperti Cloudflare atau Google DNS)
- Mengembalikan hasil resolusi ke perangkat pengguna
Instalasi AdGuard Home di VPS
Persyaratan:
- Kamu harus punya VPS dengan spec berikut (bisa beli di Vultr, BiznetGio, Herza dll)
- CPU : 1 core
- RAM : 1GB
- OS : Debian/Ubuntu
- Port : 80, 443, 53, 784, 853 dan 3000 (tcp dan udp)
- Domain (opsional jika ingin gunakan DoH/DoT)
Persiapan
1 | sudo apt update && apt upgrade -y |
Cek
1 | docker --version |
⚠️ Matikan DNS Default (Penting!)
Untuk hindari conflict port 53, matikan DNS Default. Cek apakah digunakan:
1 | sudo apt install lsof |
Jika benar digunakan silakan stop
1 | sudo systemctl stop systemd-resolved |
Edit nameserver ke 1.1.1.1
1 | nano /etc/resolv.conf |
1 | nameserver 1.1.1.1 |
Setup directory project
1 | sudo mkdir -p /opt/adguardhome |
Isi dengan :
1 | version: '3.8' |
Start pull docker image
1 | docker-compose up -d |
Cek:
1 | docker ps |
Open link:
http://IP-VPS:3000 kemudian atur interface, username dan password.
Note: Jangan lupa pastikan port 3000 tidak konflik ya, misal ada Grafana dll.
Filtering
Untuk filtering iklan, tracker dan malware. Saya sudah siapkan blacklist berikut untuk dipakai 😄:
1 | filters: |
Untuk langsung setting ke adguardhome, silakan edit config adguardhome di /opt/adguardhome/conf/AdGuardHome.yaml.
Ganti bagian filters di AdGuardHome.yaml dengan filters diatas.
Restart adguardhome supaya ter-apply.
1 | sudo docker restart adguardhome |
Konfigurasi Upstream DNS & DNSSEC
Konfigurasi ini bertujuan agar menstabilkan request dan mengenskripsi traffic DNS.
Upstream DNS
Silakan copy Upstream DNS berikut:
1 | https://dns.cloudflare.com/dns-query |
Buka Setting > DNS Settings > Upstream DNS (pastekan dikolom Upstream DNS) kemudian Apply.
DNSSEC
Masih di DNS Settings scroll kebawah dibagian DNS server configuration centang Enable DNSSEC kemudian Save.
Setup HTTPS, DNS-over-HTTPS & DNS-over-TLS
Selanjutnya kita akan lanjut untuk setup HTTPS, DoH dan DoT. Bertujuan untuk membuat DNS server kita bisa diakses secara aman, terenkripsi, dan dari jaringan mana pun tanpa batasan 😄
Pointing domain ke VPS
Agar DNS Server kamu bisa resolve dan terbaca oleh certbot silakan pointing terlebih dahulu domain kamu ke IP VPS.A record → dns.domainkamu.com → IP_VPS
Generate SSL Let’s Encrypt via Certbot
Install certbot terlebih dahulu:
1 | sudo apt update |
Karena adguardhome running di port 80, kita harus stop terlebih dahulu agar certbot dapat verifikasi dan generate SSL.
1 | sudo docker stop adguardhome |
Lanjut generate SSL:
1 | sudo certbot certonly --standalone -d dns.domainkamu.com |
kemudian isi email dan Agree Terms Yes (Y) / No (N). Kemudian hasil cert akan tersimpan seperti berikut:
1 | Certificate is saved at: /etc/letsencrypt/live/dns.znandev.net/fullchain.pem |
Untuk menghindari error reading cert file: open /etc/letsencrypt/live/dns.znandev.net/fullchain.pem: no such file or directory kita harus edit docker-compose.yml dahulu karena AdGuard Home tidak memiliki akses langsung ke /etc/letsencrypt dihost:
Masuk kembali ke directory dihost:
1 | cd /opt/adguardhome/ |
Ubah bagian volumes:
1 | volumes: |
Restart container:
1 | sudo docker-compose down |
Install SSL ke AdGuard Home
Buka Settings > DNS Settings.
Centang Enable encryption (HTTPS, DNS-over-HTTPS and DNS-over-TLS) kemudian isi:
- Server Name:
dns.domainkamu.com - HTTPS port:
443 - DNS-over-TLS port:
853 - DNS-over-QUIC port:
784 - Lokasi/path untuk cert nya:
/etc/letsencrypt/live/dns.domainkamu.com/fullchain.pem/etc/letsencrypt/live/dns.domainkamu.com/privkey.pem
Kemudian Save configuration dan notified Encryption configuration saved yaa.
Donee! Sekarang DNS Server kamu sudah terenkripsi sempurna.
Ada yang mau ditanyain? Komen aja dibawah ya.
Terimakasih sudah mampir 🙏😊.


