Tuyến đường cố định cho VPN trên Mac: networksetup hay một hook kết nối?
Một tuyến đường gõ lại sau mỗi lần kết nối lại không phải là chính sách. Hãy quyết định xem tiền tố thuộc về dịch vụ VPN, một thử nghiệm tạm thời hay một hook cho các địa chỉ chỉ biết được sau khi đàm phán.
Một tuyến đường gõ lại sau mỗi lần kết nối giải quyết khoảnh khắc chứ không phải cả tuần. Trên macOS, lựa chọn bền vững thường là một tiền tố được lưu cùng dịch vụ VPN, vì dịch vụ cài lại nó mỗi lần kết nối và gỡ bỏ khi dịch vụ ngừng chạy. Các lựa chọn thay thế là một route add tạm thời để thử nghiệm và một hook kết nối cho các địa chỉ chỉ biết được sau khi đàm phán.
Quyết định xem tuyến đường thuộc dịch vụ hay phiên
Hỏi xem tiền tố phụ thuộc vào điều gì. Nếu đó là một mạng riêng cố định sau một dịch vụ VPN gốc, tuyến đường thuộc về dịch vụ đó. Nếu nó phụ thuộc vào một địa chỉ đối tác thay đổi mỗi lần kết nối, một hook hoặc một tác vụ điều khiển theo trạng thái có thể là chủ sở hữu tốt hơn. Nếu bạn chỉ kiểm tra một đường đi trong năm phút tới, một tuyến đường tạm thời là đủ.
Tuyến đường gắn với dịch vụ có vòng đời sạch nhất. Nó xuất hiện cùng dịch vụ và biến mất khi dịch vụ không được kết nối, nên nó không thể sống lâu hơn đường hầm mà nó trỏ tới. Thuộc tính đó đáng giá hơn sự tiện lợi của một lệnh một dòng.
Một tuyến đường gắn với phiên thuộc về giao diện, và con số đó thay đổi mà không báo trước. Việc kết nối lại có thể cấp cho đường hầm một tên utun khác với phiên trước, khiến một lệnh được mã hóa cứng trở thành một tuyến đường không trỏ tới đâu hoặc, tệ hơn, trỏ tới một đường hầm khác.
Đọc trạng thái tuyến đường và dịch vụ hiện tại
Bắt đầu với những tên mà hệ thống thực sự dùng. Tên dịch vụ trong Cài đặt Mạng là định danh cho các lệnh bên dưới, và bảng tuyến đường hiện tại cho thấy những gì máy khách đã kết nối đã cài đặt. Đọc cả hai khi đường hầm đang hoạt động.
scutil --nc list
networksetup -listnetworkserviceorder
netstat -rn | head -30
route get 10.20.5.5
Tra cứu đó cho thấy cổng và giao diện mà nhân sẽ chọn cho địa chỉ này ngay lúc này. Nếu nó đã chọn đường hầm, tiền tố đã được bao phủ và một tuyến đường mới sẽ là thừa. Nếu nó chọn bộ định tuyến cục bộ, đường hầm thiếu tiền tố đó.
Ghi lại địa chỉ đối tác khi đang kết nối. Nó trở thành giá trị cổng trong tuyến đường gắn với dịch vụ, và thường là đích được hiển thị cho tuyến đường mặc định của đường hầm trong netstat -rn.
Lưu tiền tố bằng networksetup
Công cụ networksetup gắn thêm các tuyến đường vào một dịch vụ mạng. Với một dịch vụ tên OfficeVPN và một tiền tố riêng tiếp cận qua đối tác của đường hầm, dạng là:
sudo networksetup -setadditionalroutes OfficeVPN 10.20.0.0 255.255.0.0 10.8.0.6
networksetup -getadditionalroutes OfficeVPN
Mỗi bộ ba sau tên dịch vụ cho một đích, mặt nạ mạng của nó và đối tác của đường hầm làm cổng. Một lần gọi có thể mang nhiều tiền tố, và một lần gọi rỗng xóa danh sách đã lưu. Trình đọc là bước xác minh; nếu danh sách rỗng, thiết lập đã không áp dụng cho dịch vụ mà bạn nghĩ.
Cổng phải là đối tác của đường hầm, không phải bộ định tuyến vật lý. Một tuyến đường nêu cổng cục bộ sẽ gửi tiền tố riêng ra qua giao diện vật lý, đó là lỗi ban đầu với thêm các bước. Một đối tác cũ là lý do phổ biến nhất khiến một tuyến đường trông đúng không bao giờ mang lưu lượng. Đọc lại đối tác từ trạng thái đã kết nối thay vì sao chép địa chỉ từ một ghi chú cũ.
Chỉ dùng route add cho một thử nghiệm
Một tuyến đường trực tiếp hữu ích để chứng minh một tiền tố hoạt động trước khi biến nó thành vĩnh viễn. Dạng giao diện tránh việc tra cứu cổng:
sudo route -n add -net 10.20.0.0/16 -interface utun4
Tuyến đường biến mất ở lần kết nối lại tiếp theo và phụ thuộc vào số giao diện tồn tại hôm nay. Điều đó khiến nó thành chẩn đoán, không phải triển khai. Nếu thử nghiệm hoạt động mà tuyến đường gắn với dịch vụ không, hãy so sánh giá trị cổng trước; đó là trường thường sai nhất.
Hãy cẩn thận với những lời khuyên thay thế tuyến đường mặc định của VPN để ép buộc phân tách. Một máy khách áp đặt đường hầm đầy đủ có thể cài lại các tuyến đường của nó sau khi kết nối lại hoặc làm mới chính sách, nên thay đổi thủ công bị hủy bỏ trong im lặng. Vài tiền tố riêng là một vấn đề định tuyến; giữ toàn bộ lưu lượng internet ở cục bộ trái với chính sách đường hầm đầy đủ là quyết định phía máy chủ.
Chỉ chọn hook khi địa chỉ được đàm phán
Đối với các liên kết dựa trên PPP như L2TP, macOS thực thi /etc/ppp/ip-up khi liên kết được thiết lập. Tập lệnh nhận tên giao diện và các địa chỉ cục bộ, từ xa đã đàm phán, nên nó có thể thêm một tuyến đường phụ thuộc vào đối tác mà máy chủ đã cấp. Đó chính là trường hợp mà một tuyến đường dịch vụ cố định không thể diễn đạt.
IKEv2 và máy khách của nhà cung cấp có thể không dùng con đường PPP đó chút nào, nghĩa là tập lệnh có thể im lặng suốt phiên. Khi điều đó xảy ra, một tác vụ launchd hỏi scutil --nc status và hành động khi trạng thái thay đổi là cơ chế tương đương, với độ trễ nhỏ.
Dù bạn dùng hook nào, hãy làm nó idempotent và chỉ để nó xóa những tuyến đường do chính nó tạo ra. Một tập lệnh xóa mọi tuyến đường nhắc đến đường hầm cuối cùng sẽ xóa tuyến đường giữ cho máy chủ VPN có thể truy cập, và kết nối sẽ rớt ngay khi nó thành công.
Kết thúc bằng việc kiểm tra đích riêng, duyệt web thông thường và một chu kỳ kết nối lại hoặc ngủ. Sau đó kiểm tra scutil --dns, vì phân giải tên là một chính sách riêng và một tuyến đường hoạt động không chứng minh rằng các tên riêng được phân giải.