Dự án CGPS, được khởi xướng vào năm 2023, từng được nhắc đến trên một diễn đàn công nghệ, nhưng ban đầu không gây ấn tượng mạnh đối với tôi. Cấu hình của nó quá phức tạp cho người dùng phổ thông, đặc biệt những ai chưa quen với Github. Mặc dù chặn quảng cáo qua DNS không hoàn toàn hiệu quả, việc sử dụng tiện ích mở rộng trên trình duyệt vẫn tiện lợi hơn. Tuy nhiên, nếu bạn cần thiết lập nó làm DNS mặc định cho một số trình duyệt hoặc thiết bị di động như iPhone hay iPad, đây là một lựa chọn phù hợp vì nó có khả năng chặn một số quảng cáo cơ bản, tiết kiệm pin và hoàn toàn miễn phí.
Hiện tại, tôi rất hài lòng với việc sử dụng CGPS để tạo bộ lọc chặn quảng cáo trên Cloudflare Gateway, vì nó đáp ứng hầu hết các tiêu chí mà tôi mong muốn:
- Miễn phí, không giới hạn số lượng thiết bị và truy vấn DNS, điều mà nhiều dịch vụ khác giới hạn.
- Cloudflare Gateway cung cấp khả năng phân giải DNS nhanh chóng và ổn định nhờ hạ tầng toàn cầu của Cloudflare.
- Mặc dù DNS 1.1.1.1 của Cloudflare mặc định không hỗ trợ ECS, Cloudflare Gateway cho phép bật chức năng này. Tại Việt Nam, việc bật ECS có thể giúp định tuyến dịch vụ CDN tốt hơn.
- Hỗ trợ IPv4, IPv6, DoH, và DoT, với cách triển khai đơn giản trên nhiều thiết bị khác nhau.
- Hỗ trợ cả danh sách chặn và cho phép, giúp quản lý bộ lọc dễ dàng hơn. Cloudflare cho phép chặn miễn phí tới 300.000 domain, đủ cho hầu hết các nhu cầu.
- Tự động cập nhật bộ lọc theo lịch trình hàng tuần.
- Có khả năng mở khóa một số domain như medium.com bị chặn nhầm bởi các nhà mạng.
- Cung cấp nhiều cấu hình bảo mật từ Cloudflare Zero Trust.
Các bước cấu hình sẽ được viết lại từ bài giới thiệu gốc, chỉ điều chỉnh tên và đường dẫn cho phù hợp với thời điểm tháng 10 năm 2025, đảm bảo đơn giản nhất để mọi người đều có thể thực hiện.
Cá nhân tôi chỉ sử dụng DoH vì nó đủ bảo mật, hỗ trợ tốt trên trình duyệt và có cấu hình đơn giản. Nếu bạn chỉ cần DNS để chặn quảng cáo, bạn có thể nhấn vào liên kết cấu hình DoH.
Cấu hình
Để cài đặt một cách dễ dàng và tránh sự nhầm lẫn, hãy tạo tài khoản mới trên Github và Cloudflare. Tất cả các thiết lập liên quan đến chặn quảng cáo sẽ được thực hiện thông qua hai tài khoản này.
- Fork dự án
cloudflare-gateway-pihole-scripts
- Tùy chỉnh tên cho repository theo ý thích, sau đó nhấn vào
Create fork
- Truy cập vào Cloudflare Zero Trust
- Lựa chọn tài khoản của bạn
- Đặt tên cho nhóm theo ý muốn, sau đó chọn
Next
- Chọn gói miễn phí (
Free
)
- Chọn
Cancel and exit
để bỏ qua bước nhập thẻ xác nhận - Quay lại Cloudflare Zero Trust
- Khi đó, bạn sẽ thấy màn hình
Welcome aboard!
- Truy cập nhanh vào URL này hoặc chọn thủ công
Gateway
->DNS locations
->Add a location
- Chi tiết DNS location:
- Tên địa điểm: đặt tên theo ý muốn
- Bật DNS over HTTPS (DoH)
- Chọn
Enable EDNS client subnet
- Đánh dấu
Set as Default DNS Location
- Sau đó, chọn
Continue
- Tiếp tục nhấn
Continue
- Cuối cùng, nhấn
Done
để hoàn tất.
Cấu hình
- Bước hoàn tất việc tạo DNS location đã được thực hiện thành công, và bây giờ chúng ta đã có cấu hình DNS over HTTPS (DoH) với định dạng
https://xxxxxxxxx.cloudflare-gateway.com/dns-query
.
Chặn quảng cáo khi dùng qua Gateway DNS location
- Lấy Account ID của Cloudflare
Truy cập vào trang quản lý hoặc nhấp vào biểu tượng Cloudflare ở góc trên bên trái. Bạn sẽ thấy một chuỗi ký tự như 586a12870xxx573bd1cde52b6278970c
, đây chính là Account ID của tài khoản.
- Tạo Cloudflare API Token
- Truy cập nhanh vào URL này hoặc thực hiện thủ công bằng cách nhấp vào biểu tượng góc phải ->
Profile
->API Tokens
->Create Token
.
- Tại mục
Create Custom Token
, nhấp vàoGet started
.
- Đặt tên cho
Token name
theo ý muốn. - Quyền truy cập:
- Account -> Zero Trust -> Read
- Account -> Zero Trust -> Edit
- Nhấp vào
Continue to summary
.
- Nhấp vào
Create Token
.
Bạn sẽ nhận được một giá trị như 6xfDjxD81Wb5xxxxxxxxx_4tZEJmGLT6a37
, đây là API Token vừa được tạo. Hãy nhấp vào Copy
để lưu lại chuỗi này, vì nếu làm mới trình duyệt, thông tin sẽ không còn hiển thị nữa.
Cấu hình cho dự án trên Github
- Trở lại dự án
cloudflare-gateway-pihole-scripts
trên tài khoản Github cá nhân của bạn.
- Truy cập vào menu
Settings
, chọnSecrets and variables
->Actions
->Variables
, sau đó nhấnNew repository variable
.
- Name:
BLOCKLIST_URLS
(tên của danh sách chặn quảng cáo) - Value: Nhập các đường dẫn bộ lọc, mỗi bộ lọc cách nhau bằng dấu
Enter
.- Các bộ lọc cơ bản như
AdGuard DNS filter
,AdGuard DNS Popup Hosts filter
,VNM: ABPVN List
là đủ. Bạn có thể thêm bộ lọc cá nhân nếu cần chặn thêm các domain không có trong danh sách. - Để tạo bộ lọc cá nhân, truy cập vào dự án, tạo một tệp tin
.txt
(cấu trúc mẫu), sau đó sao chép URL Raw vào.
- Các bộ lọc cơ bản như
https://adguardteam.github.io/HostlistsRegistry/assets/filter_1.txt
https://adguardteam.github.io/HostlistsRegistry/assets/filter_59.txt
https://adguardteam.github.io/HostlistsRegistry/assets/filter_16.txt
https://raw.githubusercontent.com/bibicadotnet/AdGuard-Home-blocklists/refs/heads/main/byme.txt
- Nhấp
Add variable
.
Tiếp tục tạo một New repository variable
khác.
- Name:
ALLOWLIST_URLS
(tên của danh sách bỏ chặn) - Value: Nhập các đường dẫn bộ lọc, mỗi bộ lọc cách nhau bằng dấu
Enter
.- Danh sách này dùng để loại trừ các domain nếu chúng bị chặn nhầm bởi
BLOCKLIST_URLS
. - Tạo bộ lọc cá nhân bằng cách vào dự án, tạo một tệp
.txt
(cấu trúc mẫu), sau đó sao chép URL Raw vào.
- Danh sách này dùng để loại trừ các domain nếu chúng bị chặn nhầm bởi
- Nhấp
Add variable
.
- Chuyển sang tab
Secrets
->New repository secret
.
- Phần
Name
vàSecret
hãy thêm đủ 4 repository secret theo bảng sau:
Name | Secret |
---|---|
CLOUDFLARE_API_TOKEN |
Nhập API Token đã lấy ở bước trước |
CLOUDFLARE_ACCOUNT_ID |
Nhập Account ID đã lấy ở bước trước |
CLOUDFLARE_ACCOUNT_EMAIL |
Email đăng ký Cloudflare |
CLOUDFLARE_LIST_ITEM_LIMIT |
Nếu dùng gói miễn phí, nhập 300000 |
- Kích hoạt
Github Actions
.
Cấu hình cho dự án trên Github
- Truy cập vào tab
Actions
, sau đó nhấp vàoI understand my workflows, go ahead and enable them
.
- Trong phần
Actions
, hãy chọnNew workflow
.
- Tiếp tục bấm vào
set up a workflow yourself
.
- Sao chép nội dung mã từ tệp auto_update_github_action.yml và dán vào, sau đó nhấn
Commit changes...
. - Cron mặc định được thiết lập để chạy vào thứ 2 hàng tuần nhằm tự động cập nhật danh sách bộ lọc. Bạn có thể thay đổi dòng 5 thành
- cron: "0 17 * * *"
để chạy hàng ngày vào lúc 0 giờ sáng theo giờ Việt Nam.
- Sau khi
Commit changes
, workflow sẽ tự động chạy lần đầu tiên và bạn sẽ thấy xuất hiện workflowUpdate Filter Lists
.
- Nhấp vào để xem logs, bạn sẽ thấy các thông tin cơ bản về bộ lọc đang hoạt động. Theo cấu hình trên, nó sẽ chặn khoảng 228.930 domain, vẫn nằm dưới ngưỡng 300.000 mà Cloudflare cung cấp miễn phí.
- Quay lại Cloudflare Zero Trust, chuyển đến Gateway -> Firewall policies, bạn sẽ thấy bộ lọc từ Github đã được chuyển sang Cloudflare.
Cuối cùng, để mở chặn medium.com khi sử dụng tại các nhà mạng Việt Nam, thực hiện như sau:
- Tại
Gateway
->Firewall policies
, trong tabDNS
, chọnDNS policies
và tạo một rule mới.
- STEP 1: Đặt Policy name và Description theo ý muốn.
- STEP 2: Thiết lập Traffic
- Selector: chọn
Domain
- Operator: chọn
matches regex
- Value:
medium.com
- Nhấn vào
Or
để thêm tùy chọn mới - Selector: chọn
Domain
- Operator: chọn
matches regex
- Value:
www.medium.com
- Selector: chọn
- STEP 3:
- Action: chọn
Override
.
- Action: chọn
Đánh giá hiệu suất Cloudflare Gateway – Vị trí DNS
- Override Hostname: Nhập một tên miền bất kỳ đang sử dụng Cloudflare Proxy, chẳng hạn như
bibica.net
. Sau đó, nhấn tạo chính sách.
Tắt Gateway Logging
Sau khi hoàn tất cài đặt và chạy thử nghiệm trong vài ngày, bạn nên tắt ghi nhật ký để tránh phiền toái. Điều này có thể được thực hiện nhanh chóng qua URL được cung cấp. Về mặt lý thuyết, điều này cũng giúp DNS hoạt động nhanh hơn chút.
- Kiểm tra sơ bộ: Đảm bảo không có lỗi xảy ra.
- VNPT: DNS sử dụng Cloudflare tại Hồng Kông, không có gì đặc biệt.
- Để dễ hình dung, DoH này tương tự như DoH của Cloudflare là
https://cloudflare-dns.com/dns-query
, tuy nhiên, đã kích hoạt EDNS Client Subnet.
Theo giải thích từ Cloudflare, tiêu đề EDNS Client Subnet trên 1.1.1.1 được tắt mặc định để tăng cường quyền riêng tư cho người dùng. Dù vậy, việc bật hay tắt tính năng này không thực sự tạo ra sự khác biệt lớn, vì Google DNS 8.8.8.8 luôn bật EDNS và đã được sử dụng rộng rãi trong nhiều năm mà không có khiếu nại gì. Cá nhân chỉ hơi tiếc vì trên mạng VNPT đang dùng, chỉ định tuyến ra Hà Nội thay vì Hồ Chí Minh; nếu vào server Hồ Chí Minh, có thể ping sẽ giảm xuống còn 4ms-8ms.
- Theo dnscheck.tools, tốc độ trung bình vào khoảng ~ 72ms, không quá ấn tượng.
Về hiệu suất phân giải DNS thực tế, khá tương đồng với 1.1.1.1, nghĩa là nếu ai đó truy cập một domain trước, cache sẽ được lưu lại và người truy cập sau sẽ vào nhanh hơn vì không cần kiểm tra lại. Tuy nhiên, Cloudflare dường như xóa cache khá nhanh, khoảng ~ 300s, vì vậy, nếu dãy DNS ít người dùng, hiệu năng có thể không tối ưu.
Khi sử dụng Cloudflare EDNS và truy cập vào trang sử dụng nhiều dịch vụ của Cloudflare, tốc độ truy cập nhanh là điều hiển nhiên.
Việc quản lý các rule khi thêm hoặc xóa nhiều bộ lọc cũng cần chú ý. Nếu domain trùng lặp, nó sẽ bị loại bỏ để tối ưu danh sách lọc. Tuy nhiên, có một điều kỳ lạ là khi dùng rule ||coccoc.com^
, mọi domain liên quan đến coccoc.com
đều bị chặn tốt, ngoại trừ www.coccoc.com
. Điều này không quá quan trọng, vì bạn có thể thêm các domain bị bỏ sót vào danh sách.
Về lý thuyết, Adguard Home với VPS tại Singapore hoặc Việt Nam sẽ có hiệu năng tốt hơn một chút, nhưng chi phí đầu tư cho VPS, cùng với thời gian cài đặt và bảo trì, có thể không đáng kể, đặc biệt là về tính ổn định.
Cấu hình DNS-over-HTTPS cho các trình duyệt
Việc cấu hình DoH Cloudflare Gateway trong bài viết này chủ yếu dành cho các trình duyệt di động như Chromium, Cốc Cốc, và Edge dùng cho mục đích cá nhân. Để thực hiện, bạn chỉ cần chạy file .reg
kèm theo.
- Trong trường hợp bạn muốn sử dụng DoH Cloudflare Gateway để chặn một số quảng cáo cơ bản:
- Vào Settings → Privacy and security → Security
- Kéo xuống phần “Advanced”
- Tìm Use secure DNS → Kích hoạt
- Chọn With Custom
- Nhập:
https://iabucttpma.cloudflare-gateway.com/dns-query
Bạn có thể tìm thấy nhiều endpoint DoH miễn phí khác tại đây.
Cấu hình DNS-over-HTTPS cho iOS, iPadOS
Trên iOS và iPadOS, bạn có thể tải xuống profile đã được chuẩn bị sẵn và cài đặt tương tự như NextDNS. Qua thử nghiệm, iOS và iPadOS hoạt động hiệu quả tương tự NextDNS mà tôi đã sử dụng trước đó. Điều này cho phép tùy chỉnh các domain cần chặn, rất phù hợp trên iOS và iPadOS, bởi việc chặn quảng cáo trên iPhone và iPad thường phức tạp hơn trên Windows PC.
Cấu hình DNS-over-HTTPS trên Windows
- Lưu ý: Cấu hình cho toàn bộ hệ thống có thể không đáng kể nếu so sánh với rủi ro chặn nhầm dịch vụ đang chạy.
Để chạy DoH cho toàn bộ hệ thống trên Windows, cách đơn giản nhất là quản lý thông qua YogaDns.
- Cài đặt và bỏ qua tùy chọn kiểm tra cập nhật cũng như chạy khi khởi động Windows
- Kích hoạt license:
N2H6F-S2T8V-4SM0Q-UD560-32OFL
, chọn tùy chọn All users on this computer - Sau khi kích hoạt, đóng tất cả cửa sổ YogaDNS đang chạy (bao gồm cả trên taskbar)
- Bật YogaDNS Service Manager
- Cài đặt → Nhập từ file → Bắt đầu
- Khi thấy các log đang xử lý, bạn có thể thoát.
Từ thời điểm này, YogaDns sẽ chạy ẩn trên Windows, và các ứng dụng sẽ tự động sử dụng DoH.
Kết luận
Cloudflare Gateway kết hợp với CGPS đem lại một giải pháp toàn diện cho việc chặn quảng cáo tại cấp độ DNS. Đây là một lựa chọn mạnh mẽ, ổn định và miễn phí, cho phép người dùng tùy chỉnh bộ lọc theo yêu cầu cá nhân và tự động cập nhật. Sau khi cấu hình, hệ thống có thể vận hành trong nhiều năm mà không cần lo lắng về vấn đề bảo trì hoặc sự cố hệ thống. Tuy nhiên, một điểm cần lưu ý là URL sử dụng khá khó nhớ nếu nhập thủ công.
Về tính ổn định, từ khi tôi biết đến dịch vụ này, chỉ có WARP đôi lúc gặp vấn đề về tốc độ, trong khi DNS 1.1.1.1 thì chưa bao giờ gặp sự cố, tạo sự tin tưởng khi sử dụng hàng ngày. Cloudflare Gateway cũng sử dụng gần như cùng một hệ thống, đảm bảo độ ổn định cao.
Bài viết này có thể hơi dài đối với những ai chưa quen thuộc với Github hay Cloudflare, nhưng nếu đã có chút hiểu biết, việc cài đặt sẽ trở nên đơn giản hơn rất nhiều.