VPN kết nối lại khi lái xe: đổi sóng vô tuyến hay đổi IP?
Việc chuyển giao giữa các trạm có thể giữ nguyên đường IP. Hãy so sánh các ứng dụng di chuyển đường hầm với những ứng dụng dựng lại nó, và đọc sự kiện mạng, không phải chuyến đi.
Cuộc gọi bị ngắt khi bạn lái qua rìa thị trấn, và biểu tượng VPN biến mất cùng lúc. Thật dễ ghi nhận đó là “đổi trạm đã giết đường hầm”. Hai việc khác nhau đã xảy ra, và chỉ một trong số đó liên quan đến trạm phát. Việc chuyển giao vô tuyến có thể để địa chỉ IP, tuyến mặc định và phiên của bạn hoàn toàn nguyên vẹn, trong khi một thay đổi địa chỉ thực sự sẽ phá vỡ mọi đường hầm không thể di chuyển theo nó. So sánh cách các ứng dụng xử lý trường hợp thứ hai chính là bài tập hữu ích, vì nó cho bạn biết bạn đang thấy hành vi được thiết kế hay một lỗi.
Đổi trạm không nhất thiết là đổi địa chỉ
Mạng di động giữ phiên gói tin sống qua các lần chuyển giao miễn là neo di động của nhà mạng giữ nguyên. Liên kết vô tuyến thay đổi, đường hầm không nhận ra, và không có lần kết nối lại nào được xuất hiện trong bất kỳ nhật ký nào. Đây là trường hợp thông thường khi di chuyển trong một thành phố.
Điều làm thay đổi địa chỉ là việc di chuyển giữa các neo, chuyển từ Wi-Fi sang mạng di động, hoặc việc nhà mạng dựng lại đường hầm sau một khoảng gián đoạn dài. Những sự kiện đó thay thế địa chỉ nguồn mà các gói tin của bạn mang theo, và một đối tác VPN nhìn thấy một đối tác đã di chuyển.
Hệ quả thực tế là di chuyển không phải bằng chứng. Một thiết bị đã đi bốn mươi kilômét có thể đã giữ một địa chỉ suốt chặng đường, và một thiết bị đứng yên có thể đã đổi địa chỉ hai lần vì mạng quyết định như vậy. Ghi lại sự kiện là cách duy nhất để phân biệt hai trường hợp.
Hai thiết kế: di chuyển đường hầm hoặc dựng lại nó
Các ứng dụng khác nhau ở mức độ quan tâm đến việc nguồn bên ngoài đã thay đổi. Một số gắn đường hầm với địa chỉ mà nó được dựng trên đó và yêu cầu dựng lại hoàn toàn. Những ứng dụng khác xác thực từng gói tin một cách độc lập và chỉ cập nhật nơi gửi phản hồi.
| Mechanism | Behaviour after the source changes | What the user notices |
|---|---|---|
| WireGuard | Endpoint updated on the next authenticated packet | Usually nothing; the tunnel continues |
| IKEv2 with MOBIKE | Security association moves to the new address | Short pause, no re-authentication |
| OpenVPN over UDP with float | Peer address may change without a restart | Might survive, depending on timing |
| Client bound to one address | Session dies and is rebuilt | A visible reconnect and a new authentication |
Hàng trên cùng giải thích nhiều báo cáo khó hiểu. WireGuard không có phiên nào để phá vỡ: mỗi gói tin mang chỉ số của đối tác và được xác thực, nên một gói tin hợp lệ đến từ địa chỉ mới theo định nghĩa là từ đối tác đó, và điểm cuối được ghi nhận đi theo nó. Một ứng dụng hiển thị “đã kết nối” liên tục suốt chuyến đi là đang nói thật.
Hàng dưới cùng cũng không phải lỗi. Dựng lại phiên sẽ chạy lại xác thực với địa chỉ hiện tại, đúng là điều bạn muốn khi địa chỉ cũ giờ có thể thuộc về người khác.
Hãy quan sát sự kiện thay vì chuyển động
Trên Android, hệ thống con kết nối báo cáo các thay đổi mạng dưới dạng sự kiện, và đó là những gì bạn nên tương quan với hành vi của ứng dụng. Bản kết xuất dài dòng, nhưng phần liên quan là mạng mặc định và địa chỉ của nó:
adb shell dumpsys connectivity | grep -E 'NetworkAgentInfo|Default network'
adb shell ip -br addr show
adb logcat -b main -s Vpn:* | head -n 40
Về phía máy chủ có một phép đo trực tiếp cho trường hợp chuyển vùng. WireGuard lưu điểm cuối được xác thực gần nhất cho mỗi đối tác, nên thay đổi địa chỉ hiện ra như một giá trị đã đổi thay vì một lần kết nối lại:
sudo wg show wg0 endpoints
sudo wg show wg0 latest-handshakes
So sánh điểm cuối trước và sau chuyến đi. Nếu địa chỉ và cổng không đổi, đường hầm không cần làm gì và việc kết nối lại đến từ nơi khác, thường là ứng dụng. Nếu điểm cuối thay đổi trong khi dấu thời gian của quá trình bắt tay vẫn gần khoảng đổi khóa bình thường, đường hầm đã di chuyển chứ không khởi động lại.
Khởi động lại trông khác: dấu thời gian bắt tay được đặt lại về thời điểm kết nối lại, và ứng dụng ghi một chuỗi khởi tạo thay vì tiếp tục lặng lẽ.
Khi việc kết nối lại là hành vi đúng
Coi mọi lần kết nối lại là sự cố sẽ dẫn đến các cấu hình giữ những phiên đã chết sống mãi. Một đối tác có địa chỉ bị thay đổi vì mạng đã cấp lại không nên tiếp tục nhận lưu lượng cho ánh xạ cũ, và một ứng dụng tiếp tục trong im lặng có thể gửi vào hố đen trong khi biểu tượng vẫn xanh.
So sánh hai kiểu hỏng từ góc nhìn người dùng. Kết nối lại tốn vài giây và một lần xác thực mới. Một đường hầm cũ tốn một ứng dụng treo mà không báo lỗi, điều khó giải thích hơn nhiều và dễ bị báo cáo là “internet hỏng rồi” hơn nhiều.
Bên dưới còn ẩn một câu hỏi về chính sách. Trong khoảng giữa lúc mất một tuyến và lúc lập một tuyến khác, một số ứng dụng quay lại gửi lưu lượng trực tiếp. Ngăn điều đó là một kiểm soát tách biệt với phục hồi tự động, và một ứng dụng có thể giỏi cái này mà kém cái kia. Hãy quyết định bạn cần gì trước khi tinh chỉnh cả hai.
Hãy ghi lại trình tự quan sát được
Một báo cáo hữu ích nêu rõ nguồn của sự kiện: thay đổi mạng mặc định với địa chỉ mới, chuyển từ Wi-Fi sang mạng di động, hoặc chuyển giao mà hoàn toàn không đổi địa chỉ. Sau đó nó nói ứng dụng đã làm gì, với dấu thời gian từ phía máy chủ chứ không phải từ trí nhớ.
Nếu đường hầm đã di chuyển, hãy nói ra và ghi họ điểm cuối mới. Nếu nó được lập lại, hãy ghi xác thực có thành công ngay lần đầu hay không và khoảng gián đoạn kéo dài bao lâu. Ba dữ kiện đó phân biệt một thiết kế di động lành mạnh với một ứng dụng chao đảo giữa các mạng.
Và tránh cụm từ “đổi trạm” trừ khi nhật ký thiết bị thực sự chứng minh điều đó. Tài liệu kết nối của Android mô tả các lệnh gọi lại phân biệt tính khả dụng với thay đổi mạng mặc định, và chính sự phân biệt đó là thứ báo cáo của bạn cần. Mọi thứ còn lại chỉ là câu chuyện về việc lái xe.