DNS-over-HTTPS cho AdGuard qua Cloudflare Tunnel
Tóm tắt
Ghi chú thao tác trực tiếp: expose AdGuard Home (chạy trên Pi, chỉ bind LAN 10.0.0.22:53) ra ngoài Internet dưới dạng DNS-over-HTTPS (DoH), tận dụng tunnel Cloudflare đã có sẵn (homelab-ssh) thay vì phụ thuộc IP WAN động của nhà. Mục tiêu: điện thoại/laptop vẫn được lọc quảng cáo bởi AdGuard ngay cả khi ra khỏi mạng nhà.
Điểm chính
- AdGuard Home có sẵn server DoH tại route
/dns-query(cấu hình tronghttp.dohcủaAdGuardHome.yaml), nhưng mặc địnhinsecure_enabled: false— chỉ phục vụ DoH khi TLS được bật trực tiếp trên AdGuard. - Vì Cloudflare Tunnel đã lo phần TLS ở biên (edge), không cần AdGuard tự quản lý chứng chỉ — chỉ cần bật
insecure_enabled: trueđể AdGuard chấp nhận DoH qua cổng HTTP nội bộ (0.0.0.0:3000, cổng dùng chung với giao diện quản trị). - Thêm 1 ingress rule vào tunnel
homelab-sshđã có (cùng tunnel với SSH, không cần tạo tunnel mới): hostnamedns.nguyenbinhson.com, giới hạn bằngpath: ^/dns-query.*để chỉ lộ đúng endpoint DoH — không lộ giao diện quản trị AdGuard (vốn cũng chạy trên cổng 3000) ra Internet. - Route DNS:
cloudflared tunnel route dns homelab-ssh dns.nguyenbinhson.com. - Đã test bằng
curl --doh-url https://dns.nguyenbinhson.com/dns-query: phân giảiexample.comthành công (HTTP 200), còndoubleclick.net(domain quảng cáo) bị chặn hẳn (kết nối thất bại) — xác nhận traffic đi đúng qua AdGuard, không fallback DNS hệ thống. - Đánh đổi bảo mật đã chấp nhận: endpoint DoH này không thể gắn Cloudflare Access (email OTP) vì cấu hình DNS-over-HTTPS ở tầng hệ điều hành (iOS/macOS/Android) không hỗ trợ luồng xác thực trình duyệt. Domain coi như public nhưng khó đoán — ai biết đúng URL vẫn dùng được resolver, rủi ro chấp nhận được (tốn tài nguyên, không lộ dữ liệu mạng nhà).
- Áp dụng thật lên máy (2026-07-24): thử cài Configuration Profile (
com.apple.dnsSettings.managed) trên macOS trước — thất bại, báo lỗi “VPN Service payload could not be installed” (giới hạn đã biết của macOS với profile DNS cài thủ công, không qua MDM). Chuyển sang giải pháp thay thế: càidnscrypt-proxy(Homebrew) trên MacBook opera-macbook, cấu hình forward qua DoH tới đúng endpoint này (stamptĩnh trỏdns.nguyenbinhson.com/dns-query), chạy như service dưới root ở127.0.0.1:53, rồi trỏ DNS hệ thống (networksetup) về127.0.0.1. Test xác nhận:doubleclick.netbị chặn (trả về0.0.0.0), domain thường resolve bình thường — máy đã thật sự dùng AdGuard Home để lọc DNS khi ở mạng public, không chỉ test bằng curl.
Khái niệm
Người liên quan
Câu hỏi mở
- Cấu hình DoH trên các thiết bị di động (Encrypted DNS profile trên iOS, Private DNS trên Android) — chưa làm, mới chỉ áp dụng cho MacBook.