download Serverless Edge DNS Gateway – chặn quảng cáo, sửa lỗi ECS Việt Nam và điều hướng CDN với Cloudflare Pages

  • Người tạo chủ đề Người tạo chủ đề bibica
  • Ngày bắt đầu Ngày bắt đầu

bibica

Senior Member
Serverless Edge DNS Gateway là dịch vụ chuyển tiếp DNS-over-HTTPS (DoH) trên hạ tầng Cloudflare, với tính năng chặn quảng cáo, tối ưu hóa ECS và chuyển hướng DNS, khá tương đồng với Cloudflare Gateway, nhưng Serverless Edge DNS Gateway cài đặt, quản lý đơn giản, tính năng đầy đủ hơn

Demo​

Trang demo: Serverless Edge DNS Gateway (https://serverless-edge-dns-gateway.bibica.net/)

Tính năng nổi bật​

  • Mức độ sử dụng miễn phí: chạy hoàn toàn trên gói Free của Cloudflare Pages với hạn mức 100,000 requests mỗi ngày. Với mức tiêu thụ trung bình 200 – 4000 requests/thiết bị/ngày, có thể sử dụng 10-20 thiết bị trên cùng một tài khoản (thậm chí 100-200 thiết bị nếu dùng thông thường)
  • Tối ưu hóa vị trí địa lý: tự động chèn EDNS Client Subnet (ECS) giúp các CDN Akamai, CloudFront, Fastly, BunnyCDN, Gcore ... điều hướng đến máy chủ gần nhất hiệu quả hơn
  • DNS redirect/rewrite: công cụ ép định tuyến domain A sang domain B bằng bản ghi CNAME, giúp tùy chỉnh máy chủ CDN mong muốn (Bilibili, TikTok, Medium…)
  • Chặn quảng cáo: sử dụng các bộ lọc AdGuard, ABPVN, 1Hosts … được cập nhật tự động mỗi giờ (có thể tùy chỉnh riêng bộ lọc nếu cần)
  • Độ tin cậy cao với hệ thống dự phòng:
    • Primary/Fallback: tự động chuyển sang máy chủ dự phòng nếu máy chủ chính gặp sự cố
    • Geo-Bypass: tự động phát hiện kết quả bị chặn địa lý (trả về 127.0.0.1 khi bật ECS Việt Nam), phân giải lại qua Mullvad DNS sẽ giải quyết được vấn đề này (nikke-en.com)
  • Bộ lọc truy vấn sớm (Edge Filtering): có thể bỏ các truy vấn không cần thiết (ANY, AAAA, PTR, HTTPS) ngay tại Edge để tiết kiệm tài nguyên và tăng tốc độ phản hồi.
  • Lớp bảo vệ TLD nội bộ: ngăn rò rỉ các domain nội bộ (như .local, .lan) ra môi trường internet bằng cách trả về NXDOMAIN ngay lập tức.
  • Tên miền riêng sử dụng Mullvad Upstream: dùng trên các domain cụ thể khi muốn hoàn toàn ẩn danh (không gửi ECS), các domain github định tuyến qua Mullvad sẽ hiệu quả hơn
  • Hỗ trợ custom domain: dễ dàng gắn tên miền riêng để có địa chỉ DNS ngắn gọn, chuyên nghiệp, có thể sử dụng nhiều tài khoản Cloudflare khác nhau để tăng hạn mức mà vẫn dùng được tên miền tùy chỉnh (đang áp dụng cho doh.bibica.net)
  • Tự động tạo trang hướng dẫn sử dụng và file cấu hình .mobileconfig (áp dụng cho các thiết bị chạy iOS/iPadOS)

Lý do tôi tạo ra Serverless Edge DNS Gateway​

Dùng Cloudflare Gateway tạo DNS location có 1 vấn đề khá khó chịu, khi bạn bật ECS, Cloudflare dùng cụm server gần nhất làm IP subnet, đôi khi nó định tuyến sai, user ở Hồ Chí Minh lại dùng ECS tại Hà Nội, Serverless Edge DNS Gateway khắc phục vấn đề này bằng cách sử dụng IP của người dùng làm ECS

Zxqy83xN
  • Nhờ cách này, ECS trên Serverless Edge DNS Gateway trả về, chính xác tương tương Google DNS (một trong các dịch vụ hỗ trợ CDN qua ECS tốt nhất)
Tính năng thêm vào là điều hướng DNS (DNS redirect/rewrite) giúp tùy chỉnh CNAME theo ý muốn
  • Ví dụ: www.bilibili.tv trả về tùy lúc CNAME www.bilibili.tv.w.cdngslb.com hoặc a1346.v.akamai.net
  • Serverless Edge DNS Gateway có thể ép www.bilibili.tv luôn sử dụng www.bilibili.tv.w.cdngslb.com
  • Hoặc ở tình huống đặc thù hơn, truy cập domain medium.com nhưng cần kết quả trả về theo domain rocket.net (nhà mạng chặn nhẹ medium.com sẽ vào được)
Trên các domain hay dùng, nếu hỗ trợ nhiều CDN, bạn có thể tự tùy chỉnh lại CNAME về dịch vụ CDN tối ưu, đây là tính năng redirect mình biết tới khi dùng Mosdns-x, dùng quen rồi không có thì hơi khó chịu

Khuyết điểm​

  • Thiếu DoT là khuyết điểm lớn nếu bạn dùng Android, cá nhân dùng iOS nên bỏ qua vấn đề này, phần vì dùng Cloudflare Pages làm proxy, chỉ có thể chạy được DoH, không có cách xử lý
  • Vì phải đi qua 1 tầng proxy (kèm 1001 cơ chế lọc, check, chặn), sẽ chậm hơn (10ms - 20ms) so với chạy trực tiếp qua Cloudflare Gateway, thực tế sử dụng, kiểm tra qua dnscheck.tools đôi lúc xuống được ~ 40ms thì không có gì để phàn nàn
  • Lệ thuộc hoàn toàn vào cơ sở hạ tầng từ Cloudflare, Github, 2 cụ này mà sập thì oẳng luôn :]]

Hướng dẫn cài đặt​

Để việc cài đặt đơn giản, tránh nhầm lẫn, nên tạo mới tài khoản GithubCloudflare, có 100.000 request miễn phí mỗi ngày, không ảnh hưởng tới tài khoản chính

1. Fork Repository​

  1. Fork dự án serverless-edge-dns-gateway về tài khoản GitHub của bạn
  2. Truy cập tab Actions trong repository bạn vừa fork và nhấn I understand my workflows, go ahead and enable them
  3. Chọn và Enable thủ công 2 workflows: Update DNS BlocklistsDelete old workflow runs

2. Triển khai lên Cloudflare Pages​

  1. Vào Workers & Pages > Pages > Create application > Connect to Git (link vào nhanh)
  2. Chọn repository bạn vừa Fork.
  3. Build Settings: mặc định (không cần điền hay chỉnh sửa gì).
  4. Nhấn Save and Deploy.
Lúc này, vào thẳng domain tạo ra bởi Cloudflare Pages, có thể dùng được ngay

Việc sử dụng Serverless Edge DNS Gateway tương tự như mọi dịch vụ DoH khác, cấu hình .mobileconfig trên Apple (iOS/macOS) được tự động tạo ra, download về cài đặt bình thường

Cấu hình​

Các thông số cấu hình được tối ưu sẵn theo mặc định, bạn nào muốn thay đổi cấu hình, tùy chỉnh danh sách bộ lọc … thì mới cần đọc phần này, dùng thông thường cài đặt dùng luôn là được
  • Các cài đặt nằm ở phần đầu của file functions/[[path]].js
Nếu rỗi rãi, nên tự tạo DNS locations riêng trong tài khoản Cloudflare của mình (nhớ bật tùy chọn ECS) rồi thay vào UPSTREAM_PRIMARY , UPSTREAM_FALLBACK, tự quản trị sẽ an toàn hơn, còn lười thì dùng mặc định cũng được

Tham số / Cấu hình
Giá trị
Mô tả
BLOCK_AAAAfalseChặn bản ghi IPv6 (buộc định tuyến qua IPv4).
BLOCK_HTTPSfalseChặn truy vấn Type 65 (giúp tăng tốc độ phân giải).
BLOCK_ANYfalseChặn các truy vấn ANY tiêu tốn tài nguyên.
BLOCK_PTRfalseChặn truy vấn DNS ngược.
BLOCK_PRIVATE_TLDtrueChặn các domain nội bộ hoặc router.
ECS_INJECTION_ENABLEDtrueBật ECS Injection (cần thiết để trả về đúng CDN).

Bật tắt các tính năng tùy nhu cầu sử dụng, ví dụ cần tắt IPv6 thì BLOCK_AAAA sửa lại thành true
  • Nếu chỉ sử dụng IPv4, có thể tắt ANY, AAAA, PTR, HTTPS, giúp giảm lượng request không cần thiết, lười thì cứ để mặc định
DEBUG_ENABLED mặc định tắt, khi mới cài đặt lần đầu, có thể bật lên, giúp kiểm tra các cấu hình tại /debug, xem các giá trị trả về có đúng như cấu hình không

Quản lý quy tắc (Rules)​

Các quy tắc nằm trong thư mục rules. Khi bạn thực hiện thay đổi và commit lên GitHub, Cloudflare Pages sẽ tự động đồng bộ và áp dụng cấu hình mới (có thể vào /debug kiểm tra sau vài phút)

Các quy tắc chi tiết:
  • blocklists.txt / allowlists.txt: được cập nhật tự động mỗi giờ qua update_lists.sh.
    • Cơ chế: nếu một domain nằm trong allowlists.txt, sẽ luôn được cho phép kể cả khi có trong blocklists.txt (tránh việc các bộ lọc blocklists khác chặn nhầm).
    • Quản lý theo domain chính xác điền vào, ví dụ trong blocklists.txt, có app.adsoctopus.com, sẽ chặn app.adsoctopus.com (không chặn adsoctopus.com)
Cách cấu hình: thay đổi các URL trong lệnh curl bên trong file update_lists.sh để thêm hoặc bớt các bộ lọc blocklists/allowlists

IEV1BDyk

Chú ý: không sửa trực tiếp 2 file blocklists.txt / allowlists.txt có sẵn, hãy tạo mới các file .txt trong dự án tại Github, rồi thêm đường dẫn vào danh sách update_lists.sh, cần chỉnh gì sửa gì sẽ ở các file .txt mới này

Sử dụng hàng ngày, thấy cần chặn thêm cái gì, hoặc thấy chặn nhầm cái gì, thêm vào danh sách tương ứng, sử dụng 1-2 tuần sẽ có bộ lọc ổn định
  • private_tlds.txt: các domain nội bộ hoặc URL router của riêng bạn
    • Cơ chế: local sẽ chặn domain.local, sub.domain.local ...
    • Cách cấu hình: thêm, sửa trực tiếp, mỗi domain 1 dòng
private_tlds.txt quản lý cách chặn rất rộng, ví dụ nếu thêm vào tk sẽ chặn tất cả domain .tk, dùng cơ chế này để chặn các domain rác cũng được
  • redirect_rules.txt: danh sách điều hướng DNS (DNS redirect/rewrite)
    • Định dạng: domain-nguon domain-dich (mỗi rule sẽ là 1 dòng, phân cách bởi khoảng cách)
    • Ví dụ: www.bilibili.tv www.bilibili.tv.w.cdngslb.com
    • -> www.bilibili.tv chỉ sử dụng kết quả trả về từ www.bilibili.tv.w.cdngslb.com
    • Cách cấu hình: thêm, sửa trực tiếp, mỗi domain 1 dòng
Chế độ DNS redirect/rewrite hiếm khi cần tùy chỉnh, vì CDN sẽ tự điều chỉnh dựa vào ECS, ECS chính xác thì kết quả trả về thường chính xác, chế độ này thường dùng trên 1 số domain đặc thù, kiểu medium.com rocket.net giúp user dùng nhà mạng tại VN truy cập được vào medium.com, đôi lúc nhà mạng của bạn gặp vấn đề với 1 dịch vụ CDN nào đó, có thể tự định tuyến sang CDN khác cho phù hợp
  • mullvad_upstream.txt: domain bắt buộc phân giải qua Mullvad DNS
    • Cách cấu hình: thêm, sửa trực tiếp, mỗi domain 1 dòng
Vài domain hơi đặc thù như github.com, vì 1 số lý do không giải thích được, phân giải qua Cloudflare hay Google ... đôi lúc nó trả về server đang bị sập, dùng Mullvad DNS thì không gặp tình huống này ... hoặc trên 1 số domain check DNS như dnscheck.tools, nếu bạn không muốn lộ ECS, thêm domain đó vào mullvad_upstream.txt
  • Bạn có thể fork dự án gốc, sửa lại các bộ lọc, rule cho phù hợp với nhu cầu cá nhân, team, nhóm, sau đó nếu thành viên nào trong nhóm cần dùng, nói họ fork dự án của bạn, với các tùy chỉnh có sẵn, sẽ rất nhanh
Sau khi sửa tại Github, dự án sẽ tự đồng bộ sang Cloudflare Pages, tự có tác dụng, không cần làm gì thêm

Bảo mật​

Serverless Edge DNS Gateway chạy qua DoH, nhận kết quả từ Cloudflare Gateway / Mullvad, lọc kết quả (chặn quảng cáo, redirect/rewrite) qua Cloudflare Pages, sau đó chuyển kết quả cuối tới User, toàn bộ quá trình đều trên cơ sở hạ tầng Cloudflare, mọi thứ đều được Cloudflare bảo vệ, không cần làm gì thêm

Cloudflare Requests​

VRaUvWiG

Cloudflare tính request Functions rất lạ, cá nhân dùng 3 thiết bị, kiểm tra trong 24h, trung bình dùng < 300 request, trông có vẻ như Cloudflare Functions chỉ tính request mỗi khi kết nối tới DNS, còn các request phân giải từ DNS thì không tính

Theo cách tính request như này, 1 tài khoản miễn phí thậm chí có thể đáp ứng 100-200 người dùng cùng lúc (300-600 thiết bị) mà vẫn không lo chạm tới giới hạn

Custom domain​

Cá nhân đề xuất sử dụng domain riêng, không dùng domain miễn phí *.pages.dev, vì không chắc các domain này có bị Cloudflare giới hạn khi chạy 24/24/365 liên tục không

f70vHQaz

Bạn có thể mua các subdomain Việt Nam, dạng .name.vn, .io.vn … chi phí tầm 20.000 vnđ / 1 năm, dùng cho thoải mái, đỡ phải kiếm các dịch vụ miễn phí domain mà không biết lúc nào lăn quay ra sập, hoặc có thể vào tld-list.com, xem domain nào gia hạn rẻ nhất thì dùng

Lười quá dùng domain miễn phí *.pages.dev cũng được, có điều cá nhân không dùng, nên không chắc chạy hàng ngày có ổn định không?

Bonus: dùng cùng lúc nhiều tài khoản Cloudflare Pages​

Phần này nói thêm, bạn nào chạy hàng ngày mà thấy hết request hãy quan tâm :]]

Mặc định Serverless Edge DNS Gateway dùng khá ít request, dùng cá nhân hoặc < 10 thiết bị cá nhân nghĩ thoải mái, nếu nhu cầu dùng nhiều thiết bị hơn, hoặc chia sẽ cho team, nhóm này nọ .... có thể tạo nhiều tài khoản Cloudflare (Github) miễn phí, cài đặt như thông thường, sau đó custom domain muốn dùng vào từng tài khoản Cloudflare Pages, mỗi tài khoản sẽ có 1 URL tương tự như sau
Mã:
serverless-edge-dns-gateway-0ei.pages.dev
serverless-edge-dns-gateway-tui.pages.dev
serverless-edge-dns-gateway-zzz.pages.dev
......
serverless-edge-dns-gateway-09h.pages.dev
Tạo 1 cron chạy qua Cloudflare Pages, nội dung mẫu ở đây
  • Vào API Tokens tạo 1 token với quyền Zone.DNS, điền vào CF_API_TOKEN
  • Vào phần quản trị domain sẽ thấy Zone ID, thay vào CF_ZONE_ID
  • Để lấy giá trị CF_RECORD_ID cho domain cần đổi, ví dụ muốn lấy ID cho domain doh.bibica.net, chạy lệnh bên dưới
Thay CF_ZONE_ID, CF_API_TOKEN, doh.bibica.net bằng các thông tin của bạn
Mã:
curl -s -X GET "https://api.cloudflare.com/client/v4/zones/CF_ZONE_ID/dns_records?name=doh.bibica.net" \
     -H "Authorization: Bearer CF_API_TOKEN" \
     -H "Content-Type: application/json" | jq -r '.result[0].id'
  • CF_RECORD_ID sẽ có định dạng kiểu b7f08f1db45f1abb23cc71c04bfc9782
Xong xuôi deploy cron này vào Cloudflare Worker, tạo Trigger Events cho chạy sau 5 phút hoặc 1h gì tùy thích
  • Rule hoạt động rất đơn giản, nó kiểm tra xem CNAME đang dùng là gì, rồi lấy CNAME tiếp theo có trong danh sách, cứ tuần tự đổi
Thành công! Vừa đổi từ [serverless-edge-dns-gateway-0ei.pages.dev] sang -> [serverless-edge-dns-gateway-tui.pages.dev]

Góc nhờ vã, báo cáo lỗi​

Serverless Edge DNS Gateway thiết kế đơn giản tuyệt đối để hạn chế mọi lỗi có thể phát sinh, các lỗi gặp phải trong gần 2 tháng thử nghiệm đã xử lý rồi

Bạn nào sử dụng hàng ngày, gặp vấn đề gì, có thể comment trực tiếp tại topic này, vui lòng giải thích tình huống cụ thể, vì DNS rất khó bắt bệnh và giả lập tình huống lỗi, cá nhân khi chạy mosdns-x, khi coi các video youtube có thời gian 1-3 ngày, cứ coi tầm 5-10h, thi thoảng youtube sẽ đơ, 5-6s sau mới buffer, mà coi video ngắn, thời lượng 30-60 phút thì không bao giờ gặp tình huống này ... báo cáo lại tác giả, họ cũng không hiểu vì sao, bản thân họ sử dụng không gặp tình huống như thế .... hay khi chạy trên iOS/iPadOS không thấy vấn đề gì, mà chạy Windows lại thi thoảng ngáo ngáo ... nên nếu gặp vấn đề gì, cố gắng nói chi tiết tình huống sử dụng, để tôi có thể giả lập lại tình huống đó

Kết luận

Serverless Edge DNS Gateway do chạy trên Cloudflare Pages nên nhiều thứ thiết kế khá ngu học, mỗi khi chạy “lần đầu”, phải load 3MB - 5MB danh sách bộ lọc, tổng thể tốc độ ổn định, trung bình ~50ms – 80ms, sử dụng thực tế không có gì phàn nàn

F7LF7ObH

Về mặt lý thuyết, chạy qua Cloudflare Pages độ ổn định sẽ kém hơn so với chạy trực tiếp qua Cloudflare DNS / Google DNS / Cloudflare Gateway, vì trung bình 1 năm Cloudflare Pages sẽ ngáo sảng, sập vài phút (cá biệt sau mỗi 3-5 năm sẽ có thời điểm Cloudflare sập siêu nặng, thậm chí vài giờ), có điều nếu so với chuyện bạn tự build qua VPS, tự quản trị, tự bảo mật ... độ ổn định khi chạy qua Serverless Edge DNS Gateway thường sẽ tốt hơn

So với việc cấu hình, cài đặt cloudflare-gateway-pihole-scripts trên Cloudflare Gateway, Serverless Edge DNS Gateway cấu hình, cài đặt nhanh hơn, tính năng mạnh hơn, quan trọng nhất ECS trả về chính xác ngang ngửa Google DNS

Bới ra để phàn nàn, là nó chạy qua 1 tầng proxy (Cloudflare Pages), nên chỉ chạy qua được DoH, không hỗ trợ DoT và IP, dùng trên Android cấu hình hơi lằng nhằng, và không cấu hình IP được trên router đời cũ, trên Windows/Mac/iOS/iPadOS cấu hình trực tiếp, sẽ hiệu quả hơn

Cá nhân đang duy trì thèng doh.bibica.net trên logic gốc của Serverless Edge DNS Gateway, dùng 1-2 tháng nay, tổng thể mọi thứ ổn định, không có gì để phàn nàn

Bài giới thiệu, giải thích hơi dài dòng, user thông thường, tạo tài khoản, Fork Repository -> Triển khai lên Cloudflare Pages, trung bình 5-10 phút là có thể sử dụng được rồi
 
Sửa lần cuối:
Dùng cái này để vượt mấy trang nhà mạng chặn được không các b mỗi lần dùng phải bật vpn hay 1 1 1 1 tốc độ mạng ảnh hưởng quá. Tôi hay truy cập mấy trang lậu của bọn tàu thì dùng mấy cái vpn kia thỉnh thoảng bị block do spam suốt
 
Dùng cái này để vượt mấy trang nhà mạng chặn được không các b mỗi lần dùng phải bật vpn hay 1 1 1 1 tốc độ mạng ảnh hưởng quá. Tôi hay truy cập mấy trang lậu của bọn tàu thì dùng mấy cái vpn kia thỉnh thoảng bị block do spam suốt
Domain bị nhà mạng chặn là gì?
 
Serverless Edge DNS Gateway là dịch vụ chuyển tiếp DNS-over-HTTPS (DoH) chạy trên hạ tầng Edge toàn cầu của Cloudflare Pages, với tính năng chặn quảng cáo, tối ưu hóa ECS và chuyển hướng DNS, khá tương đồng với Cloudflare Gateway, nhưng Serverless Edge DNS Gateway cài đặt, quản lý đơn giản, tính năng đầy đủ hơn

Tính năng nổi bật​

  • Mức độ sử dụng miễn phí: chạy hoàn toàn trên gói Free của Cloudflare Pages với hạn mức 100,000 requests mỗi ngày. Với mức tiêu thụ trung bình 200 – 4000 requests/thiết bị/ngày, có thể sử dụng 10-20 thiết bị trên cùng một tài khoản (thậm chí 100-200 thiết bị nếu dùng thông thường)
  • Tối ưu hóa vị trí địa lý: tự động chèn EDNS Client Subnet (ECS) giúp các CDN Akamai, CloudFront, Fastly, BunnyCDN, Gcore điều hướng đến máy chủ gần nhất hiệu quả hơn
  • Điều hướng DNS (DNS redirect/rewrite): công cụ ép định tuyến domain A sang domain B bằng bản ghi CNAME, giúp tùy chỉnh cụm máy chủ CDN mong muốn (Bilibili, TikTok, Medium…)
  • Chặn quảng cáo: sử dụng các bộ lọc thông dụng như AdGuard, ABPVN, 1Hosts … được cập nhật tự động mỗi giờ (có thể tùy chỉnh riêng bộ lọc nếu cần)
  • Độ tin cậy cao với hệ thống dự phòng:
    • Primary/Fallback: tự động chuyển sang máy chủ dự phòng nếu máy chủ chính gặp sự cố
    • Geo-Bypass: tự động phát hiện kết quả bị chặn địa lý (trả về 127.0.0.1 khi bật ECS Việt Nam), phân giải lại qua Mullvad DNS sẽ giải quyết được vấn đề này (nikke-en.com)
  • Bộ lọc truy vấn sớm (Edge Filtering): có thể bỏ các truy vấn không cần thiết (ANY, AAAA, PTR, HTTPS) ngay tại Edge để tiết kiệm tài nguyên và tăng tốc độ phản hồi.
  • Lớp bảo vệ TLD nội bộ: ngăn rò rỉ các domain nội bộ (như .local, .lan) ra môi trường internet bằng cách trả về NXDOMAIN ngay lập tức.
  • Tên miền riêng sử dụng Mullvad Upstream: dùng trên các domain cụ thể khi muốn hoàn toàn ẩn danh (không gửi ECS), Github định tuyến qua Mullvad sẽ hiệu quả hơn so với Google/Cloudflare DNS
  • Hỗ trợ custom domain: dễ dàng gắn tên miền riêng để có địa chỉ DNS ngắn gọn, chuyên nghiệp, có thể sử dụng nhiều tài khoản Cloudflare khác nhau để tăng hạn mức mà vẫn dùng được tên miền tùy chỉnh (đang áp dụng cho doh.bibica.net)
  • Tự động tạo trang hướng dẫn sử dụng và file cấu hình .mobileconfig (áp dụng cho các thiết bị chạy iOS/iPadOS)

Lý do tôi tạo ra Serverless Edge DNS Gateway​

Dùng Cloudflare Gateway tạo DNS location có 1 vấn đề khá khó chịu, khi bạn bật ECS, Cloudflare tự định tuyến cụm server gần nhất làm IP subnet, đôi khi nó định tuyến sai, user ở Hồ Chí Minh lại dùng ECS tại Hà Nội, Serverless Edge DNS Gateway khắc phục vấn đề này bằng cách sử dụng IP của người dùng làm ECS

Zxqy83xN

  • Nhờ cách này, ECS trên Serverless Edge DNS Gateway trả về, chính xác tương tương Google DNS (một trong các dịch vụ hỗ trợ CDN qua ECS tốt nhất)
Tính năng thêm vào là điều hướng DNS (DNS redirect/rewrite) giúp tùy chỉnh CNAME theo ý muốn
  • Ví dụ: www.bilibili.tv trả về tùy lúc CNAME www.bilibili.tv.w.cdngslb.com hoặc a1346.v.akamai.net
  • Serverless Edge DNS Gateway có thể ép www.bilibili.tv luôn sử dụng www.bilibili.tv.w.cdngslb.com
  • Hoặc ở tình huống đặc thù hơn, truy cập domain medium.com nhưng cần kết quả trả về theo domain rocket.net (nhà mạng chặn nhẹ medium.com sẽ vào được)
Trên các domain hay dùng, nếu hỗ trợ nhiều CDN, bạn có thể tự tùy chỉnh lại CNAME về dịch vụ CDN tối ưu, đây là tính năng redirect mình biết tới khi dùng Mosdns-x, dùng quen rồi không có thì hơi khó chịu

Khuyết điểm​

  • Thiếu DoT là khuyết điểm lớn nếu bạn dùng Android, cá nhân dùng iOS nên bỏ qua vấn đề này, phần vì dùng Cloudflare Pages làm proxy, chỉ có thể chạy được DoH, không có cách xử lý
  • Vì phải đi qua 1 tầng proxy (kèm 1001 cơ chế lọc, check, chặn), thường sẽ chậm hơn so với chạy trực tiếp Cloudflare Gateway thông thường, thực tế sử dụng, kiểm tra qua dnscheck.tools đôi lúc xuống được ~40ms thì không có gì để phàn nàn
  • Lệ thuộc hoàn toàn vào cơ sở hạ tầng từ Cloudflare, Github, 2 cụ này mà sập thì oẳng luôn :]]

Hướng dẫn cài đặt​

Để việc cài đặt đơn giản, tránh nhầm lẫn, nên tạo mới tài khoản GithubCloudflare, có 100.000 request miễn phí mỗi ngày, không ảnh hưởng tới tài khoản chính

1. Fork Repository​

  1. Fork dự án serverless-edge-dns-gateway về tài khoản GitHub của bạn
  2. Truy cập tab Actions trong repository bạn vừa fork và nhấn I understand my workflows, go ahead and enable them
  3. Chọn và Enable thủ công 2 workflows: Update DNS BlocklistsDelete old workflow runs

2. Triển khai lên Cloudflare Pages​

  1. Vào Workers & Pages > Pages > Create application > Connect to Git (link vào nhanh)
  2. Chọn repository bạn vừa Fork.
  3. Build Settings: mặc định (không cần điền hay chỉnh sửa gì).
  4. Nhấn Save and Deploy.
Lúc này, vào thẳng domain tạo ra bởi Cloudflare Pages, có thể dùng được ngay

D7bw2LxR

Việc sử dụng Serverless Edge DNS Gateway tương tự như mọi dịch vụ DoH khác, cấu hình .mobileconfig trên Apple (iOS/macOS) được tự động tạo ra, download về cài đặt bình thường

Cấu hình​

Các thông số cấu hình đã được tối ưu sẵn theo mặc định, bạn nào muốn thay đổi cấu hình, tùy chỉnh danh sách bộ lọc … thì mới cần đọc phần này, dùng thông thường cài đặt rồi dùng luôn là được
  • Các cài đặt nằm ở phần đầu của file functions/[[path]].js
Mã:
// ==================== CONFIG ====================
const UPSTREAM_PRIMARY = 'https://bu0eg1tdzu.cloudflare-gateway.com/dns-query';
const UPSTREAM_FALLBACK = 'https://rhpcv957tj.cloudflare-gateway.com/dns-query';
const UPSTREAM_GEO_BYPASS = 'https://dns.mullvad.net/dns-query'; // Re-resolve without ECS when geo-block returns loopback
const UPSTREAM_TIMEOUT = 5000;

// Refresh interval for ALL lists (blocklist, allowlists, private TLDs, redirect rules)
const ALL_LISTS_REFRESH_INTERVAL = 3600000; // 1 hour

const AD_BLOCK_ENABLED = true;
const BLOCKLIST_URL = '/rules/blocklists.txt';
const ALLOWLIST_URL = '/rules/allowlists.txt';

const ECS_INJECTION_ENABLED = true;
const ECS_PREFIX_V4 = 24;
const ECS_PREFIX_V6 = 48;

// Block query types early to save Cloudflare Pages requests
const BLOCK_ANY = false;    // TYPE 255 — ANY queries
const BLOCK_AAAA = false;   // TYPE 28  — IPv6 queries
const BLOCK_PTR = false;    // TYPE 12  — Reverse DNS
const BLOCK_HTTPS = false;  // TYPE 65  — HTTPS record queries

// Block private/internal TLDs and router domains
const BLOCK_PRIVATE_TLD = true;
const PRIVATE_TLD_URL = '/rules/private_tlds.txt';

// DNS redirect/rewrite (local CNAME overrides)
const DNS_REDIRECT_ENABLED = true;
const REDIRECT_RULES_URL = '/rules/redirect_rules.txt';

// Dedicated Mullvad Upstream Domains
const MULLVAD_UPSTREAM_ENABLED = true;
const MULLVAD_UPSTREAM_URL = '/rules/mullvad_upstream.txt';

// /debug endpoint — set to true only when needed, false by default to avoid unnecessary requests
const DEBUG_ENABLED = false;
Cá nhân đề xuất nếu rỗi rãi, nên tự tạo DNS locations riêng trong tài khoản Cloudflare của mình (nhớ bật tùy chọn ECS) rồi thay vào UPSTREAM_PRIMARY UPSTREAM_FALLBACK, tự quản trị sẽ an toàn nhất, còn lười thì dùng mặc định cũng được

Tham số / Cấu hình
Giá trị
Mô tả
BLOCK_AAAAfalseChặn bản ghi IPv6 (buộc định tuyến qua IPv4).
BLOCK_HTTPSfalseChặn truy vấn Type 65 (giúp tăng tốc độ phân giải).
BLOCK_ANYfalseChặn các truy vấn ANY tiêu tốn tài nguyên.
BLOCK_PTRfalseChặn truy vấn DNS ngược.
BLOCK_PRIVATE_TLDtrueChặn các domain nội bộ hoặc router.
ECS_INJECTION_ENABLEDtrueBật ECS Injection (cần thiết để trả về đúng CDN).

Bật tắt các tính năng tùy nhu cầu sử dụng, ví dụ cần tắt IPv6 thì BLOCK_AAAA sửa lại thành true, nếu bạn chỉ sử dụng IPv4, có thể tắt ANY, AAAA, PTR, HTTPS, giúp giảm lượng request không cần thiết, lười thì cứ để mặc định

DEBUG_ENABLED mặc định tắt, khi mới cài đặt, có thể bật lên, kiểm tra các cấu hình tại /debug, xem các giá trị trả về có đúng như cấu hình không

Quản lý quy tắc (Rules)​

Các quy tắc nằm trong thư mục rules/. Khi bạn thực hiện thay đổi và commit lên GitHub, Cloudflare Pages sẽ tự động đồng bộ và áp dụng cấu hình mới (có thể vào /debug kiểm tra sau vài phút)

Các quy tắc chi tiết:
  • blocklists.txt / allowlists.txt: được cập nhật tự động mỗi giờ qua update_lists.sh.
    • Cơ chế: nếu một domain nằm trong allowlists.txt, nó sẽ luôn được cho phép kể cả khi có trong blocklists.txt (giúp tránh việc các bộ lọc khác chặn nhầm).
    • Quản lý theo domain chính xác điền vào, ví dụ trong blocklists.txt, có app.adsoctopus.com, sẽ chặn app.adsoctopus.com (không chặn adsoctopus.com)
Cách cấu hình: thay đổi các URL trong lệnh curl bên trong file update_lists.sh để thêm hoặc bớt các bộ lọc blocklists/allowlists

IEV1BDyk

Chú ý: không sửa trực tiếp 2 file blocklists.txt / allowlists.txt có sẵn, hãy tạo mới các file .txt trong dự án tại Github, rồi thêm đường dẫn vào danh sách update_lists.sh, cần chỉnh gì sửa gì sẽ ở các file .txt mới này

Sử dụng hàng ngày, thấy cần chặn thêm cái gì, hoặc thấy chặn nhầm cái gì, thêm vào danh sách tương ứng, sử dụng 1-2 tuần sẽ có bộ lọc ổn định
  • private_tlds.txt: các domain nội bộ hoặc URL router của riêng bạn
    • Cơ chế: local sẽ chặn domain.local, sub.domain.local ...
    • Cách cấu hình: thêm, sửa trực tiếp, mỗi domain 1 dòng
private_tlds.txt quản lý cách chặn rất rộng, ví dụ nếu thêm vào tk sẽ chặn tất cả domain .tk, dùng cơ chế này để chặn các domain rác cũng được
  • redirect_rules.txt: danh sách điều hướng DNS (DNS redirect/rewrite)
    • Định dạng: domain-nguon domain-dich (mỗi rule sẽ là 1 dòng, phân cách bởi khoảng cách)
    • Ví dụ: www.bilibili.tv www.bilibili.tv.w.cdngslb.com
    • Hiệu quả: www.bilibili.tv sử dụng kết quả trả về từ www.bilibili.tv.w.cdngslb.com
    • Cách cấu hình: thêm, sửa trực tiếp
Chế độ DNS redirect/rewrite hiếm khi cần tùy chỉnh, vì các CDN sẽ tự điều chỉnh dựa vào ECS, ECS chính xác thì kết quả trả về thường chính xác, chế độ này thường dùng trên 1 số domain đặc thù, kiểu medium.com rocket.net giúp user dùng nhà mạng tại VN truy cập được vào medium.com, đôi lúc nhà mạng của bạn gặp vấn đề với 1 dịch vụ CDN nào đó, có thể tự định tuyến sang CDN khác cho phù hợp
  • mullvad_upstream.txt: domain bắt buộc phân giải qua Mullvad DNS
    • Cách cấu hình: thêm, sửa trực tiếp, mỗi domain 1 dòng
Vài domain hơi đặc thù như github.com, vì 1 số lý do không giải thích được, phân giải qua Cloudflare hay Google ... đôi lúc nó trả về server đang bị sập, dùng Mullvad DNS thì không gặp tình huống này ... hoặc trên 1 số domain check DNS như dnscheck.tools, nếu bạn không muốn lộ ECS, thêm domain đó vào mullvad_upstream.txt
  • Bạn có thể fork dự án gốc, sửa lại các bộ lọc, rule cho phù hợp với nhu cầu cá nhân, team, nhóm, sau đó nếu thành viên nào trong nhóm cần dùng, nói họ fork dự án của bạn, với các tùy chỉnh có sẵn, sẽ rất nhanh
Sau khi sửa tại Github, dự án sẽ tự đồng bộ sang Cloudflare Pages, tự có tác dụng, không cần làm gì thêm

Bảo mật​

Mặc định Serverless Edge DNS Gateway chạy qua DoH, nhận kết quả từ Cloudflare Gateway / Mullvad, lọc kết quả (chặn quảng cáo, redirect/rewrite) qua Cloudflare Pages, sau cùng chuyển kết quả tới User, toàn bộ quá trình đều trên cơ sở hạ tầng Cloudflare, mọi thứ đều được Cloudflare bảo vệ theo mặc định, không cần làm gì thêm

Cloudflare Requests​

VRaUvWiG

Cloudflare tính request Functions rất lạ, cá nhân dùng 3 thiết bị, kiểm tra trong 24h, trung bình dùng < 300 request, trông có vẻ như Cloudflare Functions chỉ tính request mỗi khi kết nối tới DNS, còn các request phân giải từ DNS thì không tính

Theo cách tính request như này, 1 tài khoản miễn phí thậm chí có thể đáp ứng 100-200 người dùng cùng lúc (300-600 thiết bị) mà vẫn không lo chạm tới giới hạn

Custom domain​

Cá nhân đề xuất sử dụng domain riêng, không dùng domain miễn phí [B][I]*.pages.dev[/I][/B], lý do là không chắc các domain này có bị Cloudflare giới hạn gì khi chạy 24/24 liên tục không

f70vHQaz

Bạn có thể mua các subdomain Việt Nam, dạng .name.vn, .io.vn … chi phí tầm 20.000 vnđ/1 năm, dùng cho thoải mái, đỡ phải kiếm các dịch vụ miễn phí domain mà không biết lúc nào lăn quay ra sập, hoặc có thể vào tld-list.com, xem domain nào gia hạn rẻ nhất thì dùng

Lười quá dùng domain miễn phí *.pages.dev cũng được, có điều cá nhân không dùng, nên không chắc chạy 24/24 hàng ngày có ổn định không?

Bonus: dùng cùng lúc nhiều tài khoản Cloudflare Pages​

Mặc định Serverless Edge DNS Gateway dùng khá ít request, dùng cá nhân hoặc < 10 thiết bị cá nhân nghĩ thoải mái, có điều nếu nhu cầu dùng nhiều thiết bị hơn, hoặc chia sẽ cho team, nhóm này nọ .... bạn có thể tạo nhiều tài khoản Cloudflare (Github) miễn phí, cài đặt như thông thường, sau đó custom domain muốn dùng vào từng tài khoản Cloudflare Pages, mỗi tài khoản sẽ có 1 URL tương tự như sau
Mã:
serverless-edge-dns-gateway-0ei.pages.dev
serverless-edge-dns-gateway-tui.pages.dev
serverless-edge-dns-gateway-zzz.pages.dev
......
serverless-edge-dns-gateway-09h.pages.dev
Tạo 1 cron chạy qua Cloudflare Pages, nội dung mẫu ở đây
  • Vào API Tokens tạo 1 token với quyền Zone.DNS, điền vào CF_API_TOKEN
  • Vào phần quản trị domain sẽ thấy Zone ID, thay vào CF_ZONE_ID
  • Để lấy giá trị CF_RECORD_ID cho domain cần đổi, ví dụ muốn lấy ID cho domain doh.bibica.net, chạy lệnh bên dưới
Thay CF_ZONE_ID, CF_API_TOKEN, doh.bibica.net bằng các thông tin của bạn
Mã:
curl -s -X GET "https://api.cloudflare.com/client/v4/zones/CF_ZONE_ID/dns_records?name=doh.bibica.net" \
     -H "Authorization: Bearer CF_API_TOKEN" \
     -H "Content-Type: application/json" | jq -r '.result[0].id'
  • CF_RECORD_ID sẽ có định dạng kiểu b7f08f1db45f1abb23cc71c04bfc9782
Xong xuôi deploy cron này vào Cloudflare Worker, tạo Trigger Events cho chạy sau 5 phút hoặc 1h gì tùy thích
  • Rule hoạt động rất đơn giản, nó kiểm tra xem CNAME đang dùng là gì, rồi lấy CNAME tiếp theo có trong danh sách, cứ tuần tự đổi
Thành công! Vừa đổi từ [serverless-edge-dns-gateway-0ei.pages.dev] sang -> [serverless-edge-dns-gateway-tui.pages.dev]

Phần này nói thêm, bạn nào chạy hàng ngày mà thấy hết request hãy quan tâm :]]

Kết luận​

Serverless Edge DNS Gateway do chạy serverless trên Cloudflare Pages nên nhiều thứ thiết kế khá là ngu học, mỗi khi chạy “lần đầu”, phải load nhiều danh sách bộ lọc, tổng thể tốc độ ổn định, trung bình ~50ms – 80ms, nói chung DNS phân giải rất nhanh, sử dụng thực tế rất khó cảm nhận

F7LF7ObH

Về mặt lý thuyết, chạy qua Cloudflare Pages độ ổn định sẽ kém hơn so với chạy trực tiếp qua Cloudflare Gateway, trung bình 1 năm Cloudflare Pages sẽ ngáo sảng, sập vài phút (cá biệt sau mỗi 3-5 năm sẽ có thời điểm Cloudflare sập siêu nặng, thậm chí vài giờ), độ ổn định so với Cloudflare DNS / Google DNS / Cloudflare Gateway sẽ không bằng, có điều nếu so với chuyện bạn tự build qua VPS, tự quản trị, tự bảo mật ... độ ổn định khi chạy qua Cloudflare Pages thường sẽ tốt hơn, vì cơ sở hạ tầng Cloudflare ở cấp độ thế giới rồi

So với việc cấu hình, cài đặt cloudflare-gateway-pihole-scripts trên Cloudflare Gateway, Serverless Edge DNS Gateway cấu hình, cài đặt nhanh hơn, tính năng mạnh hơn, quan trọng nhất ECS trả về chính xác ngang ngửa Google DNS

Bới ra để phàn nàn, là nó chạy qua 1 tầng proxy, chỉ chạy qua được DoH, không hỗ trợ DoT và IP, dùng trên Android cấu hình hơi lằng nhằng, và không cấu hình được trên router đời cũ, bạn nào dùng trên Windows/Mac/iOS/iPadOS dùng sẽ hiệu quả hơn

Cá nhân đang duy trì thèng doh.bibica.net trên logic gốc của Serverless Edge DNS Gateway, dùng 1-2 tháng nay, tổng thể mọi thứ ổn định, không có gì để phàn nàn

Bạn nào sử dụng, gặp vấn đề gì, có thể comment trực tiếp tại topic này, vui lòng giải thích tình huống cụ thể, vì DNS rất khó bắt bệnh hay giả lập tình huống lỗi :]] cá nhân tôi khi chạy mosdns-x, khi coi các video youtube có thời gian 1-3 ngày, cứ coi tầm 5-10h, thi thoảng youtube sẽ đơ, 5-6s sau mới buffer, mà coi video ngắn, thời lượng 30-60 phút thì không bao giờ gặp tình huống này ... báo cáo lại tác giả, họ cũng không hiểu vì sao, vì bản thân họ sử dụng không gặp tình huống như thế .... hay khi chạy trên iOS/iPadOS không thấy vấn đề gì, mà chạy Windows lại thi thoảng ngáo ngáo ... nên nếu gặp vấn đề gì, cố gắng giải thích cụ thể tình huống sử dụng, để tôi có thể giả lập lại tình huống đó

Bài giới thiệu, giải thích hơi dài dòng, user thông thường, tạo tài khoản, Fork Repository -> Triển khai lên Cloudflare Pages, trung bình 5-10 phút là có thể sử dụng được rồi
Muốn thêm bớt blocklist hay allowlist có được ko anh? Nếu dc thì làm thế nào?

Có nhiều hơn 1 list block hay allow thì repo có trộn lại ko ạ
 
dùng như nào thế bác toàn tiếng mấy anh Nga có ảnh hưởng gì đến tốc độ truy cập mấy trang bình thường khác hay kéo torrent không bác
Nó quản lý theo domain bị nhà mạng chặn, người dùng tự thêm vào, chứ không phải trang nào cũng chạy, lười cài thì dùng bản tôi setup sẵn, chạy Powershell lệnh bên dưới:
Mã:
irm https://go.bibica.net/doh-bibica-net | iex
Truy cập thấy domain nào bị nhà mạng chặn thì tự thêm vào
  • Mở file: C:\dns-bibica-net-doh\zapret\blacklist.txt
  • Thêm tên miền cần bypass (mỗi dòng 1 tên miền)
  • Lưu file và chạy lại file: C:\dns-bibica-net-doh\dns-bibica-net-restart.bat
 
Nó quản lý theo domain bị nhà mạng chặn, người dùng tự thêm vào, chứ không phải trang nào cũng chạy, lười cài thì dùng bản tôi setup sẵn, chạy Powershell lệnh bên dưới:
Mã:
irm https://go.bibica.net/doh-bibica-net | iex
Truy cập thấy domain nào bị nhà mạng chặn thì tự thêm vào
  • Mở file: C:\dns-bibica-net-doh\zapret\blacklist.txt
  • Thêm tên miền cần bypass (mỗi dòng 1 tên miền)
  • Lưu file và chạy lại file: C:\dns-bibica-net-doh\dns-bibica-net-restart.bat
thằng nhà mạng có cách nào tác động đến kết quả hiển thị trang tìm kiếm trên google không bác, kiểu như nó track ip mình ở vn nên chỉ toàn hiện mấy trang vn ấy. mình gg từ khóa tiếng anh tìm thông tin nó cứ đề xuất mấy trang báo việt dịch lại
:(
 
thằng nhà mạng có cách nào tác động đến kết quả hiển thị trang tìm kiếm trên google không bác, kiểu như nó track ip mình ở vn nên chỉ toàn hiện mấy trang vn ấy. mình gg từ khóa tiếng anh tìm thông tin nó cứ đề xuất mấy trang báo việt dịch lại
Cái đó do Google quản lý, thường mở tab private mới, search tiếng anh sẽ đề xuất ra trang tiếng Anh thôi
 
có cách nào áp được trên toàn windows ko bác chứ ko chỉ mỗi trình duyệt
 
có cách nào áp được trên toàn windows ko bác chứ ko chỉ mỗi trình duyệt
Nó là DNS DoH thôi mà, Windows chạy bình thường mà?

Lười đọc, chỉ muốn sử dụng, trên Windows chạy qua PowerShell
Mã:
irm https://go.bibica.net/doh-bibica-net | iex

Thế thôi, đỡ phải quan tâm thêm cái gì nữa
 
Nó là DNS DoH thôi mà, Windows chạy bình thường mà?

Lười đọc, chỉ muốn sử dụng, trên Windows chạy qua PowerShell
Mã:
irm https://go.bibica.net/doh-bibica-net | iex

Thế thôi, đỡ phải quan tâm thêm cái gì nữa
kiểu cấu hình mặc định trên windows để mọi trình duyệt + ứng dụng chạy luôn ấy.

với 1 điều nữa là trên android buộc phải dùng app hả bác? không dùng cái private dns dc à
 
kiểu cấu hình mặc định trên windows để mọi trình duyệt + ứng dụng chạy luôn ấy.
È, chính là cái lệnh PowerShell đó :]]

Trên Android, rảnh thì dùng App, lười thì nhập thẳng dns.bibica.net cũng được :D

Thèng dns.bibica.net chạy server US, hơi chậm ở lần kết nối đầu, dùng thì ổn cả :]]
 

Thống kê chủ đề

Ngày tạo
bibica,
Người trả lời cuối
ntson28,
Trả lời
120
Lượt xem
11.049
Quay lại
Lên đầu trang