Để phát hiện việc sử dụng proxy, Cloudflare kiểm tra trình duyệt sử dụng cách triển khai DNS nào. Trong 28.6.0 chúng tôi đã thêm khả năng sử dụng cách triển khai DNS tùy chỉnh của Chrome, đây là tùy chọn mặc định. Dưới đây là một số giải thích về cách nó hoạt động và các ví dụ cấu hình:
Trong Chrome, một trình phân giải DNS tùy chỉnh được triển khai. Nó không dựa vào các hàm winapi như getaddrinfo hay DnsQueryEx. Nó được triển khai trên các api cấp thấp như các hàm sử dụng tcp hoặc udp. Nó cho phép thực hiện các truy vấn DNS nâng cao, những truy vấn có thể không có sẵn qua windows api.
Proxy sẽ chỉ thực hiện các truy vấn A và AAAA chỉ để lấy IP của máy chủ. Trình duyệt thật sẽ thực hiện các truy vấn khác và lấy dữ liệu. Dữ liệu bị thiếu có thể bị máy chủ phát hiện. Có thể còn nhiều điểm khác biệt khác, vì vậy nên sử dụng trình phân giải DNS tùy chỉnh của Chrome.
Bản vá này cho phép bật hoặc tắt DNS tùy chỉnh. Nó cũng cho phép định tuyến lưu lượng DNS UDP qua proxy nếu proxy hỗ trợ UDP. Tùy chọn thay thế là định tuyến toàn bộ lưu lượng trực tiếp mà không dùng proxy.
Đây là cấu hình bản vá:
Tham số DNSSorting.
Nếu hệ thống máy chủ có ipv6 và proxy không hỗ trợ ipv6 và tên miền có bản ghi AAAA, thì Chromium có thể thử kết nối qua ipv6 và sẽ bị chặn. Bằng cách đặt tham số này, có thể lọc các ip theo loại từ kết quả truy vấn DNS.
Cách dùng:
_settings("Fingerprints.DNSSorting": "Native")!
Các giá trị có thể: Native(mặc định) - Sử dụng lọc gốc qua các phương thức WinAPI. Có thể bị lỗi nếu mức hỗ trợ IPv6 của PC đang chạy và của proxy không khớp. OnlyIPv4 - Chỉ giữ lại hỗ trợ IPv4, lọc bỏ toàn bộ IPv6. Dùng khi proxy không hỗ trợ IPv6. Copy - Giữ lại cả IPv4 và IPv6. Dùng khi proxy hỗ trợ IPv6.
Tham số DNSIP.
Việc sử dụng cách triển khai tùy chỉnh của Chrome yêu cầu đặt ip DNS. Không giống phương thức mặc định nơi hostname được gửi đến proxy và truy vấn DNS được thực hiện ở đó, chúng ta cần phân giải ip cục bộ và do đó yêu cầu ip DNS.
Cách dùng:
_settings("Fingerprints.DNSIP": "1.1.1.1")!
Tham số DNSMode.
Công tắc này cho phép đặt phương thức phân giải tên miền.
Cách dùng:
_settings("Fingerprints.DNSMode": "SendDomainThroughProxy")!
Các giá trị có thể: SendDomainThroughProxy(mặc định) - Truyền tên miền qua proxy, cho phép proxy phân giải tên miền. RouteThroughProxy - Phân giải tên miền cục bộ, nhưng gửi toàn bộ lưu lượng DNS UDP đến proxy được chỉ định. RouteWithoutProxy - Phân giải tên miền cục bộ, thực hiện truy vấn DNS trực tiếp.
Tham số DNSCache.
Cho phép bật hoặc tắt bộ nhớ đệm DNS.
Cách dùng:
_settings("Fingerprints.DNSCache": "Disable")!
Các giá trị có thể: Disable(mặc định) - Tắt bộ nhớ đệm DNS. Enable - Cho phép bộ nhớ đệm DNS
Tham số DNSCache.
Khi đặt máy chủ DNS tùy chỉnh, Chrome có thể tự động tìm máy chủ DoH gắn với máy chủ DNS được chỉ định. Không có cơ chế mặc định để tìm máy chủ DoH, nên trình duyệt hardcode các máy chủ DoH đã biết trong file net/dns/public/doh_provider_entry.cc. Theo mặc định, khi sử dụng máy chủ DNS từ nhà cung cấp cục bộ, DoH sẽ không được dùng, nên có thể hữu ích khi tắt nó.
Cách dùng:
_settings("Fingerprints.DNSOverHTTPS": "Disable")!
Các giá trị có thể: Disable(mặc định) - Tắt DoH. Enable - Cho phép DoH
Đây là một cấu hình vững chắc để hỗ trợ DNS tùy chỉnh. Nó sẽ phân giải toàn bộ truy vấn DNS cục bộ: _settings( "Fingerprints.DNSSorting": "OnlyIPv4", "Fingerprints.DNSIP": "1.1.1.1", "Fingerprints.DNSMode": "RouteWithoutProxy", "Fingerprints.DNSCache": "Disable", "Fingerprints.DNSOverHTTPS": "Disable", )!