Mạng nhà tôi từng ngập tràn quảng cáo — TV thông minh liên tục hiện banner, máy chơi game gọi về nhà, thiết bị IoT thì làm đủ thứ trời ơi. Extension trên trình duyệt chẳng giúp được gì ở đây. Rồi tôi dựng Pi-hole lên, và đó là một trong những giờ làm việc đáng giá nhất tôi từng bỏ ra cho home lab. Một máy, một cấu hình, phủ hết toàn bộ.
So Sánh Các Phương Pháp Chặn Quảng Cáo
Trước khi chọn một giải pháp, đáng biết mình đang có những lựa chọn gì — và điểm yếu của từng cái là ở đâu.
Extension Trình Duyệt (uBlock Origin, AdBlock)
Lựa chọn quen thuộc với người dùng máy tính. Hoạt động tốt trên các trình duyệt bạn kiểm soát, nhưng hoàn toàn vô dụng với TV thông minh, máy chơi game, điện thoại chưa root, hay bất kỳ thiết bị IoT nào. Mỗi thiết bị mới lại phải cài đặt thủ công. Cũng không có khả năng theo dõi toàn mạng.
Chặn Ở Tầng Router (OpenWrt, pfSense + pfBlockerNG)
Đang chạy pfSense hoặc OpenWrt? pfBlockerNG có thể cho bạn chức năng gần tương đương Pi-hole. Nhưng cấu hình phức tạp hơn, giao diện thô hơn, và bạn đang gắn chặt việc chặn quảng cáo vào router — trong khi bạn chẳng muốn phải khởi động lại router chỉ để chỉnh DNS.
DNS Filtering Trên Cloud (NextDNS, AdGuard DNS)
Các dịch vụ như NextDNS cung cấp tính năng chặn tương tự mà không cần phần cứng riêng. Tiện lợi, nhưng các truy vấn DNS của bạn đi qua hạ tầng của họ. Đây là sự đánh đổi thực sự về quyền riêng tư, và bạn phụ thuộc vào uptime của dịch vụ đó. Với một home lab mà mục tiêu là tự host mọi thứ, điều này cảm giác như đang bỏ cuộc.
Pi-hole
Một DNS sinkhole tự host. Mọi thiết bị trong mạng đều dùng nó làm DNS resolver. Khi một thiết bị cố tra tên miền quảng cáo, Pi-hole trả về không có gì — request không bao giờ rời khỏi mạng của bạn. Một lần cài đặt, không cấu hình từng thiết bị, ghi log đầy đủ mọi truy vấn.
Ưu và Nhược Điểm
Pi-hole Làm Tốt Điều Gì
- Phủ toàn mạng — mọi thiết bị, bao gồm TV thông minh, máy chơi game, máy in và cảm biến IoT
- Không cần cấu hình từng thiết bị — chỉ cần trỏ DHCP của router về Pi-hole là xong
- Dashboard truy vấn — thống kê thời gian thực về các truy vấn bị chặn, client nhiều nhất, tên miền nhiều nhất
- Blocklist tùy chỉnh — kéo vào StevenBlack, Firebog, hoặc bất kỳ hosts file nào
- Whitelist dễ dàng — một lệnh khi có thứ gì đó bị chặn nhầm
- Chi phí vận hành thấp — Raspberry Pi Zero 2W xử lý mạng gia đình thoải mái mà vẫn còn dư tài nguyên
- DHCP server tùy chọn — thay thế DHCP của router để nhìn thấy hostname từng client
Điểm Còn Hạn Chế
- Điểm chết duy nhất — nếu Pi-hole sập mà không có DNS dự phòng, cả mạng mất DNS
- Quảng cáo YouTube vẫn qua được — Google phục vụ quảng cáo từ cùng tên miền với nội dung; DNS không thể phân biệt chúng
- Bypass DNS cứng — một số ứng dụng (một số dịch vụ Google) bỏ qua DNS từ DHCP và dùng IP cứng như
8.8.8.8 - Tốn công bảo trì — cập nhật blocklist, thỉnh thoảng phải chỉnh whitelist khi có thứ bị chặn nhầm
- VPN bypass — thiết bị kết nối VPN sẽ đường hầm DNS qua VPN, bỏ qua Pi-hole
Cấu Hình Khuyến Nghị
Đây là cấu hình tôi đúc kết sau vài lần thử — bao gồm một buổi tối Pi-hole khởi động lại để cập nhật và làm cả mạng mất DNS. Dự phòng không phải tùy chọn, mà là bắt buộc.
Phần Cứng
Raspberry Pi 4 (2GB) là lựa chọn thoải mái nhất. Nhanh, yên tĩnh, tiêu thụ điện thấp, và có thể bạn đã có sẵn một cái. Pi Zero 2W xử lý DNS cho cả hộ gia đình ổn nếu bạn quan tâm đến mức tiêu thụ điện. Ngoài ra, bất kỳ máy Linux hoặc VM nào đều được — tôi đã chạy nó trong LXC container trên Proxmox suốt hai năm mà không có vấn đề gì.
Docker hay Cài Đặt Gốc
Đã chạy Docker trên máy? Dùng Docker Compose. Cập nhật chỉ cần một lệnh docker compose pull && docker compose up -d, và cấu hình của bạn được quản lý version. Nếu muốn cài đặt đơn giản nhất trên Pi riêng, trình cài đặt gốc cũng ổn và chỉ mất năm phút.
Dự Phòng
Luôn cấu hình router với hai DNS server: Pi-hole làm primary, một resolver công cộng (1.1.1.1 hoặc 8.8.8.8) làm secondary. Khi Pi-hole khởi động lại để cập nhật, DNS tự động chuyển sang dự phòng. Để có độ sẵn sàng cao hơn, chạy hai instance Pi-hole đồng bộ nhau qua Gravity Sync.
Hướng Dẫn Triển Khai
Phương Án 1: Cài Đặt Gốc Trên Raspberry Pi OS
Flash Raspberry Pi OS Lite, SSH vào, rồi chạy:
curl -sSL https://install.pi-hole.net | bash
Trình cài đặt tương tác sẽ hướng dẫn bạn chọn interface, DNS upstream và blocklist. Cuối cùng nó in ra URL admin và mật khẩu. Xong.
Phương Án 2: Docker Compose (Khuyến Nghị Cho Home Lab)
Tạo thư mục làm việc và tạo file docker-compose.yml:
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
ports:
- "53:53/tcp"
- "53:53/udp"
- "80:80/tcp"
environment:
TZ: "Asia/Ho_Chi_Minh"
WEBPASSWORD: "mật_khẩu_an_toàn_của_bạn"
volumes:
- "./etc-pihole:/etc/pihole"
- "./etc-dnsmasq.d:/etc/dnsmasq.d"
restart: unless-stopped
dns:
- 127.0.0.1
- 1.1.1.1
docker compose up -d
Truy cập trang quản trị tại http://<ip-của-pi>/admin.
Người dùng Ubuntu — cổng 53 mặc định bị systemd-resolved chiếm. Giải phóng nó trước:
sudo systemctl disable --now systemd-resolved
sudo rm /etc/resolv.conf
echo "nameserver 1.1.1.1" | sudo tee /etc/resolv.conf
Trỏ Router Về Pi-hole
Đăng nhập vào trang quản trị router, tìm phần cài đặt DHCP và thiết lập:
- DNS chính → IP tĩnh của Pi-hole (ví dụ:
192.168.1.100) - DNS phụ →
1.1.1.1làm dự phòng
Lưu lại và để các thiết bị gia hạn lease, hoặc kết nối lại thủ công. Sau khoảng một phút, toàn bộ lưu lượng DNS sẽ đi qua Pi-hole.
Thêm Blocklist Tốt Hơn
Danh sách mặc định là điểm khởi đầu ổn, nhưng độ phủ thực sự đến từ các danh sách do cộng đồng duy trì. Vào mục Adlists trong trang quản trị và thêm các danh sách sau — chỉ riêng danh sách tổng hợp của StevenBlack đã bao phủ ~170.000 tên miền quảng cáo và tracker đã biết:
https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
https://v.firebog.net/hosts/AdguardDNS.txt
https://v.firebog.net/hosts/Easylist.txt
https://v.firebog.net/hosts/Easyprivacy.txt
Sau đó cập nhật gravity để tải về:
# Cài đặt gốc
pihole -g
# Docker
docker exec pihole pihole -g
Whitelist Các Tên Miền Bị Chặn Nhầm
Khi có thứ gì đó không hoạt động, kiểm tra Query Log trong dashboard. Lọc theo IP client và tìm các mục bị chặn. Whitelist những gì không nên bị chặn:
# Cài đặt gốc
pihole -w example.com
# Docker
docker exec pihole pihole -w example.com
Cập Nhật Pi-hole
# Cài đặt gốc
pihole -up
# Docker — kéo image mới và tạo lại container
docker compose pull
docker compose up -d
Điều Gì Chờ Đợi Bạn Sau Một Tuần
Trên mạng gia đình thông thường, Pi-hole chặn 15–25% tổng số truy vấn DNS. Các mạng có TV thông minh, Android box và nhiều thiết bị IoT thường đạt 35–45%. Đó không chỉ là quảng cáo — còn là dữ liệu telemetry, các ping analytics và những lần check-in ngầm vẫn đang diễn ra trong im lặng, nay hoàn toàn biến mất.
Query log thực sự mở mắt. TV Samsung của tôi thực hiện hơn 300 truy vấn DNS mỗi giờ khi đang ở trạng thái chờ, nhiều cái trỏ thẳng vào hạ tầng quảng cáo của Samsung. Máy in liên tục kiểm tra cập nhật. Ứng dụng ping đến endpoint analytics vài phút một lần. Tất cả đều hiện ra ở đó. Một khi bạn thấy các thiết bị của mình đang thực sự làm gì, Pi-hole sẽ trở thành một phần không thể thiếu trong home lab.

