Script ngắt kết nối thường thất bại vì một lý do: nó nhắm sai chủ sở hữu. Đường hầm do OpenVPN GUI của cộng đồng quản lý thuộc phiên của GUI đó, đường hầm do một dịch vụ Windows khởi động thuộc về dịch vụ, còn OpenVPN Connect không thuộc về cả hai. Hãy làm các kiểm tra này theo thứ tự và dừng lại khi chủ sở hữu không rõ ràng. Gửi lệnh kill vì chủ sở hữu mơ hồ chính là cách việc ngắt một hồ sơ biến thành sự cố của toàn bộ trang.

Với kết nối do GUI quản lý, lệnh hữu ích là một thông điệp gửi GUI, không phải tín hiệu gửi openvpn.exe.

Đầu tiên, xác định chủ sở hữu

Hãy xem chương trình nào thực sự hiển thị trạng thái đã kết nối trước khi viết bất cứ điều gì. Biểu tượng trong khay hệ thống nghĩa là phiên GUI sở hữu nó. Mục dịch vụ nghĩa là dịch vụ sở hữu nó. Một cửa sổ ứng dụng riêng với danh sách hồ sơ của riêng nó nghĩa là không phải cả hai, và giao diện riêng theo phiên bản của nó được áp dụng.

Cũng kiểm tra tài khoản và phiên máy tính để bàn. Không nên cho rằng một tác vụ theo lịch chạy dưới người dùng khác, hoặc trong phiên không tương tác, lại điều khiển GUI mà người đã đăng nhập nhìn thấy. Sự không khớp đó tạo ra một lệnh kết thúc sạch sẽ và không thay đổi gì, và đó là kiểu hỏng hóc tốn kém nhất để truy tìm từ nhật ký.

Sau đó gửi lệnh ngắt của chính chủ sở hữu

Nếu GUI được cài ở đường dẫn trong ví dụ và có hồ sơ tên office, toàn bộ lệnh chỉ là một dòng:

"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --command disconnect office

Thay bằng đường dẫn cài đặt thực của bạn và tên cấu hình chính xác, kể cả chữ hoa chữ thường như GUI hiển thị. Tài liệu lệnh của dự án liệt kê các điều khiển GUI được hỗ trợ, và ví dụ này chỉ thuộc về OpenVPN GUI — đây không phải lệnh cho mọi ứng dụng có chữ OpenVPN trong tên.

Với đường hầm thuộc sở hữu dịch vụ, điều khiển đúng là dịch vụ, không phải tệp nhị phân GUI. Hãy xem dịch vụ đã cài và các hồ sơ nó quản lý trước khi dừng bất cứ thứ gì, vì một lần dừng có thể làm sập nhiều đường hầm cùng lúc và bạn sẽ không nhận được kết quả theo từng hồ sơ.

Kiểm tra để không có gì khác sập

GUI cũng ghi nhận lệnh disconnect_all, và phạm vi của nó chính là lý do nó là công cụ sai cho một script chỉ nên dừng office. Nếu bạn thấy muốn dùng nó cho đơn giản, hãy hỏi còn gì khác đang kết nối trên máy đó và người dùng sẽ nhận ra điều đó thế nào.

taskkill /F /IM openvpn.exe tệ hơn ở hai điểm. Nó chọn tiến trình theo tên tệp thực thi, và nó buộc chấm dứt, nên nó không thể hiện tên hồ sơ cũng không thể hiện trình tự ngắt thông thường của chủ sở hữu. Gọi đó là tắt máy gọn gàng là che giấu cả hai vấn đề sau một mã thoát duy nhất.

Dù chọn con đường nào, hãy xác minh phạm vi ảnh hưởng trước khi thay đổi: liệt kê các hồ sơ đang kết nối, ghi lại những hồ sơ cần tồn tại, và kiểm tra lại sau đó.

Xác nhận trạng thái, không phải mã thoát

Sau khi yêu cầu ngắt, hãy đọc trạng thái của kết nối được nêu tên thông qua chủ sở hữu của nó thay vì tin vào giá trị trả về của lệnh. Nếu bước tiếp theo cần mạng sau khi tháo gỡ, hãy chờ thay đổi trạng thái đó với thời gian chờ rõ ràng thay vì cho rằng việc dọn dẹp đã xong khi tiến trình trở lại. Một script chạy đua với việc tháo gỡ sẽ hỏng không thường xuyên và VPN sẽ bị đổ lỗi.

Nếu trạng thái không bao giờ thay đổi, chủ sở hữu có lẽ không phải người bạn đã nhắm tới. Hãy kiểm tra lại phiên và tài khoản trước khi chuyển sang một lệnh mạnh hơn.

Nên ghi gì vào nhật ký

Ghi tên hồ sơ, chủ sở hữu bạn đã nhắm tới và bối cảnh khởi chạy, cùng với trạng thái thu được. Đừng đổ toàn bộ cấu hình hay thông tin đăng nhập vào nhật ký tác vụ, và đừng ghi dòng lệnh nếu nó chứa đường dẫn tới tệp có bí mật.

Một thông báo lỗi nêu tên hồ sơ và bối cảnh là đủ để người tiếp theo tái tạo vấn đề. Một nhật ký chỉ ghi mã thoát chung sẽ đưa họ trở lại điểm đầu, và đó chính là nơi việc đoán bắt đầu lại.

Bài viết liên quan