TUN/TAP: đối số không hợp lệ — không khớp khung OpenVPN
Lỗi ghi với mã 22 thường có nghĩa là hai đầu không thống nhất về cách đóng khung gói dữ liệu, không phải lỗi trình điều khiển. So sánh nén ở cả hai đầu, sau đó đến loại thiết bị.
Máy khách xác thực, nhật ký báo đã kết nối, và không có gói nào đi qua đường hầm. Máy chủ kết thúc lần thử bằng write to TUN/TAP: Invalid argument (code=22), trông như lỗi trình điều khiển và thường không phải. Trên router và máy chủ Linux nhỏ, dòng đó thường có nghĩa là hai đầu không thống nhất về cách đóng khung gói dữ liệu, nên nhân từ chối bộ đệm đã giải mã được giao. Việc định tuyến chưa được kiểm tra tại thời điểm đó.
Bảng định tuyến đúng và thỏa thuận đóng khung hỏng trông giống nhau từ phía máy khách: đã kết nối, và không có gì hoạt động.
Đường hầm dựng lên và không có gì đi qua
Lỗi ghi trên thiết bị đường hầm xảy ra sau khi giải mã và trước khi định tuyến. Tiến trình nền giải mã một gói, giao cho giao diện, và giao diện từ chối vì bộ đệm không khớp với điều thiết bị đó mong đợi. Mã 22 là câu trả lời chung cho đối số không hợp lệ, nên thông tin hữu ích là lớp: đây là đường dữ liệu chứ không phải bắt tay. Nếu lưu lượng chạy hôm qua và dừng hôm nay mà không đổi cấu hình, hãy nghi ngờ bản cập nhật gói hoặc firmware đã dịch chuyển một giá trị mặc định trước khi nghi ngờ mạng.
Đọc nhật ký quanh phần thiết lập kênh dữ liệu thay vì lỗi đầu tiên. Chế độ nén đã thương lượng, loại dev và các tùy chọn được đẩy lên đều xuất hiện ở mức chi tiết cao hơn, và chúng cho bạn biết bạn có sự không khớp nào trong ba loại.
Nén là đóng khung, không phải băng thông
Khi bật nén, mỗi gói dữ liệu mang một tiêu đề mô tả cách nó được mã hóa, và cả hai đầu phải thống nhất về tiêu đề đó. Một máy chủ còn mang comp-lzo từ cấu hình mẫu cũ, ghép với máy khách không có dòng nén, tạo ra đúng lỗi này: máy chủ mong đợi một tiêu đề mà máy khách chưa bao giờ ghi. Trộn comp-lzo với compress lz4-v2 cũng thất bại theo cách tương tự, vì thuật toán khác nhau dù cả hai đều được gọi là nén. Tùy chọn này là hợp đồng đóng khung chứ không phải tính năng băng thông trên các liên kết hiện đại.
Hành vi phiên bản thêm một cái bẫy. Dòng 2.5 bắt đầu phát cảnh báo lỗi thời cho các tùy chọn nén, và 2.6 vạch ranh giới giữa từ chối gói nén và chỉ để dữ liệu không nén. Do đó bản cập nhật firmware router có thể thay đổi thỏa thuận hiệu lực mà không ai sửa đường hầm.
Căn chỉnh cả hai đầu hoặc bỏ khỏi cả hai
Liệt kê mọi chỉ thị nén: tệp máy chủ, mọi tùy chọn được đẩy, tệp riêng cho máy khách và hồ sơ máy khách. comp-lzo trên máy chủ cần cùng từ trên máy khách, và adaptive là giá trị mặc định kế thừa mà tùy chọn trần thường có nghĩa trên các bản dựng cũ. Công tắc GUI của router có nhãn LZO hoặc nén cũng ghi cùng tùy chọn đó, nên đặt cho khớp thay vì trộn thuật toán. Đừng cho rằng một cái tên trông giống là tương thích.
Nếu không muốn nén, hãy cố ý bỏ nó khỏi cả hai đầu. allow-compression no trên máy chủ từ chối các gói nén, nhưng chỉ sau khi máy khách ngừng cung cấp chúng; áp dụng khi máy khách vẫn đẩy nén sẽ tái tạo sự không khớp theo hướng ngược lại.
Kiểm tra việc đẩy và loại thiết bị
Máy chủ có thể đẩy chỉ thị nén từ tệp chính hoặc từ tệp riêng cho máy khách, và máy khách có thể bỏ các tùy chọn được đẩy bằng pull-filter. Kết nối một máy khách ở mức chi tiết 4, đọc những gì máy chủ công bố so với những gì máy khách chấp nhận, rồi xác nhận không có bộ lọc nào loại bỏ nó. Nếu hai bên đã thống nhất mà lỗi vẫn còn, xem loại thiết bị: dev tap ở một đầu và dev tun ở đầu kia không thể trao đổi khung, và nhân cũng từ chối việc ghi theo cách tương tự.
Triển khai TAP có cầu nối cần một cầu thật trên máy chủ, không chỉ một tên thiết bị khác. Đổi tên giao diện thành tap0 mà không thêm vào cầu nối sẽ tạo ra thiết bị chấp nhận việc ghi và không đi đến đâu.
Sau đó xác minh với một máy khách và một đích: ping địa chỉ đường hầm của máy chủ, rồi một máy chủ trong LAN của nó. Cái đầu chứng minh kênh dữ liệu và cái sau chứng minh việc chuyển tiếp.