AdGuard Home DNS Server บล็อกโฆษณาบน VPS

ติดตั้ง AdGuard Home บน VPS สร้าง DNS ป้องกันโฆษณา

อัปเดต 20 สิงหาคม 2026 · DNS · Privacy · Network

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 ของคุณ

ความต้องการของระบบ

Note: ถ้า VPS ใช้ systemd-resolved บน port 53 อยู่แล้ว ต้องปิดก่อน AdGuard Home จึงจะ bind port 53 ได้

ขั้นตอนที่ 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

  1. เลือก interface ที่จะ listen (แนะนำ All interfaces สำหรับ VPS)
  2. ตั้ง Admin Web Interface port (แนะนำ 3000 หรือ 80)
  3. ตั้ง DNS Server port: 53
  4. สร้าง username และ password สำหรับ dashboard
  5. กด "Next" และ "Apply" เพื่อเสร็จสิ้น setup
Security Tip: หลัง setup เสร็จให้ปิด port 3000 ใน firewall ถ้าใช้ port 80 แทน หรือใช้ Nginx reverse proxy + SSL certificate สำหรับ dashboard

ขั้นตอนที่ 5: เพิ่ม Blocklists

ใน Dashboard ไปที่ Filters → DNS blocklists → Add blocklist เพิ่ม list ยอดนิยม:

BlocklistURLDomain ที่บล็อก
AdGuard DNS filterhttps://adguardteam.github.io/HostlistsRegistry/assets/filter_1.txt~50,000
AdAway Defaulthttps://adaway.org/hosts.txt~15,000
Steven Black Hostshttps://raw.githubusercontent.com/StevenBlack/hosts/master/hosts~100,000
MalwareDomainListhttps://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
Tip: เปิดใช้ Parallel requests เพื่อ query upstream หลายตัวพร้อมกันและใช้ผลที่เร็วที่สุด — ช่วยลด latency DNS โดยเฉพาะ upstream ที่อยู่ไกล

ขั้นตอนที่ 8: ตั้งค่า Client ให้ใช้ AdGuard Home

หลังติดตั้งเสร็จ ตั้งค่า DNS ของอุปกรณ์หรือ router ให้ชี้มาที่ VPS IP:


ตรวจสอบว่า 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
Tip: ทดสอบ block โดย query 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 ต่อวินาที