DPI là gì? Vì sao trang bị chặn theo SNI và cách tách gói

Bộ lọc DPI đọc tên trang ngay trong gói HTTPS đầu tiên. Tìm hiểu SNI, cách tách TLS record giúp bộ lọc bỏ sót, và những gì kỹ thuật này không làm được.

Bạn gõ địa chỉ một trang web, trình duyệt quay vài giây rồi báo “Kết nối bị đặt lại” hoặc “Trang này không hoạt động”. DNS vẫn đúng, máy chủ vẫn sống, nhưng kết nối cứ bị cắt ngay từ đầu. Rất có thể bạn vừa gặp một bộ lọc DPI. Bài này giải thích DPI nhìn thấy gì, vì sao chỉ cần tách một gói tin là đủ để nó bỏ sót, và giới hạn của cách làm này.

DPI là gì?

DPI (Deep Packet Inspection, kiểm tra gói tin sâu) là thiết bị hoặc phần mềm đặt trên đường truyền của nhà mạng. Nó không chỉ nhìn địa chỉ gửi và nhận như bộ định tuyến thông thường, mà còn đọc cả phần dữ liệu bên trong gói tin. Nhờ vậy nó có thể nhận ra bạn đang mở trang nào và chặn theo danh sách.

Với HTTPS, nội dung trang đã được mã hoá nên DPI không đọc được. Nhưng có một chỗ hở: ngay trước khi mã hoá bắt đầu, trình duyệt phải cho máy chủ biết nó muốn vào trang nào.

SNI: tên trang nằm ngay trong gói đầu tiên

Mỗi kết nối HTTPS bắt đầu bằng một bước bắt tay TLS. Gói đầu tiên trình duyệt gửi đi gọi là ClientHello. Trong đó có trường SNI (Server Name Indication) chứa tên miền, ví dụ example.com. Trường này cần thiết vì một địa chỉ IP thường phục vụ rất nhiều trang, và máy chủ phải biết bạn muốn trang nào để gửi đúng chứng chỉ.

Vấn đề là SNI được gửi ở dạng chữ rõ. Bộ lọc DPI chỉ cần đọc vài chục byte đầu của mỗi kết nối, so với danh sách, rồi gửi gói reset hoặc bỏ rơi kết nối. Cách chặn này rẻ, nhanh, và không ảnh hưởng tới các trang khác dùng chung IP. Đó là lý do nó phổ biến.

Tách gói: cho DPI thấy từng mảnh

Bộ lọc DPI phải xử lý lượng dữ liệu khổng lồ trong thời gian thực, nên nhiều bộ lọc chỉ đọc nhanh gói đầu tiên mà không ghép lại các gói bị chia nhỏ. Máy chủ web thì khác: theo đúng chuẩn TCP và TLS, nó luôn ghép đủ các mảnh trước khi đọc. GreenTunnel lợi dụng đúng khác biệt đó.

Sơ đồ gói ClientHello: gửi bình thường thì SNI example.com nằm trọn trong một gói. Tách TLS record hoặc tách gói TCP ở vị trí sni+1 thì tên bị cắt thành “e” và “xample.com”
Cùng một chuỗi byte, chỉ khác cách cắt. Vị trí sni+1 nghĩa là cắt ngay sau ký tự đầu tiên của tên miền.

Tách TLS record (mặc định)

Dữ liệu TLS được đóng trong các “record”, mỗi record có phần đầu (header) 5 byte. Thường thì ClientHello nằm gọn trong một record. GreenTunnel chia nó thành hai record ngay sau ký tự đầu tiên của tên miền. Chuẩn TLS cho phép điều này, nên máy chủ ghép lại không vấn đề gì. Nhưng một bộ lọc chỉ đọc record đầu sẽ thấy tên miền dở dang là “e”.

Đây là kỹ thuật mặc định của GreenTunnel, ký hiệu tlsrec(sni+1). Nó nhẹ và hiếm khi làm hỏng trang nào.

Tách gói TCP

Thay vì chia record, engine gửi các byte đầu thành hai gói TCP riêng: gửi phần đầu, đẩy đi ngay, rồi mới gửi phần còn lại. Bộ lọc không ghép gói TCP sẽ không thấy tên đầy đủ. Hai cách có thể kết hợp với nhau, ví dụ tlsrec(sni+1)+split(sni+1).

Các kỹ thuật nâng cao

Engine còn có những cách mạnh hơn như gửi đảo thứ tự hoặc chèn byte khẩn (OOB). Chúng được dùng khi cách nhẹ không đủ, và khả năng hỗ trợ khác nhau giữa các nền tảng. Bạn không cần tự chọn: tính năng Kiểm tra URL thử lần lượt từ nhẹ tới nặng và đề xuất kỹ thuật chạy được trên mạng của bạn.

Bật và chỉnh trong ứng dụng

Trong Cài đặt → Chế độ vượt chặn có hai lựa chọn:

  • Mọi trang (mặc định): tách nhẹ TLS record cho mọi kết nối HTTPS. Cách này hiếm khi gây lỗi.
  • Chỉ danh sách: chỉ tách gói cho những trang bạn thêm vào danh sách “Trang cần vượt chặn”.

Dòng Kỹ thuật cho biết chuỗi kỹ thuật đang dùng, kèm nút đặt lại về mặc định nếu bạn đã đổi. Trang ngân hàng hoặc ứng dụng nhạy cảm có thể đưa vào danh sách “Luôn đi thẳng” để không bao giờ bị tách gói.

Cài đặt GreenTunnel, phần Chế độ vượt chặn với hai lựa chọn Mọi trang và Chỉ danh sách, cùng dòng Kỹ thuật đang là Tách TLS record
Chế độ vượt chặn và kỹ thuật đang dùng.
Chi tiết một kết nối trong Requester với nhãn Bypass và kỹ thuật đã áp dụng
Requester cho biết kết nối nào đã được tách gói, và bằng kỹ thuật gì.

Những gì tách gói không làm được

Ba tình huống: không có GreenTunnel thì DPI đọc tên và chặn. Có GreenTunnel thì gói đầu bị chia đôi, DPI không đọc được tên, trang mở. Trang bị chặn theo IP thì tách gói không giúp được
Tách gói chỉ có tác dụng với kiểu chặn đọc tên trang.
  • Chặn theo địa chỉ IP: nếu nhà mạng chặn hẳn IP của máy chủ, gói tin không tới được dù có tách hay không. Lúc này cần đi qua một máy chủ khác, ví dụ Proxy Route hoặc Tunnel Link với máy chủ bạn tin tưởng.
  • DPI ghép lại đầy đủ: một số bộ lọc ghép lại các mảnh trước khi đọc. Khi đó cần kỹ thuật mạnh hơn, và có những mạng mà chưa kỹ thuật cục bộ nào vượt được.
  • DNS giả: nếu nhà mạng trả về địa chỉ sai thì bạn còn chưa tới được máy chủ thật. Vấn đề này do DNS mã hoá xử lý, và GreenTunnel bật sẵn nó.
  • QUIC/HTTP3: QUIC chạy trên UDP, không có “gói TCP đầu tiên” để tách. GreenTunnel mặc định chặn QUIC để trình duyệt quay về TCP. Xem bài về QUIC.
  • Giấu IP: tách gói không thay đổi IP của bạn. Xem VPN cục bộ và VPN từ xa.

Câu hỏi thường gặp

Tách gói có làm trang web chậm hơn không?

Chỉ gói tin đầu tiên của mỗi kết nối bị chia, phần còn lại đi nguyên vẹn. Thêm một gói nhỏ ở đầu kết nối hầu như không ảnh hưởng tới tốc độ tải trang.

Nhà mạng có biết tôi đang dùng kỹ thuật này không?

Một gói ClientHello bị chia thành hai record vẫn hợp lệ theo chuẩn, nhưng không phổ biến. Một bộ lọc được thiết kế để tìm dấu hiệu này về lý thuyết có thể nhận ra. GreenTunnel không phải công cụ che giấu việc bạn dùng nó.

Vì sao có trang vẫn không vào được dù đã bật GreenTunnel?

Có thể trang bị chặn theo IP, hoặc mạng của bạn dùng bộ lọc mạnh hơn. Hãy chạy Kiểm tra URL để xem chính xác nguyên nhân.

ECH có thay thế được việc tách gói không?

ECH (Encrypted Client Hello) mã hoá luôn cả tên trang, nên khi cả trình duyệt và trang web hỗ trợ thì DPI không còn đọc được SNI. Tuy vậy, nhiều trang chưa hỗ trợ ECH, nên tách gói vẫn hữu ích.

← Tất cả bài viết