Hướng Dẫn Tự Host AdGuard Home: Chặn Quảng Cáo Trên Toàn Bộ Mạng
Tự host AdGuard Home bằng Docker Compose để chặn quảng cáo trên toàn bộ mạng cho mọi thiết bị. Không cần cài đặt từng máy, không cần mở port.
Trong thời đại số, quảng cáo và trình theo dõi (trackers) không chỉ gây khó chịu mà còn tiềm ẩn nhiều rủi ro về quyền riêng tư cũng như tiêu tốn băng thông. Nếu anh em đang tìm kiếm một giải pháp chặn quảng cáo triệt để, hoạt động ở cấp độ mạng cho toàn bộ thiết bị trong nhà, thì AdGuard Home chính là sự lựa chọn hoàn hảo nhất.
Trong bài viết này, TechCoBan sẽ chia sẻ với anh em cách tự host AdGuard Home bằng Docker Compose để chặn quảng cáo cho mọi thiết bị một cách tự động mà không cần cài đặt phần mềm lên từng máy.
1. Giới thiệu tổng quan về AdGuard Home
AdGuard Home là một máy chủ DNS mã nguồn mở và miễn phí. Thay vì sử dụng DNS mặc định của nhà mạng (ISP), anh em cấu hình mạng nhà mình sử dụng AdGuard Home làm DNS Server. Mỗi khi một thiết bị (điện thoại, Smart TV, laptop…) muốn truy cập internet, yêu cầu phân giải tên miền (DNS request) sẽ đi qua AdGuard Home trước.
Nếu tên miền đó nằm trong danh sách đen (ví dụ như server quảng cáo, tracker, mã độc), AdGuard sẽ lập tức chặn lại. Nhờ vậy, thiết bị sẽ không tải quảng cáo và cũng không gửi dữ liệu đi, tiết kiệm băng thông đáng kể.
Các tính năng nổi bật của AdGuard Home:
- Chặn quảng cáo toàn mạng: Tự động bảo vệ tất cả các thiết bị kết nối vào mạng (kể cả các thiết bị khó cài ad-blocker như Smart TV, IoT).
- Giao diện Dashboard trực quan: Theo dõi và thống kê chi tiết các truy vấn DNS, xem thiết bị nào gửi request nhiều nhất.
- Hỗ trợ mã hóa DNS (DNS-over-HTTPS / DNS-over-TLS): Bảo vệ các truy vấn DNS khỏi sự rình mò của nhà mạng.
- Quản lý nội dung (Parental control): Dễ dàng chặn các dịch vụ cụ thể (Facebook, TikTok, nội dung người lớn…) cho từng thiết bị.
- Custom DNS rewrites: Hỗ trợ trỏ tên miền nội bộ về IP cục bộ cực kỳ tiện lợi cho các homelab.
So với các extension chặn quảng cáo trên trình duyệt (như uBlock), AdGuard Home mạnh mẽ hơn vì nó chặn ở cấp độ mạng (DNS) và bao phủ được toàn bộ các ứng dụng (app) trên điện thoại chứ không chỉ riêng trình duyệt web.
2. Chuẩn bị: Sửa lỗi xung đột Port 53 trên Ubuntu
Giao thức DNS hoạt động trên cổng (port) 53. Tuy nhiên, trên Ubuntu và đa số các hệ điều hành họ Debian, hệ thống mặc định chạy một dịch vụ có tên là systemd-resolved đang chiếm giữ cổng 53 (tại 127.0.0.53:53). Do đó, trước khi chạy Docker, anh em phải tắt “stub listener” này đi để tránh lỗi xung đột (address-in-use).
Bước 1: Tạo thư mục chứa file cấu hình ghi đè cho systemd-resolved:
sudo mkdir -p /etc/systemd/resolved.conf.d
Bước 2: Vô hiệu hóa DNS stub listener:
sudo tee /etc/systemd/resolved.conf.d/adguardhome.conf <<'EOF'
[Resolve]
DNS=127.0.0.1
DNSStubListener=no
EOF
Bước 3: Cập nhật lại file resolv.conf và khởi động lại dịch vụ:
sudo mv /etc/resolv.conf /etc/resolv.conf.backup
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
sudo systemctl reload-or-restart systemd-resolved
Sau khi hoàn tất, anh em có thể dùng lệnh sudo ss -tulpn | grep :53 để kiểm tra. Nếu không hiện ra kết quả nào tức là Port 53 đã được giải phóng thành công.
(Lưu ý: Nếu anh em đang dùng CentOS/RHEL thì thường systemd-resolved không bật mặc định, anh em chỉ cần kiểm tra xem port 53 có đang bị chiếm không là được).
3. Cài đặt AdGuard Home bằng Docker Compose
Cách sạch sẽ và tối ưu nhất để triển khai AdGuard Home là sử dụng Docker Compose.
Bước 1: Tạo thư mục lưu trữ cho dự án:
mkdir -p ~/adguard && cd ~/adguard
mkdir -p work conf
Bước 2: Tạo file compose.yml (hoặc docker-compose.yml):
nano compose.yml
Dán nội dung cấu hình sau vào:
version: '3.8'
services:
adguardhome:
image: adguard/adguardhome:latest
container_name: adguardhome
restart: unless-stopped
volumes:
- ./work:/opt/adguardhome/work
- ./conf:/opt/adguardhome/conf
- /etc/localtime:/etc/localtime:ro
ports:
- "53:53/tcp"
- "53:53/udp"
- "3000:3000/tcp"
- "8080:80/tcp"
(Trong cấu hình trên: Port 53 dùng để xử lý truy vấn DNS. Port 3000 dùng để thiết lập ban đầu. Port 8080 sẽ là port truy cập trang quản trị web sau này).
Bước 3: Khởi chạy AdGuard Home:
docker compose up -d
Bước 4: Hoàn tất thiết lập ban đầu (Setup Wizard)
- Anh em mở trình duyệt và truy cập vào
http://<IP_MAY_CHU_CUA_BAN>:3000để bắt đầu. - Ở phần Admin Web Interface, hãy chọn lắng nghe trên tất cả các interfaces, port
80. - Ở phần DNS server, chọn lắng nghe trên tất cả các interfaces, port
53. - Tạo một tài khoản Admin và mật khẩu quản trị.
- Sau khi thiết lập xong, anh em truy cập lại Dashboard bằng địa chỉ
http://<IP_MAY_CHU_CUA_BAN>:8080.
4. Sử dụng AdGuard Home thực tế
Bây giờ AdGuard Home đã chạy, chúng ta cần cấu hình để mạng nội bộ thực sự sử dụng nó.
Cấu hình DNS Upstream an toàn
Để tránh việc nhà mạng (ISP) theo dõi lịch sử duyệt web, anh em nên cấu hình DNS Upstream qua giao thức mã hóa (DNS-over-HTTPS).
Trong Dashboard quản trị, điều hướng tới Settings → DNS settings. Tại mục Upstream DNS servers, anh em dán các địa chỉ sau vào:
# Cloudflare DNS-over-HTTPS
https://dns.cloudflare.com/dns-query
# Quad9 DNS-over-HTTPS (Chặn mã độc rất tốt)
https://dns.quad9.net/dns-query
Nhấn Apply để lưu lại. Kể từ giờ, AdGuard Home sẽ giao tiếp với thế giới bên ngoài thông qua kênh đã được mã hoá.
Trỏ Router về AdGuard Home
Cách nhàn nhất là cấu hình DNS trực tiếp trên Modem/Router WiFi của anh em. Nhờ vậy, mọi thiết bị cứ kết nối vào WiFi là tự động được chặn quảng cáo.
- Lấy địa chỉ IP mạng nội bộ (LAN IP) của máy chủ đang chạy AdGuard Home (ví dụ
192.168.1.100). - Đăng nhập vào trang quản trị của Router (thường là
192.168.1.1). - Tìm mục cấu hình DHCP Server hoặc LAN DNS.
- Thay đổi Primary DNS thành IP của máy chủ AdGuard Home (
192.168.1.100). - Lưu cấu hình và khởi động lại Router (hoặc ngắt kết nối WiFi rồi kết nối lại trên điện thoại/laptop để nhận IP mới).
Cấu hình thêm danh sách chặn (Blocklists)
Mặc định AdGuard Home đã có sẵn một list chặn cơ bản. Để tăng cường sức mạnh, anh em có thể thêm các Blocklists khác tại mục Filters → DNS blocklists → Add blocklist.
Một số list “ngon” anh em nên dùng:
- EasyList: Chặn quảng cáo đa dụng siêu phổ biến.
- EasyPrivacy: Ngăn chặn các trackers theo dõi hành vi.
- OISD: Danh sách tổng hợp tất cả trong một, độ tin cậy cao và rất ít khi bị nhận diện nhầm (false positives).
(Lưu ý nhỏ: Anh em đừng tham lam thêm quá nhiều danh sách chặn. Việc này vừa làm nặng hệ thống vừa dễ gây lỗi block nhầm các trang web hợp lệ).
5. Tổng kết
Như vậy, TechCoBan đã hướng dẫn anh em chi tiết cách thiết lập một máy chủ AdGuard Home nội bộ bằng Docker cực kỳ gọn nhẹ và hiệu quả. Việc tự host hệ thống DNS riêng không chỉ giúp chặn quảng cáo, bảo vệ trẻ em, mà còn tăng cường tính riêng tư tuyệt đối cho gia đình bạn.
Nếu anh em muốn truy cập vào trang quản trị (Dashboard) của AdGuard Home từ xa khi đang đi ra ngoài đường, anh em có thể tham khảo bài viết kết hợp với Reverse Proxy (như Caddy hoặc Nginx Proxy Manager) cùng với các giải pháp Tunnel (như Cloudflare Tunnels hay Localtonet) để đảm bảo an toàn bảo mật nhé!
Bình luận
Bài viết liên quan
Script cài đặt nhanh Docker và Docker Compose trên Ubuntu
Bài viết này chia sẻ mọi người một script tự động cài đặt Docker và Docker Compose trên Ubuntu (18.04, 20.04, 22.04) giúp bạn tiết kiệm thời gian.
Bảo mật Web Services với Traefik Reverse Proxy
Tìm hiểu về Traefik Reverse Proxy - công cụ Load Balancer hiện đại giúp tự động cấu hình và bảo mật các ứng dụng chạy trên Docker và Kubernetes.
TeamCity CI/CD: Tại sao Developers chọn TeamCity cho DevOps Pipelines?
Tìm hiểu TeamCity là gì, các tính năng nổi bật và lý do tại sao các lập trình viên lại chọn TeamCity của JetBrains cho các dự án CI/CD thay vì các công cụ khác.