AdGuard Home: máy chủ DNS chặn quảng cáo và trình theo dõi trên toàn bộ mạng
(github.com/AdguardTeam)- AdGuard Home là một máy chủ DNS mã nguồn mở miễn phí, sau khi cài đặt sẽ áp dụng cho mọi thiết bị trong mạng gia đình, chặn quảng cáo và trình theo dõi mà không cần phần mềm phía máy khách
- Cơ chế hoạt động là dùng DNS sinkholing để chuyển hướng các tên miền theo dõi vào “black hole”, khiến thiết bị không thể kết nối tới các máy chủ đó, và chia sẻ nhiều mã nguồn với máy chủ AdGuard DNS công khai
- Khi tự vận hành máy chủ riêng, người dùng có thể trực tiếp chọn nội dung cần chặn hoặc cho phép hơn so với DNS công khai, giám sát hoạt động mạng và thêm các quy tắc lọc tùy chỉnh
- Tương tự Pi-Hole, công cụ này hỗ trợ chặn quảng cáo/trình theo dõi và tùy biến danh sách chặn, nhưng AdGuard Home còn cung cấp sẵn các tính năng như upstream DNS mã hóa, chạy máy chủ DoH/DoT, chặn tên miền lừa đảo/phần mềm độc hại, kiểm soát của phụ huynh và ép buộc Safe Search
- Chặn ở cấp DNS không thể chặn các quảng cáo dùng cùng tên miền với nội dung, như quảng cáo YouTube/Twitch hay bài đăng tài trợ trên Facebook/Twitter/Instagram; ngay cả hỗ trợ proxy chặn nội dung trong tương lai cũng sẽ không giải quyết được mọi trường hợp
Vai trò và cách hoạt động của AdGuard Home
- AdGuard Home là máy chủ DNS chặn quảng cáo và trình theo dõi trên toàn mạng, được định vị như một trung tâm bảo vệ quyền riêng tư cho người dùng và thiết bị
- Sau khi cài đặt, nó bao phủ mọi thiết bị trong mạng gia đình mà không cần cài phần mềm máy khách riêng trên từng thiết bị
- Nó hoạt động như một máy chủ DNS, chuyển hướng các tên miền theo dõi vào “black hole” để thiết bị không thể kết nối tới máy chủ đó
- Phần mềm này dựa trên phần mềm dùng cho máy chủ AdGuard DNS công khai, và hai sản phẩm chia sẻ nhiều mã nguồn
Cài đặt và tích hợp
- Trên Linux, Unix, macOS, FreeBSD, OpenBSD, có thể chạy script cài đặt tự động bằng
curl,wget,fetch-c <channel>: dùng kênh được chỉ định-r: cài đặt lại AdGuard Home-u: gỡ AdGuard Home-v: xuất thông tin chi tiết- Không thể dùng
-rvà-ucùng lúc
- Có thể xem tài liệu Getting Started để biết cách cài đặt thủ công và cấu hình thiết bị
- Ảnh Docker chính thức được cung cấp trên Docker Hub
- Người dùng Linux có thể cài qua Snap Store
- Nếu cần tích hợp, có thể dùng REST API, và cũng có python client
- Python client này được dùng để tạo AdGuard Home Hass.io Add-on
Khác biệt với AdGuard DNS công khai
- Khi tự vận hành máy chủ AdGuard Home riêng, người dùng có nhiều quyền kiểm soát hơn so với dùng máy chủ DNS công khai
- Người dùng có thể tự chọn máy chủ sẽ chặn và cho phép những gì
- Có thể giám sát hoạt động mạng
- Có thể thêm các quy tắc lọc tùy chỉnh
- Vì máy chủ là của chính người dùng, quyền kiểm soát nằm trong tay họ
So sánh với Pi-Hole và trình chặn quảng cáo truyền thống
- AdGuard Home và Pi-Hole đều dùng DNS sinkholing để chặn quảng cáo và trình theo dõi, đồng thời cho phép tùy biến đối tượng bị chặn
- AdGuard Home hướng tới việc cung cấp sẵn nhiều tính năng mà không cần cài thêm phần mềm hay cấu hình thủ công
- Theo bảng so sánh trong README, AdGuard Home cung cấp các tính năng sau
- chặn quảng cáo và trình theo dõi
- tùy biến danh sách chặn
- máy chủ DHCP tích hợp
- HTTPS cho giao diện quản trị
- upstream DNS mã hóa bằng DNS-over-HTTPS, DNS-over-TLS, DNSCrypt
- chạy đa nền tảng
- chạy như máy chủ DNS-over-HTTPS hoặc DNS-over-TLS
- chặn tên miền lừa đảo và phần mềm độc hại
- kiểm soát của phụ huynh để chặn tên miền người lớn
- ép buộc Safe Search trên công cụ tìm kiếm
- cài đặt theo từng thiết bị
- cài đặt truy cập để chọn người dùng AGH DNS
- chạy không cần quyền root
- So với trình chặn quảng cáo truyền thống, DNS sinkholing có thể chặn một tỷ lệ lớn quảng cáo, nhưng thiếu sự linh hoạt và sức mạnh của các trình chặn quảng cáo truyền thống
- Trình chặn dựa trên DNS có thể hữu ích trong việc chặn yêu cầu quảng cáo, theo dõi và phân tích trên SmartTV, loa thông minh và thiết bị IoT, nơi không thể cài trình chặn quảng cáo truyền thống
Giới hạn đã biết và hướng phát triển tương lai
- Trình chặn ở cấp DNS không thể chặn các ví dụ sau
- quảng cáo YouTube, Twitch
- bài đăng tài trợ trên Facebook, Twitter, Instagram
- Quảng cáo dùng chung tên miền với nội dung không thể bị chặn bằng trình chặn cấp DNS
- Chỉ với DNS thì không thể xử lý vấn đề này, mà cần một proxy chặn nội dung như ứng dụng AdGuard độc lập
- AdGuard Home dự kiến trong tương lai sẽ hỗ trợ tính năng proxy chặn nội dung
- Ngay cả khi đó, vẫn có thể còn những trường hợp chưa đủ hiệu quả hoặc đòi hỏi cấu hình phức tạp
Build từ mã nguồn và phát triển
- Để chuẩn bị môi trường phát triển, chạy
make init - Để build, cần các thành phần sau
- Build cơ bản được thực hiện bằng cách clone kho mã rồi chạy
make - Cờ
-jkhông chuẩn hiện chưa được hỗ trợ, nênmake -j 4hoặc cấu hìnhMAKEFLAGScó chứa-j 4có thể làm hỏng quá trình build- Nếu cần, có thể ghi đè bằng
make -j 1
- Nếu cần, có thể ghi đè bằng
- Có thể cross-build cho các mục tiêu OS/ARCH mà Go hỗ trợ bằng cách chỉ định
GOOSvàGOARCHkhi chạymake - Để chuẩn bị build phát hành, cần
snapcraft, và dùngmake build-release CHANNEL='...' VERSION='...' - Ảnh Docker cục bộ được build bằng
make build-docker, còn ảnh chính thức dùng Docker Buildx - Khi debug frontend, chạy bản build phát triển ở chế độ watch trong thư mục
client, rồi chỉ định cờ--local-frontendcho binaryAdGuardHomeđể dùng các tệp trong thư mục./build/thay vì frontend nhúng sẵn - Kiểm thử frontend E2E dùng Playwright, và các bài test nằm trong
tests/e2enpm run test:e2e: chạy toàn bộ test ở chế độ headlessnpm run test:e2e:interactive: test tương tácnpm run test:e2e:debug: chế độ debugnpm run test:e2e:codegen: tạo mã test mới- Playwright sẽ tải xuống và cài các binary trình duyệt riêng, có thể khác với trình duyệt đang cài trên hệ thống
Đóng góp, kênh không ổn định và dự án bên ngoài
- Người đóng góp có thể fork kho mã, thực hiện thay đổi rồi gửi pull request, và phải tuân theo code guidelines
- Không bắt buộc phải đóng góp UI và backend cùng lúc; lý tưởng nhất là phần triển khai backend gồm cấu hình/API/tính năng được đưa vào trước, còn UI có thể được triển khai sau trong pull request khác
- Có hai kênh phiên bản không ổn định
beta: phiên bản beta tương đối ổn định, thường được phát hành mỗi 2 tuần hoặc thường xuyên hơnedge: phiên bản mới nhất của nhánh phát triển, có bản cập nhật mới được đẩy lên hằng ngày
- Có thể cài các phiên bản không ổn định qua kênh
betavàedgetrên Snap Store, các tagbetavàedgetrên Docker Hub, script cài đặt tự động hoặc bản build độc lập trên Wiki - Có các dự án liên quan do nhà phát triển bên thứ ba và người hâm mộ tạo ra, không liên kết với AdGuard
- AdGuard Home Remote: ứng dụng iOS
- Python library
- Home Assistant add-on
- OpenWrt LUCI app
- AdGuardHome sync
- AdGuardian-Term: giám sát lưu lượng thời gian thực và thống kê dựa trên terminal
- Chocolatey package
Quyền riêng tư và công nghệ sử dụng
- Ý tưởng cốt lõi của AdGuard Home là người dùng phải kiểm soát dữ liệu của chính mình
- AdGuard Home không thu thập thống kê sử dụng và không dùng dịch vụ web trừ khi người dùng tự cấu hình
- privacy policy đầy đủ về mặt lý thuyết bao gồm mọi mục mà AdGuard Home có thể gửi đi
- Các công nghệ nền tảng chính là hệ sinh thái Go và Node.js
- Về thư viện Go, công cụ này dùng
gcache,miekg's dns,go-yaml,service,dnsproxy,urlfilter - Ở phía Node.js, công cụ dùng React.js, Tabler và nhiều gói Node.js khác
- Dữ liệu từ
whotracks.mecũng được sử dụng
- Về thư viện Go, công cụ này dùng
- AdGuard Home không còn sử dụng CoreDNS như từng được đề cập trước đây
1 bình luận
Ý kiến trên Hacker News
Sau vài năm chạy dự án cạnh tranh Pi-hole[0] trên mạng gia đình, tôi biết đến NextDNS[1]
Về hiệu năng thì tôi mất lợi thế là yêu cầu không rời khỏi nhà, nhưng tính di động để mọi thiết bị có thể dùng cả trong lẫn ngoài nhà và thời gian tiết kiệm được còn đáng giá hơn
Pi-hole hoạt động tốt 90% thời gian, nhưng khi nó dừng thì mất thời gian sửa; với $20/năm thì khó cạnh tranh với NextDNS bằng cách tự vận hành
Không phải quảng bá NextDNS, và tôi nghĩ những dự án như thế này nhất định phải tồn tại, nhưng NextDNS đúng là một công cụ SaaS rất đơn giản với giá trị trên chi phí rất tốt
0 - https://pi-hole.net/
1 - https://nextdns.io
99,9% trường hợp hỏng thẻ SD là do adapter nguồn thiếu công suất, nên nếu ngại tìm nguồn USB 2,5~3A phù hợp thì cứ mua adapter nguồn Raspberry Pi chính hãng là được
Với $20/năm, mỗi năm bạn vẫn mua được một RPi Zero 2W dự phòng và thẻ SD, mà còn dư tiền cho một chiếc sandwich Sheetz ăn mừng
Tôi nghĩ tổ hợp Pi-hole + WireGuard + mua một lần RPi Zero giá $15 là rất khó đánh bại
Instance của tôi chạy suốt vài năm mà không có vấn đề nào, và khoảng một năm trước tôi chuyển sang AdGuard Home vì muốn chạy nó trên hộp OPNSense
Tôi đã thiết lập WireGuard VPN tự động trên thiết bị để khi không kết nối với SSID của mình thì VPN về mạng gia đình, nhờ vậy DNS cục bộ vẫn hoạt động từ xa
Khi kết nối Wi-Fi trên máy bay chẳng hạn, phải nhớ tắt nó đi, nên tôi thấy khó khuyên dùng cho bạn bè không rành kỹ thuật
Có vẻ giờ đã có khoảng 3 ứng viên
Nếu phải trả $20/năm chỉ để mã hóa DNS và chặn, thì cũng đáng cân nhắc nâng lên Mullvad, vốn không chỉ chặn quảng cáo DNS mà còn cung cấp ẩn danh IP, tunneling, v.v.
Gần đây tôi xem qua Pi-hole rồi chọn AdGuard Home
Nhìn bề ngoài UI tốt hơn và tổng thể có vẻ ổn hơn; với một công cụ bóng bẩy như vậy mà mức độ tùy biến cũng nhiều bất ngờ, như chuyển tiếp truy vấn tên miền riêng cục bộ sang DNS nội bộ
Tôi không rõ vì sao AdGuard cung cấp nó miễn phí và có lẽ nên tìm hiểu, nhưng hiện tại đây có vẻ là một lựa chọn rủi ro tương đối thấp
Việc các quảng cáo khó chịu biến mất khiến trải nghiệm dùng những thứ như ứng dụng NYTimes dễ chịu hơn rất nhiều, nói bao nhiêu cũng không đủ
Tính năng split DNS có đủ mọi tùy chọn mà bạn có thể tưởng tượng
Tôi đã nghĩ sẽ cần một máy chủ DNS thứ hai phía sau, nhưng có thể đưa toàn bộ quy tắc cần thiết trực tiếp vào AdGuard Home
Nó cũng hỗ trợ upstream DoT và DoH, điều vẫn chưa phổ biến trên nhiều router gia đình
Tài liệu: https://github.com/AdguardTeam/AdGuardHome/wiki/Configuratio...
Có thể họ đặt máy chủ DNS của mình làm upstream mặc định và hy vọng nhiều người giữ nguyên mặc định
DNS là một trong những công nghệ tốt nhất cho khai thác dữ liệu và bán dữ liệu, nên tôi nghĩ đó cũng là lý do tồn tại những máy chủ DNS dễ nhớ như 8.8.8.8 hay 1.1.1.1
Google và Cloudflare chắc không chỉ làm vì thiện ý
Tuy nhiên, AdGuard tuyên bố không bán dữ liệu khách hàng
Bạn đọc tài liệu, cài đặt cho chạy tốt, rồi khoe với bạn bè rằng mạng nhà mình không có quảng cáo phiền phức
Khi đó bạn bè sẽ nói “cài cho tôi với”
Bạn có thể cài giúp, nhưng không thể bảo trì luôn, nên sẽ nói rằng “thay vì sự phức tạp đó, có một thiết lập dựa trên ứng dụng đơn giản, dùng ngay cho cả gia đình với $29/năm”
Thế là trong buổi tối đó, năm người bạn tải dịch vụ xuống và trả tiền
Tôi nghĩ triết lý của các startup công nghệ ngày nay cũng tương tự: có một sản phẩm mã nguồn mở rồi xây dựng kinh doanh thương mại trên đó
AdGuard là một công ty Nga có kỹ sư Nga, nhiều nhà phát triển và nhân viên làm việc tại Moskva, và được đăng ký tại Síp
Đây không phải là một tổ hợp tốt, và tôi sẽ tránh vì lý do bảo mật
Lý do MacPaw phân loại phần mềm do Nga phát triển là rủi ro là vì chính phủ có thể truy cập dữ liệu bất cứ lúc nào, nhưng cái này là mã nguồn mở tự host
FSB không thể truy cập máy chủ cục bộ chỉ bằng một lệnh tòa tùy ý
Vì vậy tôi thấy nó giống bài Nga hơn là một mối lo chính đáng, và càng không phù hợp vì tôi trực tiếp biết các nhà phát triển Nga đã khổ sở thế nào vì sự ngu xuẩn của chính phủ họ
Bạn cũng có thể quan tâm đến py-hole
Nó chỉ gồm một script Python và cấu hình dnsmasq, chạy trên OpenWrt, miễn phí và mức dùng CPU gần như bằng 0
https://github.com/time4tea-net/py-hole
Một điểm hay khác của AdGuard là nó được cung cấp dưới dạng add-on Home Assistant
Vì tích hợp với phần còn lại của HA, nên chẳng hạn bạn có thể đặt một công tắc bật/tắt chặn trên dashboard
AdGuard Home rất tuyệt
Tôi từng dùng Pi-hole một thời gian, nhưng khá thường gặp những vấn đề lặt vặt
Không có gì nghiêm trọng, nhưng những công cụ kiểu này chỉ thực sự hữu ích khi chúng cứ thế hoạt động
Trên cấu hình Pi của tôi, nó chạy ổn với docker-compose[1], và tôi dùng một container rất hay tên là adguardhome-sync[2] để chạy chiếc Pi thứ hai làm dự phòng và đồng bộ cấu hình
Giờ trong mạng không còn thấy quảng cáo, và cũng khá thú vị khi xem những thiết bị nào gửi bao nhiêu yêu cầu theo dõi/quảng cáo
1 - https://thesmarthomejourney.com/2021/05/24/adguard-pihole-dn...
2 - https://thesmarthomejourney.com/2023/02/12/adguardhome-sync-...
Rất nhiều thiết bị và ứng dụng cố đi thẳng ra các DNS server được hard-code để phục vụ theo dõi và nhắm mục tiêu quảng cáo
Không biết ở đây có ai dùng Technitium DNS không
Nó là mã nguồn mở, miễn phí và chạy được cả trên phần cứng tối thiểu
Tôi đang chạy nó trên Orange Pi 3 LTS
https://technitium.com/dns/
Nó ghi “Technitium DNS Server is an open source authoritative as well as recursive DNS server”, nên tôi tò mò liệu Pi-hole hay AdGuard cũng là DNS server đệ quy hay chỉ đơn thuần là bộ chặn
Tôi đã dùng Pi-hole lâu rồi và đang cố hiểu xem cái này có ưu điểm gì
Chỉ cần cấu hình một chút là làm miễn phí được
Tôi không biết AdGuard, nhưng dù trông có vẻ tốt thì cũng không muốn thử cho lắm
Vì dựa trên .NET nên cũng đa nền tảng
Nếu muốn theo cách đó thì cũng có Docker image
Có vài ý kiến nhìn chung tích cực về NextDNS, nhưng tôi đang cân nhắc rời NextDNS nên ghi riêng ra đây
Lý do là hiện tôi dùng Mac/Safari và muốn bật tính năng “ẩn địa chỉ IP khỏi trình theo dõi”, nhưng khi bật lên thì quảng cáo trên website mà NextDNS vốn chặn lại bắt đầu hiện ra
Vì vậy tôi phải tắt tùy chọn này và không thể dùng tính năng của Apple
Nhìn chung có vẻ hai thứ này không dùng cùng nhau được, và trên trang trợ giúp của NextDNS cũng có vấn đề liên quan được đăng
https://help.nextdns.io/t/q6yq4xy/nextdns-stops-working-prop...
Không biết có ai biết đây có phải là vấn đề đã biết với AdGuard hay Pi-hole không
Khi bật relay, kết nối được proxy và không dùng DNS server của mạng cục bộ
Dù là Pi-hole, NextDNS hay AdGuard thì cũng vậy
Tôi không rõ mục đích của vế sau là gì
Có vẻ HN có một khoảng thời gian cố định mà không thể chịu nổi nếu không có bài về Pi-hole hoặc AdGuard Home
Hay
Tương tự, nếu đang chạy pfSense trong mạng thì pfBlockerNG cũng đáng xem. Cá nhân tôi khá thích: https://docs.netgate.com/pfsense/en/latest/packages/pfblocke...