Hai người đặt cùng một câu hỏi và nhận được câu trả lời không tương thích, vì họ đang đứng ở những vị trí khác nhau. Một người mở màn hình cài đặt VPN của hệ thống và đang sửa một danh sách ứng dụng. Người kia đang viết VpnService.Builder.addDisallowedApplication() trong trình soạn thảo. Cả hai đều gọi đó là bộ lọc VPN theo ứng dụng. Chỉ một người trong số họ sở hữu quyền điều khiển mà họ mô tả, và không ai đang chặn thứ gì.

Bắt đầu từ màn hình mà người dùng nhìn thấy

Mở Cài đặt, tìm mục VPN và xem kết nối thực sự đang hoạt động. Nếu ứng dụng khách cung cấp danh sách theo ứng dụng, danh sách đó thuộc về đường hầm của chính ứng dụng khách. Nền tảng không công bố một API chung để một ứng dụng không liên quan có thể đọc hoặc sửa lựa chọn ứng dụng của một VPN khác, nên ứng dụng thứ hai không thể sửa danh sách đó thay cho người dùng.

Đây là ngã rẽ đầu tiên của hành trình. Nếu VPN đã cài không có cài đặt đó, thì không có gì để lách bằng mã: tính năng đó không tồn tại trong sản phẩm sở hữu đường hầm. Nếu có, cách sửa đúng nằm ở màn hình đó, do người có thể mở nó thực hiện.

Theo dõi gói tin đi vào đường hầm

Khi ứng dụng của bạn dựng một đường hầm, nó tạo một giao diện TUN và khai báo lưu lượng của những ứng dụng nào đi vào đó. Các lệnh gọi thành viên diễn ra trước khi giao diện được thiết lập, và sau đó bộ quy tắc được cố định cho phiên đó:

val builder = VpnService.Builder()
builder.addAddress("10.8.0.2", 32)
builder.addRoute("0.0.0.0", 0)
builder.addDisallowedApplication("com.example.bypass")
val tun = builder.establish()   // membership decided here

Những lệnh gọi đó chỉ áp dụng cho đường hầm mà ứng dụng của bạn vừa tạo và không áp dụng cho bất cứ thứ gì khác. Chúng không phải chính sách của toàn bộ thiết bị, không tồn tại cho các ứng dụng khách khác, và không thể vươn vào VPN của người khác. Khi một lệnh gọi của trình dựng ném ngoại lệ vì không thể phân giải gói, giao diện sẽ không bao giờ được thiết lập, đó là một thất bại sạch chứ không phải im lặng.

Vì sao việc loại trừ trông giống chặn

Một ứng dụng bị loại trừ được định tuyến vòng qua đường hầm của bạn ra mạng bên dưới. Đó là điều ngược lại với chặn nó: lưu lượng vẫn rời khỏi thiết bị, chỉ là ở ngoài giao diện mà bạn kiểm soát. Một ứng dụng kiểu tường lửa làm điều ngược lại. Nó nhận lưu lượng của ứng dụng vào đường hầm của mình rồi vứt bỏ gói tin, hoặc từ chối chuyển tiếp, nên giao diện vẫn như cũ còn hướng của chính sách thì đảo ngược.

Công việc đằng sau sự đảo ngược đó không phải một cờ cấu hình. Bạn đọc các gói IP từ bộ mô tả đường hầm, quyết định theo từng luồng, rồi hoặc chuyển tiếp chúng qua một socket được bảo vệ hoặc vứt bỏ. Bất cứ thứ gì bạn không xử lý sẽ đơn giản dừng lại, và đó là lý do một đường hầm làm dở trông giống mạng hỏng hơn là một bộ lọc hoạt động. Nếu mục tiêu là chặn, hãy tính đến việc xử lý gói tin, một dịch vụ chạy nền trước và một chính sách bằng văn bản cho lưu lượng bạn không thể phân loại.

Điều gì hỏng khi bạn tự dựng nó

Android thường chỉ cho phép một VPN hoạt động tại một thời điểm, nên đường hầm lọc của bạn và một đường hầm riêng tư sẽ tranh nhau cùng một chỗ, trừ khi sản phẩm hỗ trợ nối chuỗi. VPN luôn bật với chặn kết nối thay đổi cách thất bại theo một cách quan trọng ở đây: lưu lượng không thể vào đường hầm sẽ bị vứt bỏ thay vì được gửi trực tiếp, đó là điều thiết kế chống rò rỉ muốn và là điều một phiên gỡ lỗi hiếm khi lường trước.

Khả năng hiển thị gói tin là cái bẫy thứ hai. Việc phân giải tên gói của một ứng dụng có thể thất bại với NameNotFoundException, và trên các phiên bản Android mới hơn, tập gói bạn nhìn thấy phụ thuộc vào các truy vấn bạn đã khai báo. Hãy xử lý ngoại lệ thay vì giả định mọi tên đều phân giải được, và đọc lại danh sách khi ứng dụng được cài hoặc gỡ, thay vì lưu nó vào bộ nhớ đệm mãi mãi.

Thiết bị được quản lý thêm người sở hữu thứ ba. Chính sách di động doanh nghiệp có thể đặt VPN theo ứng dụng hoặc một hồ sơ luôn bật, và một ứng dụng thông thường không thể ghi đè. Hãy kiểm tra xem thiết bị có được quản lý không trước khi gỡ lỗi mã của bạn, vì trong trường hợp đó danh sách bạn đang cố thay đổi có thể không ai cầm điện thoại sửa được.

Hãy thử bằng một ứng dụng mà bạn kiểm soát

Đừng thử bằng ứng dụng mà bạn đang cố lọc. Hãy dùng một ứng dụng thứ hai mà bạn có thể quan sát hành vi mạng, và kiểm tra xem lưu lượng của nó có đi ra qua đường hầm của bạn trong khi lưu lượng của mục tiêu thì không. Nếu cả hai đều ở trong, chính sách đang hoạt động và mục tiêu đã bị loại trừ; nếu không cái nào đi ra, bản thân đường hầm sai và danh sách ứng dụng không phải vấn đề.

Sau đó hãy quyết định bạn thực sự đang xây cái nào trong ba thứ. Đường hầm theo ứng dụng là API của trình dựng, với danh sách là một phần hồ sơ của bạn. Tường lửa thiết bị là xử lý gói tin cộng với một vòng đời mà bạn có thể bảo vệ. Thay đổi VPN của người khác hoàn toàn không phải con đường được hỗ trợ, và câu trả lời trung thực ở đó là cài đặt ấy thuộc về sản phẩm đó.

Bài viết liên quan