Khởi động lại dịch vụ tại OpenVPN up: hooks tốt hơn tun0.device
Đơn vị thiết bị theo dõi giao diện, không phải kết nối. Chọn up hoặc route-up cho điều kiện dịch vụ cần, rồi gửi một lần khởi động lại không chặn.
Gắn một dịch vụ phụ thuộc vào tun0.device trông giống như đăng ký đường hầm, và không phải vậy. Đơn vị thiết bị phản ánh rằng giao diện tồn tại, điều này có thể vẫn đúng qua một kết nối thất bại và lần kết nối lại sau đó. Dịch vụ sau đó hành động sai thời điểm, hoặc không bao giờ, tùy thuộc vào việc giao diện có biến mất trong khoảng giữa hay không. Hook mô tả sự kiện mà bạn thực sự quan tâm là hook mà OpenVPN gọi, không phải hook mà systemd suy ra.
Quyết định điều kiện mà dịch vụ cần trước khi chọn trình kích hoạt, vì ba ứng viên không thể thay thế cho nhau.
Đơn vị thiết bị thực sự theo dõi điều gì
systemd tạo một đơn vị thiết bị từ góc nhìn của nhân về một giao diện mạng, vì vậy tun0.device trở nên hoạt động khi giao diện xuất hiện và không hoạt động khi nó bị gỡ bỏ. Với persist-tun, khởi động lại mềm giữ giao diện tại chỗ, nên đơn vị không bao giờ nhấp nháy và không có gì gắn với nó bị kích hoạt. Ngay cả khi không có tính bền vững, đơn vị không nói gì về tuyến, DNS hay liệu đầu xa có trả lời không.
Điều đó khiến nó trở thành vật thay thế kém cho 'VPN đã sẵn sàng'. Một trình lắng nghe chỉ cần địa chỉ cục bộ có thể hài lòng với sự tồn tại của giao diện, trong khi một dịch vụ gọi ứng dụng trên mạng xa cần tuyến và khả năng tiếp cận, điều mà đơn vị thiết bị không thể diễn đạt.
up, route-up và up-restart có nghĩa khác nhau
up chạy sau khi thiết bị TUN/TAP được mở và giao diện được cấu hình, đây là thời điểm đúng cho một trình lắng nghe liên kết địa chỉ được cấp. route-up chạy sau khi tuyến được cài đặt, chịu sự trì hoãn tuyến đã cấu hình, và phù hợp với công việc cần giai đoạn tuyến hoàn tất. Không cái nào chứng minh rằng ứng dụng xa trả lời. Chọn giữa chúng là câu hỏi về điều dịch vụ cần, không phải hook nào nghe có vẻ hoàn chỉnh hơn.
Với persist-tun, các lần khởi động lại dùng lại thiết bị, nên up không chạy lại trừ khi up-restart được đặt. Tùy chọn đó bật script up cho vòng đời khởi động lại đã được ghi tài liệu, và môi trường của nó bị thu hẹp so với lần khởi động đầu tiên. Một script giả định môi trường đầy đủ hoạt động ở kết nối đầu tiên và thất bại ở kết nối tiếp theo.
Gửi hành động mà không chờ nó
Một hook gọi systemctl restart một cách đồng bộ có thể bế tắc với một đơn vị có thứ tự chờ đường hầm. systemctl --no-block try-restart vpn-dependent.service đưa công việc vào hàng đợi và trở về, điều này ngăn hook chặn kết nối mà nó đang phản ứng. try-restart chỉ tác động lên một đơn vị đang chạy, trong khi restart cũng khởi động một đơn vị không hoạt động; hãy chọn có chủ đích, không theo thói quen.
Đưa vào hàng đợi không phải là xác minh. Hook trả về thành công ngay khi công việc được chấp nhận, nên việc kiểm tra phải diễn ra trong nhật ký của đơn vị đích hoặc ở trạng thái trình lắng nghe thực tế của nó.
Chính sách khởi động lại sống trong đơn vị, không phải trong hook
Một đơn vị oneshot với RemainAfterExit=yes vẫn hoạt động sau khi lệnh của nó kết thúc, và yêu cầu khởi động thứ hai không làm gì vì systemd coi nó đã được khởi động. Đó là một thuộc tính cần thiết kế xoay quanh, không phải khuyết điểm cần lách bằng các lệnh khởi động lặp lại. Nếu hành động phải chạy theo từng kết nối, đơn vị cần một hình dạng cho phép điều đó.
After= sắp xếp các đơn vị, và BindsTo= ràng buộc vòng đời, nhưng không cái nào có nghĩa 'khởi động lại thứ này mỗi khi VPN kết nối lại'. Một đơn vị gắn với đường hầm dừng khi đường hầm dừng; nó không tự khởi động lại khi đường hầm trở lại trừ khi có thứ gì đó khởi động nó lần nữa.
Kiểm tra ba lần kết nối lại, không phải một
Khởi động nguội, khởi động lại toàn bộ ứng dụng khách và kết nối lại mềm mỗi cái luyện một đường khác nhau. Kết nối lại mềm là cái phơi bày up-restart bị thiếu, môi trường bị thu hẹp hoặc một đơn vị thiết bị chưa bao giờ trở nên không hoạt động. Chạy cả ba và xác nhận cả hai hướng: dịch vụ hành động khi đường hầm lên, và nó không khởi động lại khi có thay đổi liên kết không liên quan như chuyển vùng Wi-Fi.
Giữ một đường phục hồi độc lập khi dịch vụ phụ thuộc mang quyền truy cập quản trị của chính bạn. Một hook khởi động lại thứ mà bạn đang kết nối qua là thay đổi có thể khóa bạn ở ngoài.