×

Hướng dẫn cài đặt AdGuard Home DoH với Docker và Caddy trên VPS Oracle

Hướng dẫn cài đặt AdGuard Home DoH với Docker và Caddy trên VPS Oracle
Mục lục

Cấu hình ban đầu

Để bắt đầu, chúng ta sẽ tạo một VPS mới hoàn toàn sạch sẽ, chưa có bất kỳ cài đặt nào, chạy trên hệ điều hành Debian 13. Bạn có thể sử dụng tính năng reinstall để đưa VPS về trạng thái ban đầu.

  • Nếu bạn đã cài đặt DockerDocker Compose, có thể bỏ qua bước chuẩn bị dưới đây.
wget -qO vps.sh https://go.bibica.net/ubuntu-22-04-basic-optimization && sudo bash vps.sh

Việc thiết lập ban đầu này sẽ đảm bảo môi trường làm việc sạch sẽ và sẵn sàng cho các bước cài đặt tiếp theo.

Cấu hình AdGuard Home và Caddy

Để bắt đầu, bạn cần tạo một thư mục riêng cho AdGuard Home và Caddy. Điều này giúp việc quản lý và sao lưu dữ liệu trở nên dễ dàng hơn.

  • Tạo thư mục /home/adguardhome và di chuyển vào thư mục đó:
    mkdir /home/adguardhome
    cd /home/adguardhome
  • Tạo file compose.yml và chỉnh sửa nội dung:
    nano compose.yml

Nội dung của file compose.yml như sau:

services:
  caddy:
    image: caddy:2.10.2-alpine
    container_name: caddy
    restart: always
    networks:
      - reverse_proxy
    volumes:
      - ./domain-config:/domain-config
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./caddy_data:/data
      - ./caddy_config:/config
    ports:
      - 80:80
      - 443:443
      - 443:443/udp

  adguardhome:
    image: adguard/adguardhome
    container_name: adguardhome
    restart: always
    networks:
      - reverse_proxy
    volumes:
      - ./adguard/work:/opt/adguardhome/work
      - ./adguard/config:/opt/adguardhome/conf
      - ./caddy_data:/caddy_data:ro
    ports:
      - 3000:3000/tcp

networks:
  reverse_proxy:
    driver: "bridge"
    name: reverse_proxy

Lưu và thoát bằng cách nhấn Ctrl+O, Enter, Ctrl+X.

Cấu hình Caddyfile

Tiếp theo, bạn cần tạo file Caddyfile để cấu hình Caddy.

nano Caddyfile

Nội dung của file Caddyfile như sau:

:80 {
    respond "Hello, world!"
}

# Import các file cấu hình riêng
import /domain-config/*.conf

Lưu và thoát bằng cách nhấn Ctrl+O, Enter, Ctrl+X.

Tạo tài khoản quản trị

  1. Khởi chạy dịch vụ: Chạy lệnh sau để hoàn thành cài đặt:
    docker compose up -d --build --remove-orphans --force-recreate
  2. Truy cập AdGuard Home: Mở trình duyệt và truy cập vào địa chỉ IP:3000 (ví dụ: 64.181.123.123:3000) để bắt đầu quá trình cấu hình AdGuard Home.
  • Thực hiện theo hướng dẫn, tạo tài khoản quản trị với usernamepassword mong muốn.
  1. Cấu hình domain: Tạo một sub domain (ví dụ: adguard.bibica.net) để truy cập vào AdGuard Home.
  • Tạo file cấu hình cho domain:
    nano domain-config/bibica.net.conf

Nội dung file như sau:

adguard.bibica.net {
    reverse_proxy adguardhome:80 {
        header_up X-Forwarded-For {header.X-Forwarded-For}
    }
}
  • Lưu và thoát.
  1. Cấu hình AdGuard Home: Mở file cấu hình của AdGuard Home:
    nano /home/adguardhome/adguard/config/AdGuardHome.yaml

Tìm đến phần trusted_proxies và thêm vào dòng mới:

trusted_proxies:
  - 127.0.0.0/8
  - ::1/128
  - 172.16.0.0/12
  - Thêm dòng mới tại đây
  • Lưu và thoát.
  1. Cấu hình Cloudflare: Thêm A Records cho sub domain tại Cloudflare và bật proxy status.

Hướng dẫn cài đặt AdGuard Home DoH với Docker và Caddy trên VPS Oracle

  1. Khởi động lại dịch vụ: Chạy lệnh sau để khởi động lại các container:
    docker compose stop && docker compose start

Chờ một chút để Caddy tạo SSL certificate, sau đó bạn có thể truy cập vào AdGuard Home bằng sub domain đã cấu hình.

Cấu hình AdGuard Home

Để cấu hình AdGuard Home hiệu quả, bạn cần thực hiện các bước sau:

  • Thêm bộ lọc chặn quảng cáo:
    • Truy cập vào phần FiltersDNS Blocklists để thêm các bộ lọc cần thiết.
    • Sử dụng các bộ lọc cơ bản như AdGuard DNS filterVNM: ABPVN List để bắt đầu. Đây là những bộ lọc nhẹ và hiệu quả, giúp giảm thiểu vấn đề chặn nhầm các trang web.

Hướng dẫn cài đặt AdGuard Home DoH với Docker và Caddy trên VPS Oracle

  • Tạo bộ lọc tùy chỉnh:
    • Nếu cần chặn thêm các domain cụ thể, bạn có thể tạo bộ lọc ngoài trên GitHub. Ví dụ, bạn có thể tạo danh sách chặn cho domain của Cốc Cốc và MSN.
    • Để thêm domain vào danh sách cho phép (Allowlist), bạn có thể chỉnh sửa trực tiếp trong phần FiltersCustom filtering rules. Ví dụ, thêm @@||umami.is^ để cho phép domain umami.is.

Hướng dẫn cài đặt AdGuard Home DoH với Docker và Caddy trên VPS Oracle

  • Quản lý Allowlist:
    • Nếu cần quản lý nhiều domain trong danh sách cho phép, bạn có thể tạo một bộ lọc ngoài trên GitHub và thêm vào phần FiltersDNS allowlists. Điều này giúp bạn dễ dàng chỉnh sửa danh sách mà không cần truy cập vào giao diện quản trị.

Cấu hình Upstream DNS servers

  • Cấu hình DNS upstream:
    • Truy cập vào SettingsDNS Settings và thêm các Upstream DNS servers như 1.1.1.18.8.8.8.
    • Sử dụng các DNS upstream an toàn và nhanh chóng sẽ giúp cải thiện hiệu suất. Trung bình, thời gian xử lý có thể nằm trong khoảng 1ms – 5ms.
  • Lựa chọn DNS upstream:
    • Bạn có thể sử dụng một DNS upstream duy nhất như 1.1.1.1 để đảm bảo sự ổn định. Việc sử dụng nhiều DNS upstream cùng lúc có thể gây ra tình trạng mất ổn định khi có quá nhiều request cùng lúc.

Cấu hình Máy chủ DNS Xuôi dùng cho cá nhân:

Cấu hình đang được sử dụng hàng ngày cho các dịch vụ DNS cá nhân.

  • Do sử dụng rộng rãi các dịch vụ của Cloudflare, đã dùng Cloudflare DNS nhiều năm và rất hài lòng, nên lựa chọn nó làm DNS chính cho mọi trang web.
  • Sử dụng Cloudflare Gateway, tạo ra một vị trí DNS có bật EDNS Client Subnet, giúp một số dịch vụ CDN định tuyến người dùng đến máy chủ gần hơn.

https://iabucttpma.cloudflare-gateway.com/dns-query

Trong thực tế sử dụng, nếu người dùng dùng IPv6, ở một vài dịch vụ, định tuyến tốt hơn so với IPv4.

  • Bật sử dụng Parallel requests (chạy đồng loạt tất cả các máy chủ DNS Xuôi, lấy kết quả trả về đầu tiên, không có tác dụng với cấu hình đang dùng do chỉ dùng duy nhất DNS servers, thêm vào sẵn để nếu cần dùng nhiều máy chủ DNS Xuôi sẽ hiệu quả hơn).
  • Fallback DNS servers (chỉ sử dụng nếu máy chủ DNS Xuôi bị lỗi, thêm vào cho an toàn).

94.140.14.14
94.140.15.15

  • Bootstrap DNS servers (dùng để phân giải tên miền của máy chủ DNS Xuôi khi được khai báo bằng domain thay vì IP).

1.1.1.1
1.0.0.1
2606:4700:4700::1111
2606:4700:4700::1001

Cấu hình máy chủ DNS:

  • Rate limit: 20 (mặc định 20 là đủ cho sử dụng bình thường, có thể set 50-60 cũng ổn, dùng cá nhân có thể để 0 luôn cho thoải mái).
  • Bật Enable EDNS client subnet (gửi vị trí địa lý của client để nhận server gần nhất, tùy chọn quan trọng).

Cấu hình bộ nhớ đệm DNS:

  • Bật Enable cache.
  • Cache size: 67108864.
  • Override minimum TTL: 60.
  • Override maximum TTL: 300.
  • Bật Optimistic caching.

Khi bật Enable cacheOptimistic caching, AdGuard Home quản lý theo logic thông minh hơn. Ví dụ, theo cấu hình bên trên:

  • Lần đầu truy cập bibica.net:
    • Ví dụ response time: ~200ms.
    • TTL upstream = 300s.
    • AdGuard Home giữ nguyên 300s (vì 60 ≤ 300 ≤ 300).
  • Trong 300s (5 phút) tiếp theo:
    • Truy cập lại bibica.net -> dùng cache.
    • Response time: ~1ms.
  • Sau 300s, cache hết hạn:
    • Optimistic caching: vẫn dùng IP cũ (response time ~1ms).
    • Background: refresh cache mới.
    • -> User không thấy chậm dù đã hết thời gian cache.
  • Sau 10s (T=310s):
    • Cache đã refresh, lưu IP hiện tại dùng cho 300s tiếp theo.

Hướng dẫn cài đặt AdGuard Home DoH với Docker và Caddy trên VPS Oracle

Với logic hoạt động như này, khi truy cập lần đầu tiên tới một domain mới hoàn toàn, user mới thấy chậm một chút, còn lại gần như đều dùng cache cũ. Khi hết thời gian cache, cũng sẽ chạy ngầm, user sẽ không thấy chậm. TTL 60-300 là con số hợp lý, phù hợp với đại đa số cấu hình hiện tại (GitHub dùng TTL 60s). Nếu domain đổi IP, quá trình gián đoạn không quá dài, tối đa 300s + 10s.

Cài đặt chung:

  • Filter update interval: 1 hour (thời gian cập nhật các bộ lọc, có thể tắt vì tính năng này sử dụng RAM rất nhiều).

Cấu hình Encryption Settings

Cấu hình quan trọng để kích hoạt DNS over HTTPS tự động

Để hoàn tất quá trình thiết lập DNS over HTTPS tự động, bước cấu hình Encryption settings là cực kỳ quan trọng. Hãy thực hiện theo các bước sau:

  • Truy cập vào mục Settings và chọn Encryption settings

Hướng dẫn cài đặt AdGuard Home DoH với Docker và Caddy trên VPS Oracle

  • Kích hoạt tùy chọn Enable Encryption (HTTPS, DNS-over-HTTPS, and DNS-over-TLS)
  • Kích hoạt tùy chọn Enable plain DNS
  • Nhập Server name: Ví dụ adguard.bibica.net
  • Thiết lập HTTPS port: 443
  • Để DNS-over-TLS portDNS-over-QUIC port0 (hoặc để trống)

Cấu hình Certificates

Tùy thuộc vào subdomain bạn sử dụng, hãy truy cập đường dẫn /home/adguardhome/caddy_data/caddy/certificates/ trên VPS để tìm các khóa SSL .crt.key do Caddy tạo ra. Đường dẫn chi tiết sẽ có dạng:

  • /caddy_data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/adguard.bibica.net/adguard.bibica.net.crt
  • /caddy_data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/adguard.bibica.net/adguard.bibica.net.key

Tiếp theo, mở file cấu hình gốc của AdGuardHome bằng lệnh:

nano /home/adguardhome/adguard/config/AdGuardHome.yaml

Kéo xuống phần tls và kiểm tra các thông số:

tls:
  enabled: true
  server_name: adguard.bibica.net
  force_https: false
  port_https: 443
  port_dns_over_tls: 0
  port_dns_over_quic: 0
  port_dnscrypt: 0
  dnscrypt_config_file: ""
  allow_unencrypted_doh: false
  certificate_chain: ""
  private_key: ""
  certificate_path: /caddy_data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/adguard.bibica.net/adguard.bibica.net.crt
  private_key_path: /caddy_data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/adguard.bibica.net/adguard.bibica.net.key
  strict_sni_check: false

Sửa dòng allow_unencrypted_doh: false thành allow_unencrypted_doh: true để cho phép DNS over HTTPS không mã hóa.

Cuối cùng, khởi động lại AdGuard Home để các thay đổi có hiệu lực:

docker restart adguardhome

Sau khi hoàn tất, truy cập vào đường dẫn https://adguard.bibica.net/dns-query để kiểm tra. Nếu thấy thông báo Bad Request, nghĩa là việc cài đặt đã chính xác.

Xác minh cấu hình hiện tại

Cấu hình hiện tại sử dụng AdGuard Home DoH chạy trên Docker, kết hợp với Caddy làm reverse proxy. Điều này giúp không cần mở thêm bất kỳ port nào ngoài port đã được cấu hình ban đầu. Ngoài ra, IP server được ẩn đi thông qua Cloudflare, giúp tăng cường bảo mật. Logs của clients được lưu trữ theo IP của Docker, giúp tăng thêm sự an tâm cho người dùng.

Sau này, nếu cần chuyển server chạy AdGuard Home, chỉ cần sao chép thư mục /home/adguardhome/ sang server mới là đủ, mà không cần phải sửa lại IP trong cấu hình domain.

Hướng dẫn cài đặt AdGuard Home DoH với Docker và Caddy trên VPS Oracle

Khi chạy, AdGuard HomeCaddy sử dụng ban đầu khoảng 80MB RAM, và CPU được sử dụng không đáng kể. Dung lượng HDD ghi xuống phụ thuộc vào số lượng user sử dụng. Trong giai đoạn đầu, cần kiểm tra chất lượng dãy DNS, xem có chặn nhầm gì không, có thể lưu log để kiểm tra. Sau khi chạy ổn định, có thể tắt ghi log đi để giảm tải.

Cấu hình Docker cho AdGuard HomeCaddy đã được điều chỉnh để AdGuard Home có thể đọc trực tiếp 2 khóa SSL .crt.key được tạo ra từ Caddy. Sau 90 ngày, khi SSL hết hạn và Caddy renew, AdGuard Home sẽ tự động đọc được cấu hình mới mà không cần điều chỉnh thủ công.

Nếu đã có sẵn Caddy, Nginx hay một dịch vụ khác làm Reverse Proxy, chỉ cần sửa lại cấu hình một chút là có thể sử dụng được.

Xử lý sự cố

Tham khảo thêm thông tin tại Cloudflare Gateway để biết thêm chi tiết.

Hiệu Năng của Hệ Thống DNS-over-HTTPS

Khi triển khai AdGuard Home trên VPS tại Singapore, hiệu năng phân giải DNS cho người dùng tại Việt Nam cho kết quả chính xác. Tuy nhiên, khi sử dụng VPS tại Mỹ, vẫn có một số kết nối đi qua Mỹ, điều này có thể do nhiều yếu tố như Cloudflare, nhà mạng hoặc trang web được kết nối. Một giải pháp đơn giản là sử dụng VPS gần với người dùng nhất để tránh các vấn đề về định tuyến.

Hướng dẫn cài đặt AdGuard Home DoH với Docker và Caddy trên VPS Oracle

Khi sử dụng DoH qua AdGuard Home, hiệu năng phân giải DNS không ảnh hưởng nhiều vì chỉ kiểm tra ở lần truy cập đầu tiên. Các lần truy cập sau sẽ sử dụng cache cũ, giúp tăng hiệu quả. Tuy nhiên, hiệu năng có thể bị ảnh hưởng bởi các domain sử dụng dịch vụ DNS tại Việt Nam.

  • Lần đầu truy cập có thể mất ~ 370ms
  • Các lần sau khi đã có cache giảm xuống còn ~ 190ms

Hướng dẫn cài đặt AdGuard Home DoH với Docker và Caddy trên VPS Oracle

Sử dụng thực tế cho thấy sau lần đầu tiên (~200ms), các lần sau chỉ mất ~ 1ms-2ms nhờ vào bộ nhớ cache của trình duyệt. Một số domain như medium.com có thể cần cấu hình DNS rewrites để hoạt động bình thường.

Cấu Hình DNS-over-HTTPS cho Các Trình Duyệt

Để cấu hình DoH với AdGuard Home, người dùng có thể thực hiện các bước sau trên các trình duyệt di động như Chromium, Cốc Cốc, Edge:

  1. Vào SettingsPrivacy and securitySecurity
  2. Cuộn xuống phần Advanced
  3. Tìm Use secure DNSEnable
  4. Chọn With Custom
  5. Nhập: https://adguard.bibica.net/dns-query

Hướng dẫn cài đặt AdGuard Home DoH với Docker và Caddy trên VPS Oracle

Người dùng có thể tham khảo thêm nhiều endpoint DoH khác tại đây.

Cấu Hình DNS-over-HTTPS cho iOS và iPadOS

Trên iOSiPadOS, người dùng có thể tải profile cấu hình sẵn và cài đặt tương tự như NextDNS. Kết quả thử nghiệm cho thấy AdGuard Home hoạt động hiệu quả, cho phép tùy chỉnh các domain cần chặn, rất phù hợp cho thiết bị di động.

20
"Nếu bạn cảm thấy bài viết này hữu ích, bạn có thể ủng hộ cho tác giả một tách Cafe"
THANH TOÁN ỦNG HỘ
Sacombank
NGUYEN NGOC HOAN
040086597979
Đọc thêm bài khác
×
Chia sẻ trang này tới

Gọi điệnMessengerZalo