ติดตั้ง AdGuard Home บน VPS สร้าง DNS ป้องกันโฆษณา
AdGuard Home คือ DNS server แบบ self-hosted ที่บล็อกโฆษณา, Tracker และ Malware domain ในระดับ DNS ก่อนที่ browser หรืออุปกรณ์จะโหลดเนื้อหาเลย ไม่ต้องติดตั้ง extension ทีละเครื่อง — ตั้งค่าครั้งเดียวทั่วทั้งเครือข่ายบ้านหรือ VPN ใช้ได้ทุกอุปกรณ์ ทั้ง Android, iOS, Windows, macOS และ Linux
ต่างจาก Pi-hole ตรงที่ AdGuard Home รองรับ DNS over HTTPS (DoH) และ DNS over TLS (DoT) ในตัว — เข้ารหัส DNS query ไม่ให้ ISP หรือผู้ไม่หวังดีดักดู query ของคุณ
ความต้องการของระบบ
- VPS Ubuntu 22.04 / Debian 12 (หรือ CentOS/Rocky Linux)
- RAM อย่างน้อย 256MB (แนะนำ 512MB+)
- Port 53 (DNS), 3000 (setup), 80/443 (web dashboard) ว่างอยู่
- Domain (optional แต่แนะนำสำหรับ DoH/DoT)
ขั้นตอนที่ 1: ปิด systemd-resolved (ถ้ามี)
Ubuntu ใหม่ๆ มักใช้ systemd-resolved ฟัง port 53 อยู่ ต้องปิดก่อนติดตั้ง AdGuard Home
# ตรวจสอบว่ามีอะไรใช้ port 53
sudo ss -tulnp | grep :53
# ปิด systemd-resolved stub listener
sudo mkdir -p /etc/systemd/resolved.conf.d/
cat <<'EOF' | sudo tee /etc/systemd/resolved.conf.d/adguard.conf
[Resolve]
DNSStubListener=no
EOF
sudo systemctl restart systemd-resolved
# ตรวจสอบ port 53 ว่างแล้ว
sudo ss -tulnp | grep :53
ขั้นตอนที่ 2: ดาวน์โหลดและติดตั้ง AdGuard Home
AdGuard Home เป็น single binary — ดาวน์โหลดและรันได้เลย ไม่ต้องติดตั้ง dependency
# ดาวน์โหลด AdGuard Home เวอร์ชันล่าสุดด้วย install script
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
# หรือดาวน์โหลด binary ด้วยตนเอง (สำหรับ production)
AGH_VERSION=$(curl -s https://api.github.com/repos/AdguardTeam/AdGuardHome/releases/latest \
| grep tag_name | cut -d '"' -f4)
wget -qO /tmp/AdGuardHome.tar.gz \
"https://github.com/AdguardTeam/AdGuardHome/releases/download/${AGH_VERSION}/AdGuardHome_linux_amd64.tar.gz"
tar -xzf /tmp/AdGuardHome.tar.gz -C /tmp/
sudo mv /tmp/AdGuardHome/AdGuardHome /usr/local/bin/
sudo chmod +x /usr/local/bin/AdGuardHome
ขั้นตอนที่ 3: ติดตั้งเป็น systemd service
# สร้าง config directory
sudo mkdir -p /etc/adguardhome /var/lib/adguardhome
# ถ้าใช้ install script — ติดตั้ง service อัตโนมัติแล้ว
# ถ้าดาวน์โหลด binary เอง ให้สร้าง systemd unit
cat <<'EOF' | sudo tee /etc/systemd/system/adguardhome.service
[Unit]
Description=AdGuard Home: Network-level blocker
After=network.target
[Service]
ExecStart=/usr/local/bin/AdGuardHome -c /etc/adguardhome/AdGuardHome.yaml -w /var/lib/adguardhome
Restart=always
RestartSec=5s
User=root
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now adguardhome
sudo systemctl status adguardhome
ขั้นตอนที่ 4: ตั้งค่าครั้งแรกผ่าน Web UI
หลังรัน service เปิด browser ไปที่ http://YOUR_VPS_IP:3000 เพื่อทำ initial setup wizard
- เลือก interface ที่จะ listen (แนะนำ
All interfacesสำหรับ VPS) - ตั้ง Admin Web Interface port (แนะนำ 3000 หรือ 80)
- ตั้ง DNS Server port:
53 - สร้าง username และ password สำหรับ dashboard
- กด "Next" และ "Apply" เพื่อเสร็จสิ้น setup
ขั้นตอนที่ 5: เพิ่ม Blocklists
ใน Dashboard ไปที่ Filters → DNS blocklists → Add blocklist เพิ่ม list ยอดนิยม:
| Blocklist | URL | Domain ที่บล็อก |
|---|---|---|
| AdGuard DNS filter | https://adguardteam.github.io/HostlistsRegistry/assets/filter_1.txt | ~50,000 |
| AdAway Default | https://adaway.org/hosts.txt | ~15,000 |
| Steven Black Hosts | https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts | ~100,000 |
| MalwareDomainList | https://www.malwaredomainlist.com/hostslist/hosts.txt | ~1,500 |
# ตรวจสอบจำนวน rule ที่โหลดแล้วผ่าน API
curl -s http://localhost:3000/control/filtering/status | python3 -m json.tool
# ดู statistics การ block
curl -s http://localhost:3000/control/stats | python3 -m json.tool | grep -E "blocked|total"
ขั้นตอนที่ 6: เปิดใช้ DNS over HTTPS และ DNS over TLS
AdGuard Home รองรับ DoH และ DoT ในตัว ต้องมี SSL certificate ก่อน (ใช้ Let's Encrypt) และ domain ชี้มาที่ VPS
# ตั้งค่าผ่าน Web UI: Settings → Encryption settings
# ใส่ข้อมูลดังนี้:
# Server name: dns.example.com
# HTTPS port: 443
# DNS-over-TLS port: 853
# Certificate: /etc/letsencrypt/live/dns.example.com/fullchain.pem
# Private key: /etc/letsencrypt/live/dns.example.com/privkey.pem
# ทดสอบ DoH
curl -sH 'accept: application/dns-json' \
'https://dns.example.com/dns-query?name=google.com&type=A' | python3 -m json.tool
# ทดสอบ DoT ด้วย kdig (apt install knot-dnsutils)
kdig -d @dns.example.com +tls-ca +tls-host=dns.example.com google.com
ขั้นตอนที่ 7: ตั้งค่า Upstream DNS
ไปที่ Settings → DNS settings → Upstream DNS servers เลือก upstream ที่เชื่อถือได้:
# Upstream DNS ที่แนะนำ (ใส่ใน Web UI)
# Cloudflare (เร็ว, privacy-focused)
https://1.1.1.1/dns-query
https://1.0.0.1/dns-query
# Quad9 (บล็อก Malware ระดับ upstream)
https://9.9.9.9/dns-query
# Google
https://8.8.8.8/dns-query
# ตัวอย่าง config ส่วน upstream ใน AdGuardHome.yaml
upstream_dns:
- https://1.1.1.1/dns-query
- https://1.0.0.1/dns-query
- https://9.9.9.9/dns-query
upstream_mode: parallel
ขั้นตอนที่ 8: ตั้งค่า Client ให้ใช้ AdGuard Home
หลังติดตั้งเสร็จ ตั้งค่า DNS ของอุปกรณ์หรือ router ให้ชี้มาที่ VPS IP:
- Router (แนะนำ): ตั้ง DNS ใน router settings เป็น IP ของ VPS — ทุกอุปกรณ์ในบ้านได้ประโยชน์ทันที
- Linux: แก้
/etc/resolv.confหรือตั้งใน NetworkManager / systemd-resolved - Android (Private DNS): Settings → Network → Private DNS → ใส่
dns.example.com - iOS (DoH): ดาวน์โหลด profile จาก
https://dns.example.com/apple-configuration-profile - Windows 11: Settings → Network → DNS server → ใส่ IP VPS + เลือก HTTPS
ตรวจสอบว่า AdGuard Home ทำงานถูกต้อง
# ตรวจสอบ service status
sudo systemctl status adguardhome
# ตรวจสอบ port ที่ listen
sudo ss -tulnp | grep -E ':53|:3000|:443|:853'
# ทดสอบ DNS query ผ่าน AdGuard Home
dig @127.0.0.1 google.com
dig @127.0.0.1 doubleclick.net # ควรได้ 0.0.0.0 หรือ NXDOMAIN
# ตรวจสอบ blocking statistics
curl -s http://localhost:3000/control/stats | python3 -m json.tool
# ดู query log แบบ real-time
sudo journalctl -u adguardhome -f
doubleclick.net หรือ ads.google.com — ถ้า AdGuard Home ทำงานถูกต้อง จะได้ 0.0.0.0 หรือ NXDOMAIN กลับมา แทนที่จะเป็น IP จริงของ ad serverแก้ปัญหาที่พบบ่อย
Error: "bind: address already in use" บน port 53
port 53 ถูก systemd-resolved หรือ dnsmasq ใช้งานอยู่ ต้องหยุด service เหล่านั้นก่อนรัน AdGuard Home
# หาว่าอะไรใช้ port 53
sudo ss -tulnp | grep :53
sudo lsof -i :53
# ปิด systemd-resolved stub
echo -e "[Resolve]\nDNSStubListener=no" | sudo tee /etc/systemd/resolved.conf.d/stub.conf
sudo systemctl restart systemd-resolved
# ถ้าใช้ dnsmasq
sudo systemctl stop dnsmasq
sudo systemctl disable dnsmasq
Error: DNS ไม่ resolve — "dial tcp: no such host"
AdGuard Home ไม่สามารถเชื่อมต่อ upstream DNS ได้ ตรวจสอบ firewall และ upstream settings
# ทดสอบ upstream โดยตรงจาก VPS
dig @1.1.1.1 google.com
curl -s "https://1.1.1.1/dns-query?name=google.com&type=A"
# ตรวจสอบ firewall outbound
sudo iptables -L OUTPUT -n --line-numbers | grep -E "53|443"
# ลองเปลี่ยน upstream เป็น plain IP ก่อน (troubleshoot)
# ใน Web UI → Settings → DNS → ใช้ 8.8.8.8 แทน DoH URL
Error: Dashboard เข้าไม่ได้ — "Connection refused"
service ไม่ได้รัน หรือ port ถูก firewall block ตรวจสอบ status และเปิด port ที่จำเป็น
# ตรวจสอบ service
sudo systemctl status adguardhome
sudo journalctl -u adguardhome --no-pager -n 50
# เปิด port ผ่าน UFW
sudo ufw allow 3000/tcp comment 'AdGuard Home setup'
sudo ufw allow 53/tcp comment 'DNS'
sudo ufw allow 53/udp comment 'DNS'
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
sudo ufw allow 853/tcp comment 'DoT'
บาง website โหลดช้ากว่าปกติหลังเปลี่ยน DNS
อาจเกิดจาก upstream DNS latency สูง หรือ cache ยังไม่ warm เพิ่ม upstream หลายตัวและเปิด parallel queries
# เปรียบเทียบ latency ของ upstream ต่างๆ
for ns in 1.1.1.1 8.8.8.8 9.9.9.9; do
echo -n "$ns: "
dig @$ns google.com | grep "Query time"
done
# ใน Web UI เปิด: Settings → DNS → Load Balancing: Parallel
# เพิ่ม cache size: Settings → DNS → Cache size: 4000000
AdGuard Home บล็อก website ที่ต้องการใช้
เพิ่ม domain ใน whitelist ผ่าน Custom filtering rules เพื่อยกเว้นจากทุก blocklist
# ผ่าน Web UI → Filters → Custom filtering rules → เพิ่ม:
@@||example.com^ # ยกเว้น example.com
@@||subdomain.example.com^ # ยกเว้นเฉพาะ subdomain
# ตรวจสอบว่า domain ถูก block จาก list ไหน
# ใน Web UI → Query Log → กด domain ที่ถูก block → ดู "Matched filter"
คำถามที่พบบ่อย
AdGuard Home กับ Pi-hole ต่างกันอย่างไร?
ทั้งคู่บล็อกโฆษณาผ่าน DNS แต่ AdGuard Home รองรับ DNS over HTTPS (DoH) และ DNS over TLS (DoT) ในตัวโดยไม่ต้องพึ่ง addon เพิ่มเติม AdGuard Home ยังรองรับ DNSCrypt และ DNS over QUIC ซึ่ง Pi-hole ยังไม่รองรับ Pi-hole เหมาะสำหรับ Raspberry Pi ในบ้าน ส่วน AdGuard Home เหมาะกว่าถ้าต้องการ privacy DNS บน VPS ที่เปิดให้ client เข้าถึงจาก internet
ใช้ AdGuard Home บน VPS สาธารณะแล้วปลอดภัยไหม?
ปลอดภัยถ้าจำกัด access ด้วย ACL — ถ้าตั้งให้ทุกคน query ได้โดยไม่จำกัด VPS อาจถูกใช้เป็น DNS amplification attack ได้ ควรกำหนด Allowed clients ใน Web UI เฉพาะ IP ที่เชื่อถือ หรือใช้ DoH/DoT ที่ต้อง authenticate เท่านั้น สำหรับ open DNS ควรเปิดใช้ Rate limiting ด้วย
AdGuard Home ใช้ RAM และ CPU เท่าไหร่?
ขณะ idle ใช้ RAM ประมาณ 30–80MB และ CPU ต่ำมาก (< 1%) ขณะโหลด blocklist ขนาดใหญ่อาจใช้ RAM ถึง 200MB ชั่วคราว สำหรับ VPS ขนาด 512MB RAM เพียงพอสำหรับ client ในบ้านหรือทีมขนาดเล็ก ไม่เกิน 100 เครื่อง รองรับ query ได้หลาย thousand QPS ต่อวินาที