وسيطة TUN/TAP غير صالحة: عدم تطابق تأطير OpenVPN
أخطاء الكتابة ذات الرمز 22 تعني عادةً أن الطرفين لا يتفقان على تأطير حزم البيانات، لا أن هناك عيبًا في برنامج التشغيل. قارن الضغط على الطرفين ثم نوع الجهاز.
يتحقق العميل من الهوية، ويقول السجل إنه متصل، ولا تعبر أي حزمة النفق. ينهي الخادم المحاولة برسالة write to TUN/TAP: Invalid argument (code=22)، وهي تبدو كعيب في برنامج التشغيل وليست كذلك عادةً. على الموجهات وخوادم Linux الصغيرة، تعني هذه السطر غالبًا أن الطرفين لا يتفقان على طريقة تأطير حزم البيانات، لذا يرفض النواة المخزن المؤقت المفكوك الذي أُعطي لها. لم يُختبر التوجيه عند تلك النقطة.
جدول التوجيه الصحيح واتفاق التأطير المعطوب يبدوان من جهة العميل متطابقين: متصل، ولا شيء يعمل.
النفق يقوم ولا شيء يعبره
تحدث أخطاء الكتابة على جهاز النفق بعد فك التشفير وقبل التوجيه. يفكّ الخادم الوسيط تشفير حزمة، ويسلّمها إلى الواجهة، فترفضها الواجهة لأن المخزن المؤقت لا يطابق ما يتوقعه ذلك الجهاز. الرمز 22 هو الرد العام على الوسيطة غير الصالحة، لذا المعلومة المفيدة هي الطبقة: هذه مسار البيانات وليست المصافحة. إذا كانت الحركة تعمل أمس وتوقفت اليوم دون تغيير في الإعدادات، فاشتبه في ترقية حزمة أو برنامج ثابت غيّرت قيمة افتراضية قبل أن تشتبه في الشبكة.
اقرأ السجل حول إعداد قناة البيانات بدلًا من الخطأ الأول. يظهر وضع الضغط المتفاوض عليه ونوع dev والخيارات المدفوعة كلها عند مستوى إسهاب أعلى، وهي تخبرك أي من حالات عدم التطابق الثلاث لديك.
الضغط تأطير وليس عرض نطاق
عند تفعيل الضغط، تحمل كل حزمة بيانات رأسًا يصف كيفية ترميزها، ويجب أن يتفق الطرفان على ذلك الرأس. الخادم الذي ما زال يحمل comp-lzo من إعداد نموذجي قديم، مقترنًا بعميل ليس لديه سطر ضغط، ينتج هذا الخطأ بالضبط: يتوقع الخادم رأسًا لم يكتبه العميل قط. خلط comp-lzo مع compress lz4-v2 يفشل بالطريقة نفسها، لأن الخوارزميات مختلفة رغم أن كليهما يُسمى ضغطًا. الخيار عقد تأطير وليس ميزة عرض نطاق على الروابط الحديثة.
يضيف سلوك الإصدارات فخًا. بدأت سلسلة 2.5 في إصدار تحذيرات إهمال لخيارات الضغط، ويرسم 2.6 خطًا بين رفض الحزم المضغوطة ومجرد ترك البيانات غير مضغوطة. لذا يمكن لتحديث برنامج ثابت للموجه أن يغيّر الاتفاق الفعلي دون أن يحرر أحد النفق.
وحّد الطرفين أو أزل الضغط من كليهما
عدّد كل توجيه ضغط: ملف الخادم، وأي خيارات مدفوعة، والملفات الخاصة بالعميل، وملف تعريف العميل. يحتاج comp-lzo على الخادم إلى الكلمة نفسها على العميل، و adaptive هو الافتراضي القديم الذي يعني عادةً الخيار المجرد في البنى الأقدم. مفتاح واجهة الرسوميات في الموجه الموسوم LZO أو الضغط يكتب الخيار نفسه، لذا اضبطه ليطابق بدلًا من خلط الخوارزميات. لا تفترض أن اسمًا مشابهًا متوافق.
إذا لم يكن الضغط مطلوبًا، فأزله عمدًا من الطرفين. يرفض allow-compression no على الخادم الحزم المضغوطة، لكن فقط بعد أن يتوقف العملاء عن تقديمها؛ وتطبيقه بينما لا يزال عميل يدفع الضغط يعيد إنشاء عدم التطابق في الاتجاه الآخر.
تحقق من الدفع ونوع الجهاز
يمكن للخادم دفع توجيه ضغط من ملفه الرئيسي أو من ملف خاص بالعميل، ويمكن للعميل إسقاط الخيارات المدفوعة باستخدام pull-filter. وصّل عميلًا واحدًا عند مستوى إسهاب 4، واقرأ ما أعلنه الخادم مقابل ما قبله العميل، ثم تأكد من أن أي مرشح لم يزله. إذا اتفق الطرفان الآن وبقي الخطأ، انظر إلى نوع الجهاز: لا يمكن لـ dev tap على طرف و dev tun على الطرف الآخر تبادل الإطارات، وترفض النواة الكتابة بالطريقة نفسها.
نشر TAP الجسري يحتاج جسرًا فعليًا على الخادم، لا مجرد اسم جهاز مختلف. إعادة تسمية واجهة إلى tap0 دون إضافتها إلى جسر تنتج جهازًا يقبل الكتابة ولا يذهب إلى أي مكان.
ثم تحقق بعميل واحد ووجهة واحدة: اعمل ping لعنوان النفق على الخادم، ثم لمضيف على شبكته المحلية. يثبت الأول قناة البيانات ويثبت الثاني إعادة التوجيه.