Android OpenVPN: thêm tuyến riêng mà không cần root điện thoại
Thêm một tuyến vào hồ sơ mà Android thực sự tải, rồi kiểm tra xem máy chủ có cho phép hay không. Hướng dẫn cho việc sửa, kết nối lại và bốn bước kiểm tra.
Bạn cần thêm một mạng con riêng — giả sử 10.60.0.0/24 — mà hồ sơ hiện chưa có. Trên laptop bạn sẽ thêm một tuyến rồi đi tiếp. Trên Android, VPN là một ứng dụng, thiết bị tun thuộc về ứng dụng đó, và không có bảng định tuyến để bạn sửa khi không có root. Tuyến vẫn phải tồn tại, nhưng nó đi vào hồ sơ mà ứng dụng khách tải, và chỉ hoạt động nếu phía bên kia đồng ý. Dưới đây là phần sửa, kết nối lại, phía máy chủ và phần hoàn tác.
Trước khi sửa: một tuyến làm được gì và không làm được gì
Một tuyến trả lời một câu hỏi: giao diện nào sẽ chở lưu lượng đến đích này. Nó không cấp quyền gì cả. Nếu chủ mạng chưa đồng ý rằng điện thoại này được tới mạng con đó, một tuyến đúng sẽ tạo ra cấu hình trông có vẻ đúng và một lần rơi im lặng tại cổng, rồi bạn sẽ dành giờ tiếp theo để sửa nhầm tệp.
Hãy lấy sự đồng ý đó trước, bằng văn bản nếu mạng có chủ. Sau đó ghi lại những gì bạn không làm: bạn không gán cho điện thoại một địa chỉ trong LAN đó, không đổi bộ lắng nghe của máy chủ, và không chọn site theo tên máy. Đó là bốn thay đổi khác nhau và chỉ cái đầu tiên là của bạn.
| The route gives you | The route does not give you |
|---|---|
| A destination prefix associated with the tunnel | Permission to forward at the gateway |
| A path for the phone's own traffic | A return route on the target host |
| A scope for the client's virtual interface | A name in DNS, or HTTPS identity |
Sửa hồ sơ mà ứng dụng khách thực sự tải
Với một ứng dụng khách tương thích nhập văn bản tuỳ chọn OpenVPN thông thường, phần thêm là một dòng:
route 10.60.0.0 255.255.255.0Thêm nó vào phần thân hồ sơ, gần các chỉ thị định tuyến khác, và giữ nguyên endpoint, chứng chỉ, xử lý khoá và các dòng xác minh của nhà cung cấp đúng như cũ. Đừng dán cả một ví dụ cũ để mượn một dòng: nén, đường dẫn tệp tuyệt đối và các thiết lập cipher lỗi thời đi kèm và sẽ khiến bạn tốn một phiên gỡ lỗi riêng.
Bước mà mọi người bỏ qua là quyền sở hữu tệp. Nếu ứng dụng đã nhập một hồ sơ, bản sao nó dùng là của ứng dụng, và sửa bản gốc đã tải về không thay đổi gì. Hãy dùng trình soạn thảo mà ứng dụng khách hỗ trợ, hoặc nhập lại tệp đã sửa qua đường cập nhật, và xác nhận tên hồ sơ đang hoạt động khi có nhiều tên giống nhau. Ghi lại bạn đã đổi cái nào.
Nếu hồ sơ đã có route-nopull, không có tuyến nào từ máy chủ được cài và mọi tiền tố điện thoại cần phải được liệt kê rõ ràng. Đó là thiết kế hợp lệ, nhưng nó có nghĩa là một dòng bị bỏ sót trông giống hệt một lần từ chối của máy chủ.
Kết nối lại và kiểm tra trên thiết bị
Ngắt kết nối trước, rồi kết nối lại đúng hồ sơ bạn đã sửa thay vì để ứng dụng khôi phục phiên trước. Mở nhật ký kết nối và xác nhận ứng dụng khách đã phân tích dòng mới; một chỉ thị tuyến bị giao diện bỏ qua là kết quả thường gặp khi sửa nhầm bản sao.
Kiểm tra đích bằng địa chỉ, không bằng tên. Một lần kiểm tra TCP tới một cổng dịch vụ đã biết cho nhiều thông tin hơn ping, vì nhiều máy trả lời ICMP trong khi cổng dịch vụ bị lọc. Nếu địa chỉ trả lời mà tên thì không, bạn có câu hỏi về trình phân giải chứ không phải định tuyến, và phần tiếp theo không dành cho bạn.
Ở đây cũng có hai bước kiểm tra phạm vi. VPN theo từng ứng dụng nghĩa là một tuyến địa chỉ có thể tồn tại trong khi ứng dụng bạn dùng để kiểm tra nằm ngoài tập được bao gồm, nên hãy kiểm tra bằng một ứng dụng thực sự ở trong. Và một tiền tố IPv4 không nói gì về đường IPv6; nếu dịch vụ là dual-stack, hãy thêm tuyến IPv6 tương ứng hoặc chờ ứng dụng khách thích một đường bạn không định trước.
Một kết quả phủ định đáng nhận ra sớm: nếu một tuyến full-tunnel đã phủ 0.0.0.0/0, tiền tố không thiếu và thêm lại không thay đổi gì. Phủ trùng không sửa được lần từ chối phía máy chủ hay một phản hồi bị thiếu.
Hoàn tất đường đi trên máy chủ
Ba điều phải đúng ngoài điện thoại. Cổng cần một tuyến tới đích và quyền chuyển nguồn của điện thoại về phía đó. Đích phải chấp nhận nguồn đó và trả phản hồi qua cổng, nếu không thiết kế cần một phép dịch có chủ đích ở lối ra. Tuỳ chọn route trong hướng dẫn OpenVPN bao quát chỉ thị phía ứng dụng khách; chuyển tiếp và định tuyến ngược là các thiết lập riêng trên máy riêng.
Nếu đích nằm sau một ứng dụng khách VPN khác chứ không ngay sau cổng, máy chủ cần một iroute cho mạng con của peer đó. Chỉ thị đó thuộc về máy chủ và mô tả ứng dụng khách nào sở hữu một tiền tố; điện thoại không thể cung cấp nó từ hồ sơ của mình, và không lượng sửa nào phía ứng dụng khách thay thế được.
Kiểm tra rõ ràng đường về. Một phản hồi đi ra bằng tuyến mặc định thay vì qua tunnel tạo ra triệu chứng nửa mở kinh điển: kết nối được thiết lập một chiều và không có gì quay lại. Dịch nguồn tại cổng là cách sửa hợp lệ khi đích không thể định tuyến ngược, nhưng đó là một quyết định chính sách với hệ quả riêng.
Hoàn tác và chấp nhận
Giữ hồ sơ trước đó trước khi sửa. Nếu thay đổi làm mọi thứ tệ hơn, khôi phục bản sao đó qua đúng đường nhập lại, kết nối lại và xác nhận hành vi cũ quay về — điều đó xác nhận bạn đã đổi đúng thứ bạn nghĩ. Một lần hoàn tác không khôi phục trạng thái cũ nghĩa là ứng dụng đang giữ bản sao thứ ba mà bạn chưa tìm ra.
Chấp nhận thay đổi khi bốn điều đúng, được kiểm tra theo thứ tự này sau một lần kết nối mới: đích trả lời trên cổng dịch vụ của nó, tên riêng phân giải được nếu có kỳ vọng, HTTPS vẫn xác thực đúng tên máy chủ dự định, và mọi thứ vẫn chạy sau khi khởi động lại hoặc chuyển từ Wi-Fi sang mạng di động. Bước kiểm tra cuối là bước bắt được một tuyến chỉ tồn tại cho tới khi Android dựng lại tunnel.
- Xác nhận chủ mạng cho phép đích trước khi sửa bất cứ thứ gì.
- Đặt tuyến vào hồ sơ mà ứng dụng khách tải, rồi nhập lại và kết nối lại.
- Xác minh qua cổng dịch vụ, trong phạm vi theo từng ứng dụng, cho đúng họ địa chỉ.
- Sửa chuyển tiếp, định tuyến ngược và iroute trên máy chủ, không phải trên điện thoại.
- Giữ một bản sao hoàn tác, và kiểm tra lại sau khi khởi động lại.