Loại trừ một gói là chỉ dẫn định tuyến, không phải chặn, nên các trang tải sau khi VPN kết nối là điều dự kiến chứ không phải bằng chứng của lỗi. Việc loại trừ đưa ứng dụng ra khỏi đường hầm thay vì chặn nó, và mạng thông thường chuyên chở lưu lượng của nó. Hai chính sách riêng biệt gặp nhau ở đây: một bên chọn tiến trình, bên kia chọn đích. Đọc chúng theo thứ tự đó giải thích vì sao một biểu tượng đã kết nối và một ứng dụng đang chạy không phải là mâu thuẫn.

Vì sao việc loại trừ giữ mạng mở

VpnService.Builder nhận danh sách cho phép hoặc danh sách cấm, không bao giờ cả hai. Chỉ các gói trong danh sách cho phép mới được định tuyến qua đường hầm. Danh sách cấm đảo ngược điều đó: mọi gói trừ những gói được liệt kê đều dùng đường hầm, còn những gói được liệt kê giữ đường vật lý. Một gói không có trong danh sách cho phép cũng ở ngoài đường hầm, nên việc loại trừ là trạng thái bình thường với phần lớn ứng dụng trong chế độ đó.

Điều đó biến một mục cấm cục bộ thành quyết định định tuyến, không phải quy tắc tường lửa. Nếu yêu cầu là ngăn một ứng dụng tiếp cận máy chủ, đường hầm phải bao phủ nó và máy chủ hoặc chính sách cục bộ phải từ chối lưu lượng. Đưa một ứng dụng ra khỏi đường hầm chỉ thay đổi giao diện nào chuyên chở các gói của nó.

Trường hợp Play Store là ví dụ cố ý thường gặp. Loại trừ gói của cửa hàng cho phép các lượt tải dùng kết nối bên dưới khi đầu ra VPN can thiệp vào việc truyền, và cho thấy loại trừ nghĩa là đi vòng chứ không phải chặn.

Một hồ sơ, một danh sách

Bộ dựng ném ngoại lệ nếu dùng cả hai lệnh gọi, nên hồ sơ trước mặt bạn là danh sách cho phép hoặc danh sách cấm. Riêng sự thật đó quyết định cách đọc mọi quan sát về sau. Hãy kiểm tra mã hoặc cấu hình được quản lý trước bảng định tuyến, vì danh sách quyết định ý nghĩa phần còn lại của đầu ra. Một hồ sơ kết hợp không phải trạng thái mà bạn có thể đang nhìn.

Sự khác biệt cũng dự đoán điều một ứng dụng mới cài sẽ làm. Trong danh sách cho phép nó ở ngoài cho đến khi ai đó thêm vào, còn trong danh sách cấm nó tham gia đường hầm theo mặc định.

Cấu hình được quản lý trình bày cùng lựa chọn đó dưới các tên khóa khác nhau, và một số giao diện điều khiển mô tả nó là chế độ VPN cho từng ứng dụng thay vì một danh sách. Hành vi vẫn thu về hai lệnh gọi ấy, nên hãy lần theo cài đặt ngược về danh sách gói thay vì tin nhãn. Nếu nhãn và danh sách không khớp, danh sách thắng.

Theo quy tắc UID đến bảng của đường hầm

Android cấp cho mỗi ứng dụng ID người dùng Linux riêng, và dịch vụ VPN cài các quy tắc chính sách khớp với dải UID. Lưu lượng khớp được gửi đến một bảng định tuyến có tuyến mặc định trỏ tới thiết bị tun. Số bảng được cấp riêng cho mỗi phiên bản VPN, nên nó thay đổi sau khi kết nối lại hoặc sau khi tạo hồ sơ VPN thứ hai.

Đầu ra của các quy tắc là bản đồ. Mỗi dòng nêu tên một bảng tra cứu, và bảng đó giữ tuyến mặc định quyết định các gói khớp có đi vào đường hầm hay không.

adb shell ip rule show
adb shell ip route show table all
adb shell cmd package list packages -U | grep <package>

Chạy lệnh thứ ba trước để lấy UID, rồi tìm quy tắc có dải bao gồm nó. Quy tắc đó trỏ tới một số bảng, và ip route show table <n> với số đó cho thấy có tuyến mặc định qua thiết bị tun hay không. Nếu bảng không có tuyến mặc định, ứng dụng đã được chọn nhưng không có đường, đó là một lỗi khác.

Các lệnh này cần bản dựng có thể gỡ lỗi hoặc thiết bị mà adb shell đọc được trạng thái mạng. Trên máy sản xuất, trình quản lý gói vẫn trả lời, nhưng việc kiểm tra định tuyến có thể bị từ chối, nên hãy ghi lại những gì có thể và coi phần còn lại là chưa xác minh.

Tuyến đòi một tiền tố, không phải một ứng dụng

Builder.addRoute đòi các tiền tố đích cho đường hầm. Một hồ sơ chỉ thêm 10.0.0.0/8 sẽ gửi tiền tố đó qua đường hầm và để mọi đích khác trên đường vật lý. Đó là đường hầm chia tách thông thường, và nó độc lập với việc các quy tắc đã chọn ứng dụng nào.

Cấu hình do máy chủ đẩy phản ánh cùng mô hình. Các lần đẩy tuyến riêng lẻ thêm tiền tố, trong khi chỉ thị redirect-gateway thay thế tuyến mặc định và bắt mọi thứ cho những ứng dụng mà đường hầm bao phủ. Bỏ chỉ thị đó có thể thu nhỏ một đường hầm đang hoạt động xuống còn một mạng con mà không có thay đổi nào trên thiết bị.

Một tuyến được đẩy với cổng hoặc bộ định lượng số đo bất thường cũng có thể không cài được. Hãy ưu tiên dạng tiền tố đơn giản và để máy chủ xử lý việc chuyển tiếp và NAT.

Đọc phần giao trước khi đổi một cài đặt

Đường hầm chuyên chở phần giao của các tiến trình được bao phủ và các đích được yêu cầu. Một ứng dụng được bao phủ hỏi địa chỉ ngoài các tiền tố đã công bố sẽ ra ngoài bằng mạng vật lý. Một gói bị cấm vẫn ở ngoài ngay cả khi nó hỏi địa chỉ bên trong các tiền tố đó. Cả hai trường hợp đều không phải lỗi; cả hai là hai chính sách đang làm việc của mình.

VPN cho từng ứng dụng cũng có thể để một ứng dụng liên kết không có kết nối. Khi on-demand tắt và đường hầm xuống, ứng dụng vẫn gắn với VPN cho từng ứng dụng và không có phương án dự phòng, trông như ứng dụng hỏng hơn là trạng thái chính sách. Bật on-demand, hoặc gỡ liên kết qua quản lý, sẽ thay đổi điều đó.

LayerWhat it selectsWhere to lookTypical mismatch
Package listProcessesBuilder calls or managed configurationApp excluded but expected to be blocked
UID policy ruleWhich table a UID usesip rule showTunnel icon on, app still on Wi-Fi
Routing tableDestinations for matched trafficip route show table <n>Covered app reaches only one subnet
Server pushPrefixes offered to the clientServer route configurationTunnel shrinks after a server edit

Chẩn đoán từng trục một. Xác nhận cho phép hay cấm trước, đọc các quy tắc UID và bảng đã cài thứ hai, và thử một ứng dụng thứ hai với cùng đích sau cùng. Ứng dụng thứ hai tách việc chọn tiến trình khỏi việc chọn đích trong một yêu cầu.

Ghi kết quả là ứng dụng, đích và số bảng. Chính bộ ba đó là thứ mà thay đổi tiếp theo phải giữ nguyên.

Bài viết liên quan