Các tuyến VPN Mac bổ sung cần một chủ sở hữu, không phải một script đăng nhập
Một tuyến được thêm một lần lúc đăng nhập không phải là chính sách kết nối lại. Hãy trao cho các tiền tố từ xa một chủ sở hữu và quyết định cách chúng xuất hiện, thay đổi và biến mất cùng kết nối đó.
Tiếp cận một tiền tố riêng qua VPN là một yêu cầu có thời hạn: nó tồn tại chừng nào kết nối đó còn dùng được, và kết thúc khi kết nối kết thúc. Một script đăng nhập không thể diễn đạt điều đó, vì đăng nhập và việc dựng đường hầm là những thời điểm khác nhau, và đường hầm tồn tại lúc đăng nhập có thể không phải là đường hầm mang lưu lượng một phút sau đó. Quyết định đầu tiên không phải là chạy lệnh nào. Mà là thành phần nào sở hữu tiền tố.
Tiền tố cần một chủ sở hữu, không phải một thời điểm
Hãy bắt đầu bằng việc viết yêu cầu thành một câu có chủ ngữ: hãy tiếp cận 10.77.0.0/24 qua VPN Văn phòng khi kết nối đó còn hoạt động. Câu đó nêu tên tiền tố, kết nối và điều kiện, và loại ngay hai thứ thay thế phổ biến: một hook đăng nhập và một tên giao diện như ppp0 hoặc utun2.
Tên giao diện được gán khi chạy và không ổn định giữa các lần kết nối lại. Một hook khớp với tên đã thấy tuần trước hoặc sẽ không kích hoạt hoặc kích hoạt trên giao diện của người khác. Cả hai kết quả đều trông như lỗi định tuyến chứ không phải giả định cũ mà chúng vốn là. Cùng phản đối đó áp dụng cho bất kỳ script nào gắn với một cái tên chỉ tồn tại khi một đường hầm cụ thể đang hoạt động.
Dùng một nguồn ý định tuyến được hỗ trợ
Gateway, một hồ sơ được quản lý hoặc cơ chế tuyến được ghi chép của ứng dụng khách sở hữu là nơi đúng, khi cơ chế đó có thể diễn đạt yêu cầu. Cái nào áp dụng tùy thuộc vào giao thức và nhà cung cấp, và các khóa không đi lại giữa chúng, nên một giá trị cấu hình hồ sơ OpenVPN không cho bạn biết gì về ứng dụng khách L2TP hay IKEv2 gốc.
| Mechanism | Can carry extra prefixes | Who owns the lifetime |
|---|---|---|
| Gateway-pushed routes | Often, if the gateway is configured for it | The connection |
| Managed profile settings | Depends on the client and profile format | The profile |
| Provider tunnel settings | Yes, as included and excluded routes | The provider process |
| Manual command | Yes, once | Nobody |
Đối với nhà phát triển đường hầm gói, cài đặt đường hầm IPv4 của Apple công khai rõ ràng các tuyến được bao gồm và loại trừ, và IPv6 cũng có bản tương ứng. Đây là những API mà nhà cung cấp dùng, không phải bằng chứng rằng mọi bảng VPN gốc đều cung cấp cho quản trị viên một danh sách tuyến tùy ý. Nếu tổ hợp hiện tại không thể diễn đạt các tiền tố bạn cần, bước tiếp theo là một con đường cấu hình được nhà điều hành hỗ trợ, không phải một ứng dụng khác được cài với hy vọng nó cư xử tốt hơn.
Vòng đời bao gồm việc dọn dẹp
Đôi khi một trình trợ giúp bên ngoài thực sự cần thiết, và khi đó «thêm tuyến» là phần nhỏ nhất trong công việc của nó. Nó phải biết mình phục vụ kết nối nào và kết nối đó dùng giao diện nào, chờ cho trạng thái mạng liên quan ổn định, vẫn idempotent khi chạy hai lần liên tiếp, và không dọn dẹp bất cứ thứ gì nó không tự cài đặt.
Mệnh đề cuối cùng là mệnh đề gây đau. Một trình trợ giúp xóa mọi tuyến khớp với tiền tố văn phòng sớm muộn sẽ xóa một tuyến mà nó không thêm vào. Sự cố sinh ra từ đó bị đổ lỗi cho ứng dụng khách VPN, vì ứng dụng khách là phần người dùng nhìn thấy. Quyết định trình trợ giúp sở hữu gì trước khi viết nó rẻ hơn là giải thích sau đó tại sao một mạng con cục bộ ngừng trả lời.
Cuộc đua kết nối lại
Hãy nghĩ đến một lần kết nối lại nhanh. Phiên A sụp, phiên B lên và cài tuyến của nó, rồi cuối cùng việc dọn dẹp bị trì hoãn của A chạy. Nếu việc dọn dẹp đó xóa tuyến theo tiền tố, nó mang theo trạng thái hợp lệ của B, và kết nối vừa hoạt động một giây trước giờ định tuyến vào hư không.
Đây là một cuộc đua về quyền sở hữu, và thêm một giấc ngủ vào script chỉ thay đổi bên nào thắng. Cách khắc phục là làm cho việc dọn dẹp phụ thuộc vào danh tính: so sánh giao diện và phiên mà trình trợ giúp đã cài với những cái còn hiệu lực, và chỉ xóa khi khớp.
Cần kiểm thử gì, và một tuyến không thể làm gì
Việc nghiệm thu phải bao gồm bốn chuyển đổi: kết nối đầu tiên, kết nối lại trên giao diện khác, một lần thử kết nối thất bại, và lần ngắt kết nối cuối cùng. Sau mỗi lần, hãy đọc tuyến mà hệ thống thực sự chọn cho một địa chỉ ở phía xa, không phải tuyến bạn mong đợi.
route -n get 10.77.0.5
netstat -rn -f inet
Đưa cả những trường hợp khó chịu vào cùng lượt: IPv6 ở nơi cần thiết, một tiền tố cục bộ chồng lấn với tiền tố xa, và tuyến đến chính điểm cuối công khai của VPN, thứ phải tiếp tục hoạt động khi đường hầm đang lên. Rồi ghi lại một tuyến không phải là gì. Nó chọn gói; nó không cấp quyền ở phía xa và không tạo đường quay lại, và những thứ đó vẫn là những yêu cầu riêng với chủ sở hữu riêng.
Kết quả bạn muốn là một tiền tố đi theo chủ sở hữu kết nối được hỗ trợ của nó qua mọi chuyển đổi, chứ không phải một lệnh tình cờ thành công một lần trên chiếc máy nơi nó được viết.