Tuyến do OpenVPN đẩy không được cài đặt: thời điểm, quyền hoặc chính sách
Một tuyến được đẩy có thể biến mất trong cuộc đua thời điểm, thiếu quyền hoặc chính sách của máy khách. Trước tiên hãy so sánh danh sách đẩy của máy chủ với bảng thực tế.
Máy chủ nói rằng nó đã đẩy tuyến, máy khách nói rằng nó đã kết nối, và đích đến vẫn không thể tiếp cận. Đúng ba nguyên nhân tạo ra bức tranh đó. Việc thêm tuyến đã chạy trước khi thiết bị tồn tại, máy khách thiếu quyền thay đổi bảng, hoặc một chính sách bảo máy khách bỏ qua các tùy chọn được đẩy.
Từ bên ngoài chúng trông giống nhau và cần những cách sửa khác nhau. Đọc nhật ký máy khách tại điểm ra quyết định về tuyến.
Chứng minh rằng tuyến vắng mặt, không chỉ là bị hỏng
Bắt đầu bằng việc chứng minh tuyến vắng mặt chứ không phải bị hỏng. Trên Linux, ip route show dev tun0 liệt kê những gì máy khách đã cài trên thiết bị đường hầm. Trên Windows, route print hoặc Get-NetRoute hiển thị điều tương tự dưới dạng bảng.
Một tuyến tồn tại nhưng không chuyển tiếp lưu lượng là vấn đề khác. Điều đó chuyển cuộc điều tra sang các quy tắc chuyển tiếp và tường lửa, không phải sang việc cài đặt tuyến.
Thời điểm: việc thêm đã chạy trước khi thiết bị tồn tại
Máy khách phân tích PUSH_REPLY của máy chủ sau khi kênh điều khiển đã lên và sau khi đã cấu hình giao diện. Chỉ khi đó nó mới chạm vào bảng định tuyến, bằng bất kỳ cơ chế nào nền tảng cung cấp. Linux đi qua netlink; Windows dùng API cần token nâng quyền. Một script hoặc máy khách thêm tuyến ngay khi đọc cấu hình có thể chạy trước khi thiết bị TUN/TAP tồn tại, và nhân từ chối việc thêm.
Cùng cuộc đua đó giải thích vì sao tuyến gõ tay hoạt động còn tuyến tự động thì không: khi bạn gõ nó, giao diện đã lên.
route-delay tồn tại cho trường hợp này, và route-up chỉ định một script chạy sau khi giao diện và các tuyến được cấu hình. Hãy đặt các tuyến phụ thuộc vào địa chỉ đường hầm trong hook đó chứ không phải ở giai đoạn sớm.
Quyền: ai được thay đổi bảng
Thay đổi bảng định tuyến của Windows cần token nâng quyền. Một GUI do người dùng thường khởi chạy có thể đặt địa chỉ bộ chuyển đổi qua dịch vụ mà vẫn không thể thêm tuyến. Nhật ký khi đó hiển thị lỗi kiểu truy cập bị từ chối thay vì thiếu lần đẩy.
Khởi chạy GUI với quyền quản trị, hoặc dùng máy khách dựa trên dịch vụ, thay đổi kết quả đó. Một tác vụ theo lịch khởi chạy máy khách mà không có token cần thiết thì không.
Trước khi thay đổi bất cứ điều gì, hãy kiểm tra máy khách thực sự chạy dưới tài khoản nào. Phiên bản và chế độ dịch vụ quyết định những nguyên nhân nào là khả thi, nên hãy ghi cả hai bên cạnh đầu ra của tuyến.
Chính sách: các tuyến được đẩy có thể bị loại bỏ có chủ đích
route-nopull khiến máy khách bỏ qua các tuyến mà máy chủ đẩy, kể cả tuyến mặc định được đẩy, trong khi địa chỉ đường hầm vẫn được chấp nhận. Các tùy chọn DNS và DHCP được đẩy bị loại bỏ bởi cùng chỉ thị đó. Máy khách như vậy không bị lỗi; nó mong đợi các dòng tuyến rõ ràng trong cấu hình của chính nó.
route-noexec là một kiểm soát khác: nó ngăn máy khách thực thi thay đổi tuyến hoàn toàn. Một topology mà máy khách không thể ánh xạ có thể cho kết quả tương tự, với tuyến được ghi là bị từ chối thay vì được thêm. Đọc dòng nhật ký báo cáo quyết định thay vì đoán nguyên nhân nào trong ba nguyên nhân áp dụng. Sau đó kiểm tra hồ sơ hiệu lực, vì một trình nhập hoặc công cụ quản lý có thể thêm các tùy chọn mà người dùng chưa từng chỉnh sửa.
Một hồ sơ trông sạch trong trình soạn thảo văn bản vẫn có thể mang một chỉ thị được thêm vào lúc chạy.
So sánh danh sách đẩy với bảng
Sau khi kết nối, đặt danh sách đẩy của máy chủ bên cạnh bảng của máy khách. Trên Linux đó là ip route show dev tun0; trên Windows, route print hoặc Get-NetRoute. Nếu tuyến vắng mặt, hãy sửa việc cài đặt trước. Nếu nó tồn tại mà lưu lượng thất bại, hãy chuyển sang chính sách chuyển tiếp và tường lửa.
Ghi lại phiên bản máy khách, tài khoản mà nó chạy dưới và liệu nó có dựa trên dịch vụ hay không. Ba sự thật đó cho người tiếp theo biết những nguyên nhân nào đã bị loại.