Mấy hôm nay dùng Chrome có bật DNS bảo mật (và xài mạng VNPT) có ai bị lỗi vào web không ta?

486e5d1c0a57603626a5.jpg


Dạo này có bạn nào xài Chrome bật DNS bảo mật (lại còn dùng mạng VNPT) thấy vào một số trang web không được không? Kiểu trang này vào ngon, trang kia lại văng ra luôn ấy

Trang nào không vào được thì bị báo lỗi kiểu ERR_CONNECTION_TIMEOUT hoặc ERR_CONNECTION_CLOSE ghê lắm.

Mình đào sâu tìm nguyên nhân thì ra là:

• Khi dùng DNS bảo mật, Chrome sẽ tự động mã hóa gói tin Client Hello (gọi là ECH).
• Khi vào website có hỗ trợ ECH, Chrome sẽ gửi lệnh TLS handshake dùng ECH.
• Nhà mạng (cụ thể mình xài VNPT) có vẻ đã nâng cấp hệ thống DPI (một kiểu tường lửa phân tích gói tin). Cứ thấy mã hóa tên miền là drop thẳng tay không thương tiếc
• Nên khi bật DNS bảo mật và vào web có ECH sẽ báo lỗi luôn.
• Còn nếu Web không dùng ECH, hoặc trình duyệt Chrome không dùng DNS Secure (tắt cả ECH) thì gói tin Client Hello dạng plaintext sẽ không bị DPI chặn. Và vào web bình thường (nếu không phải domain bị nhà mạng chặn rồi).
• Lý do là để ép user phải dùng plaintext trong Client Hello, như thế sẽ soi được luôn tên miền đang kết nối. Rồi áp dụng tiếp bộ lọc tên miền, tên miền ngoan cho qua, tên miền hư thì bị chặn. Kiểu mấy tên miền "nhạy cảm" ấy mà

Cách fix nhanh nhất là tắt DNS bảo mật để Chrome không mã hóa client hello nữa.

Nếu đang config DNS bảo mật qua server riêng, ví dụ như AdguardHome, thì thêm Custom filtering rules này để chặn gói tin dns https gửi từ server và ép Chrome dùng plaintext SNI: ||*^$dnstype=HTTPS

Ối dồi ôi, mấy hôm nay đang config lại hệ thống mạng ở nhà, tự nhiên bị lỗi trang vào được trang không, cứ tưởng hệ thống của mình bị config sai chỗ nào đó. Hóa ra không phải do mình

> Mình bỏ chrome gần 5 năm rồi và không có lý do gì để quay lại dùng nó cả.

Hiểu gốc rễ: một lần vào web lộ tên miền ở đâu?

Vào example.com gồm 2 bước, và tên miền có thể rò rỉ ở cả hai:

Bước 1 — Hỏi DNS: "example.com có IP nào?"

Bước 2 — Bắt tay TLS: gửi gói ClientHello tới server, trong đó có trường SNI ghi rõ tên miền bạn muốn vào.

Điểm mấu chốt: SNI mặc định là plaintext (trần troã), kể cả khi web là HTTPS. Lý do là một IP (nhất là CDN) host cả nghìn web, server cần biết bạn xin cert của domain nào trước khi kênh mã hóa được dựng lên → nên SNI buộc phải gửi trần.

DoH và ECH — hai lớp khác nhau, bổ sung nhau

DoH = giấu "tôi hỏi đường tới đâu".

ECH = giấu "tôi thực sự gõ cửa nhà nào".

Đây là lý do DoH thôi chưa đủ: dù DNS đã mã hóa hoàn toàn, ISP vẫn đọc được tên miền qua SNI plaintext ở bước 2. Cần ECH để bịt nốt lỗ đó ✨

ECH = Encrypted Client Hello. Nó không mã hóa toàn bộ gói ClientHello, mà tách làm 2:

• Client hỏi DNS (qua DoH) bản ghi HTTPS (DNS type 65) của domain → nhận về ech=... (chứa public key).
• Client dựng 2 bản ClientHello:
Inner: SNI thật (example.com) → được mã hóa.
Outer: SNI "vỏ bọc" chung của CDN (vd cloudflare-ech.com) → gửi trần.
• Server (Cloudflare…) giải mã Inner → route tới đúng backend.

Kết quả: DPI nhìn vào chỉ thấy mọi người cùng đi tới "cloudflare-ech.com", không phân biệt được ai vào site nào

Yêu cầu để ECH chạy: TLS 1.3 + Secure DNS bật + site có publish ECH config. Vì cần lấy config qua DNS nên ECH phụ thuộc DoH — đó là lý do tắt DNS bảo mật thì ECH tắt theo.

Vì sao VNPT chặn, và chặn kiểu gì?

Hệ thống DPI (tường lửa soi gói) của ISP thấy gói ClientHello có extension ECH (0xfe0d) thì drop thẳng → timeout/reset.

Mục đích: ép người dùng quay về plaintext SNI, để soi được tên miền và áp bộ lọc chặn (web lậu, web cấm…).

Lưu ý: DPI không đọc được tên miền (nó đã mã hóa rồi) — nó chỉ thấy có mặt extension ECH là chặn ngay.

Trình duyệt có đang dùng ECH? Vào https://crypto.cloudflare.com/cdn-cgi/trace, tìm dòng sni= → encrypted là có, plaintext là không.

Hướng dẫn tắt ECH cho web host trên Cloudflare ️

Anh em nào đang host web qua Cloudflare mà muốn tắt ECH cho host của mình thì có thể dùng lệnh này để tắt qua API của Cloudflare nhé, chứ giao diện quản lý trên Web của Cloudflare hình như không có chỗ tắt đâu.

Để check thì anh em vào web này: điền domain của mình vào, chỗ RR Type thì điền HTTPS rồi ấn Resolve, nếu ECH bật thì anh em nhìn kết quả ở dưới sẽ thấy 1 dòng ech=AEX+DQBBD...

Lên giao diện Web Cloudflare, vào domain lấy Zone IDGlobal API Key, thay vào đoạn code dưới này, rồi paste vào Terminal / CMD:

```
[email protected]
-H "X-Auth-Key: <GLOBAL_API_KEY>"
-H "Content-Type: application/json"
-d '{"id":"ech","value":"off"}' | grep -q '"success":true' && echo "OK" || echo "ERROR"
```

Làm xong chờ vài phút check lại bằng web trên của google, thấy dòng ech biến mất là ok

Comment từ cộng đồng

> Đang xài Viettel và DNS của AdguardHome trên con miniPC thấy bình thường, ko bị chặn gì hết.

> VNPT, OpenDNS, CloudFlare có trang còn không truy cập được

> Vẫn xài bình thường, không gặp vấn đề gì hết

> Dùng DNS secure của NextDNS vẫn thoải mái lắm

> Chia sẻ rất hữu ích, rất cảm ơn Anh, Em cũng mới vừa bị xong!

> hèn gì bị bữa giờ chả hiểu tại sao

> FB của mình đang bị, tắt DNS bảo mật cũng k giải quyết được, bị cả trên chrome và Firefox

Nguồn: tinhte.vn
 
Back
Top