Dòng này lặp lại vài giây một lần và trông như nguyên nhân của mọi thứ: một gói tên là control hard reset, đến từ một client không bao giờ đi tới đâu. Đây không phải lỗi. Đó là thông điệp đầu tiên của một phiên mới, và việc lặp lại là triệu chứng của một thứ khác đang hỏng ở phía sau. Tách điều nhãn nói khỏi điều kết nối đã làm sau đó chính là toàn bộ chẩn đoán.

Opcode chỉ ra một vị trí trong giao thức

OpenVPN ghép nhiều loại gói trên một socket, và opcode cho bên nhận biết mình đang giữ loại nào. Gói hard-reset mở một phiên, gói điều khiển mang vật liệu bắt tay, các xác nhận xác nhận đã nhận, và gói dữ liệu mang tải trọng của đường hầm. Đọc byte đầu tiên cho biết gói nằm ở đâu trong trao đổi đó, và định nghĩa gói trong mã nguồn gọi tên từng họ gói một cách tường minh.

Đó là tất cả những gì nó nói. Một gói được gắn nhãn là thiết lập lại ban đầu của client chứng minh gói đã tới điểm quan sát của bạn và bên kia muốn bắt đầu một phiên. Nó không chứng minh client đã tin chứng chỉ của bạn, rằng thông tin đăng nhập của nó đã được chấp nhận, hay rằng một kênh dữ liệu đã từng dùng được.

Hậu tố V2 là dấu thế hệ giao thức cho họ gói đó, không phải phiên bản sản phẩm và cũng không phải thiết lập bạn cài. Không có gì trong tên liên quan đến việc thiết lập lại đường hầm, khởi động lại dịch vụ hay xoá bộ nhớ đệm.

Điều client thực sự làm vào lúc đó

Client mở một định danh phiên mà hai đầu sẽ gắn lưu lượng điều khiển tiếp theo vào. Khi bảo vệ kênh điều khiển được cấu hình, gói đầu tiên đó đã mang HMAC cho phép bên nhận quyết định có đáng bỏ công cho phần còn lại của trao đổi hay không. Bên nhận không xác minh được sẽ âm thầm bỏ gói, đó là lý do một khoá chia sẻ sai trông như client nói vào hư không.

Chưa có gì người dùng nhìn thấy xảy ra. Chưa chứng chỉ nào được xác thực, chưa tên người dùng nào được đưa ra và chưa địa chỉ đường hầm nào được cấp. Thiết lập lại là phần mở đầu của bắt tay, nên mọi phán đoán về kết nối ở thời điểm này là quá sớm.

Trong một vòng kết nối lại không hoạt động, chi tiết đáng chú ý là khoảng thời gian. Client thử lại theo chu kỳ cố định mà không tiến triển thường bị từ chối trước khi có thể đi tiếp, và lý do nằm trong nhật ký của bên kia, không phải trong tên gói.

Lỗi thật nằm ở đâu sau khi thiết lập lại

Đọc hai nhật ký cạnh nhau và tìm sự kiện đầu tiên không phải thiết lập lại. Ở client, lỗi xác thực chứng chỉ được báo với lý do cụ thể: chứng chỉ hết hạn, tên không khớp hoặc nhà phát hành không rõ. Ở máy chủ, việc từ chối thông tin đăng nhập được báo là lỗi xác thực với lý do riêng. Cả hai đều cụ thể hơn nhiều so với cái nhìn lặp lại của máy chủ về các lần thử mới.

Ghép một lần thử theo dấu thời gian thay vì đọc từng nhật ký riêng lẻ, vì cùng một lỗi xuất hiện ở cả hai nơi với cách diễn đạt và mức nghiêm trọng khác nhau. Bên bỏ cuộc thường nói lý do.

Nếu không bên nào báo từ chối mà trao đổi vẫn tắc, ranh giới là khả năng tiếp cận chứ không phải tin cậy. Tường lửa bỏ hướng về, thiết bị dịch địa chỉ mạng hết hạn ánh xạ, hay vấn đề MTU giết các gói bắt tay lớn hơn — tất cả đều tạo ra một trao đổi bị kẹt mà không có lỗi xác thực nào.

grep -nE 'VERIFY|AUTH_FAILED|TLS Error|SIGUSR1' /var/log/openvpn*.log

Cuộc tìm kiếm đó không phải chẩn đoán tự thân, nhưng nó đưa bạn từ từ vựng giao thức sang một lớp lỗi thực sự chỉ trong một bước.

Vì sao tắt xác minh là phản xạ sai

Khi thiết lập lại cứ xuất hiện, cách sửa trông nhanh nhất là tắt xác minh chứng chỉ hoặc bỏ bảo vệ kênh điều khiển để có cái gì đó kết nối được. Điều đó đổi một lỗi chẩn đoán được lấy một lỗi không chẩn đoán được, và để bản triển khai chấp nhận những bên mà nó được xây để từ chối.

Thay vào đó hãy đổi ranh giới đã thực sự hỏng. Vấn đề tin cậy thuộc về cơ quan chứng thực và hồ sơ tham chiếu tới nó. Vấn đề thời gian thuộc về đồng hồ. Vấn đề thông tin đăng nhập thuộc về phần phụ trợ xác thực đã từ chối nó, và bên không tới được thuộc về đường đi giữa hai máy chủ.

Opcode hữu ích trong một cuộc trò chuyện hỗ trợ ở một điểm: nó cho bạn biết bên kia đã đi đủ xa để thử. Điều xảy ra sau đó là điều bạn cần biết, và nó được ghi trong nhật ký nào ghi lại lần từ chối cụ thể đầu tiên. Hãy bắt đầu từ đó, và dòng thiết lập lại thôi trông như nguyên nhân và bắt đầu trông như một dấu thời gian.

Bài viết liên quan