Cron khởi động lại một VPN hoàn toàn khỏe mạnh mỗi mười phút, và cùng công việc đó để một VPN đã chết chạy suốt một tuần. Cả hai lỗi đều đến từ việc coi «hoạt động» là một sự thật duy nhất trong khi nó ít nhất là bốn. Một thiết bị có thể được bật về mặt quản trị, được định tuyến đúng, được mã hóa đầy đủ mà vẫn không mang theo gì hữu ích. Hãy tách các quan sát trước, và việc kiểm tra gần như tự viết ra.

Cờ liên kết mô tả thiết bị, không phải đường đi

Phép kiểm tra mà mọi người sao chép tìm một địa chỉ phần cứng toàn số không. Thủ thuật đó tách một giao diện thật khỏi một phần giữ chỗ ở một số trình điều khiển và không chứng minh gì ở phần còn lại, vì thiết bị tun không có MAC nào để báo cáo. ip -brief link show tun0 thay vào đó cho ra các cờ: UP nghĩa là quản trị viên đã bật thiết bị, và LOWER_UP nghĩa là trình điều khiển coi liên kết là dùng được. Đọc cùng nhau, chúng cho biết thiết bị tồn tại và không bị tắt về mặt quản trị. Không cờ nào cho biết gói tin có nơi để đi.

OpenVPN tạo thiết bị tun của mình trước khi các tuyến được cài đặt, nên các cờ có thể trông hoàn hảo trong khi chưa có gì được định tuyến. Hãy coi chúng là điều kiện tiên quyết, không bao giờ là câu trả lời.

Hỏi gói tin sẽ đi đâu

Tra cứu tuyến trả lời câu hỏi mà các cờ không thể. ip route get 10.8.0.1 from 10.8.0.2 nêu tên giao diện, địa chỉ nguồn và bảng mà nhân sẽ dùng, và đó chính xác là thứ mà một đường hầm chia đôi phải được kiểm tra. Không có địa chỉ nguồn thì bạn đang hỏi điều khác, và với định tuyến theo chính sách câu trả lời có thể khác nhau tùy nguồn. Đây là phép thử trung thực rẻ nhất, vì nó hỏi đúng những quy tắc mà lưu lượng của bạn sẽ dùng.

Với WireGuard, hãy thêm bắt tay. wg show in dấu thời gian của lần bắt tay gần nhất cho mỗi peer, và một dấu thời gian đã ngừng tiến lên nghĩa là peer đã biến mất, bất kể các cờ giao diện nói gì. Một giao diện đã cấu hình mà không có bắt tay gần đây là một trong những dương tính giả phổ biến nhất trong giám sát tự làm.

Bảng 220 kể câu chuyện của IPsec

strongSwan cài các tuyến cho những bộ chọn đã thương lượng vào bảng 220 khi việc cài tuyến được bật. ip route list table 220 do đó tách phần đã thương lượng khỏi phần đã định tuyến: một bảng trống bên cạnh một kết nối đã tải nghĩa là các SA IKE và CHILD đã lên trong khi không có lưu lượng nào được hướng vào chúng. Hãy kiểm tra ip xfrm state bên cạnh, vì nó liệt kê các liên kết an ninh đã cài và các điểm cuối của chúng.

Chính sách bẫy là trường hợp cần để ý. Nó chờ lưu lượng thú vị thay vì định tuyến nó, nên bảng vẫn trống cho đến khi một thứ gì đó kích hoạt đường hầm.

Trạng thái của trình quản lý và trạng thái của daemon là những danh sách khác nhau

NetworkManager chỉ liệt kê những kết nối mà nó sở hữu. nmcli -t -f NAME,TYPE connection show --active không trả về gì cho một đường hầm được khởi động trực tiếp bởi wg-quick hoặc bởi một daemon OpenVPN.

Sự phân biệt đó quan trọng khi một script phải quyết định hỏi trình quản lý nào trong hai. Hãy chọn cái thực sự sở hữu đường hầm trên máy chủ này và bỏ qua sự im lặng của cái kia. Nếu cả hai cùng tồn tại, hãy quyết định cái nào có thẩm quyền và vô hiệu hóa cái thứ hai, vì hai trình quản lý ghi lại các tuyến trên một giao diện sẽ tạo ra những lỗi mà không ai có thể tái tạo. Một mục bị thiếu là thông tin về trình quản lý, không phải về đường hầm.

Đặt bước tiếp theo phụ thuộc vào phép thử mà nó cần

Thăm dò một cổng UDP không chứng minh gì về sự sẵn sàng, vì UDP không có bắt tay và nc -u thành công ngay khi gói tin rời đi. Hãy thử cái mà bước tiếp theo thực sự tiêu thụ: một kết nối TCP tới cổng được chuyển tiếp, một yêu cầu tới máy chủ bên trong đường hầm, một tên chỉ phân giải được ở đó. Giới hạn thời gian chờ bằng một thời gian chờ và số lần thử, và thất bại ầm ĩ khi nó hết.

Các móc tốt hơn thăm dò khi ứng dụng cung cấp chúng. --up và --down các script của OpenVPN chạy sau khi giao diện đổi trạng thái, điều này loại bỏ hoàn toàn cuộc đua, nhưng chúng chạy với những đặc quyền mà daemon đã giữ lại. Nếu OpenVPN đã hạ xuống một tài khoản không có đặc quyền thông qua user và group, móc chạy với tư cách tài khoản đó. Khi đó việc khởi động lại một dịch vụ hệ thống cần sudo để cho phép đúng lệnh đó. Hãy giao việc thử lại cho trình quản lý dịch vụ thay vì một vòng lặp cron: một chính sách khởi động lại có giới hạn với giới hạn khởi động sẽ phơi bày một đường hầm hỏng, trong khi một vòng lặp không giới hạn che giấu nó vô thời hạn.

Bài viết liên quan