توجيه OpenVPN واحد في كل سطر، ولماذا يكذب التفاف الأسطر
الشاشة ذات الالتفاف اللين ليست سطرًا جديدًا في الملف. تحقق من فواصل الأسطر الحقيقية قبل أن تستبدل مقطعًا معطوبًا بقالب شخص غريب.
ملف تعريف كان يبدأ سابقًا يفشل الآن بخطأ في الخيارات، والسطر الذي يستشهد به المحلل يبدو معقولًا تمامًا على الشاشة. هذا هو الفخ: ملف التهيئة قائمة بأسطر مادية، يحمل كل منها كلمة مفتاحية واحدة للخيار ومعاملاتها، والسطر الطويل الذي يلتف بواسطة محرر يبدو مطابقًا لسطرين حتى تنظر إلى البايتات. لا شيء من الشبكة أو الشهادة أو النفق مشارك في هذه الفئة من الأعطال. قد يختلف سطران يبدوان متطابقين على الشاشة ببايت واحد.
نفّذ الفحوص أدناه بالترتيب وتوقف عند أول فحص يفشل. كل واحد أرخص من التالي، وكل واحد يستبعد تفسيرًا مختلفًا.
سطر واحد، توجيه واحد
يقرأ المحلل سطرًا، ويأخذ الكلمة الأولى كخيار، ويعامل الباقي كمعاملات لذلك الخيار. لذا فسطر مثل cert server.crt port 1194 ليس تعليمتين متتاليتين. إنه خيار cert واحد بثلاثة معاملات، والثالث ليس اسم ملف يقبله الخيار. قراءة الخطأ كفاصل سطر مفقود صحيحة؛ وقراءته كتوجيه مفقود ليست كذلك.
# malformed: one option, three arguments
cert server.crt port 1194
# intended: two options, one argument each
cert server.crt
port 1194
هذان السطران المصححان مقتطف، لا تهيئة. إنهما موجودان لبيان أين يقع الحد. كل توجيه عادي في ملف التعريف يتبع القاعدة نفسها، والسطر الذي يضم اثنين منها ينتج إما خطأ معامل أو قيمة لم يتوقعها الخيار.
أثبت أن فاصل السطر حقيقي
يلتف المحررون للعرض. بعضهم يضيف أيضًا فواصل صلبة عند اللصق، وبعضهم لا، لذا قد تأتي النتيجة البصرية نفسها من ملفين مختلفين جدًا. اعرض نهايات الأسطر وعدّ الأسطر قبل أن تغيّر أي شيء. القياس يكلف أمرًا واحدًا؛ التخمين يكلف أمسية.
cat -A /etc/openvpn/server/lab.conf | sed -n '10,20p'
awk 'NR>=10 && NR<=20 {printf "%d:%s\n", NR, $0}' /etc/openvpn/server/lab.conf
في المخرجات الأولى يظهر كل فاصل سطر حقيقي كعلامة $، لذا فالسطر الذي التف ولم ينقسم لا يظهر أي علامة حيث تلتف شاشتك. يطبع الأمر الثاني أسطرًا مرقمة، وهي أسرع طريقة لمقارنة ما يبلغ عنه المحلل بما يحتويه الملف.
المسافات الإضافية لا تنشئ توجيهًا أيضًا. الإزاحة تجميلية، والسطر الذي يبدأ بمسافة يبقى الخيار الوحيد نفسه. إذا أشارت رسالة الخطأ إلى رقم سطر، فاقرأ ذلك السطر بالضبط وليس الفقرة التي ينتمي إليها.
اقتبس مسارًا، لا قائمة توجيهات
علامات الاقتباس موجودة للمعاملات التي تحتوي مسافات، لا لتجميع الخيارات. مسار شهادة يحتوي مسافة يحتاج إلى علامات اقتباس خاصة به؛ توجيهان يتقاسمان زوجًا واحدًا من علامات الاقتباس يبقيان سطرًا معطوبًا واحدًا.
cert "/etc/openvpn/pki/lab certs/server.crt"
key "/etc/openvpn/pki/lab certs/server.key"
افحص أسماء الخيارات في الوقت نفسه مع التنسيق، لأن السطر المدمج قد ينتج رمزًا يبدو معقولًا لم يكن موجودًا قط. توجيه المنفذ هو port؛ وملف تعريف يستخدم شيئًا آخر للفكرة نفسها سيفشل حتى بعد تصحيح حدود الأسطر. عندما يبدو الاسم غير مألوف، قارنه بقائمة خيارات الإصدار الذي تشغله وليس بمثال من منتدى.
أبقِ الكتل المضمّنة كتلًا
يمكن لملفات التعريف أن تحمل شهادات ومفاتيح مضمّنة، وتلك الكتل بيانات وليست تهيئة. أسطر PEM داخل الكتلة ليست خيارات يجب تسطيحها أو إعادة إزاحتها أو ضمها، ويجب أن تبقى علامات الكتلة في أسطرها الخاصة.
تعامل مع الكتلة المضمّنة كمنطقة معتمة: صحح أسطر الخيارات حولها، واترك محتواها سليمًا بايتًا ببايت، ولا تلصقها أبدًا في موضوع دعم عام. إذا أعادت أداة تنسيق كتابة الكتلة، فاستعدها من PKI الخاصة بك بدلًا من إصلاحها يدويًا.
أصلح أصغر مقطع، لا القالب
الإصلاح المغري هو استبدال الملف كله بتهيئة من درس تعليمي „يعمل”. هذا يقايض سطرًا معطوبًا واحدًا بمجموعة تغييرات في السياسة لم يراجعها أحد: معاملات DH مختلفة، وإعدادات ضغط، واختيارات تشفير، ومستمعين مكررين. المشكلة الأصلية صغيرة ومحلية، والاستبدال ليس أيًا منهما.
انسخ ملف التعريف إلى ملف عمل محمي، وصحح حدود الأسطر في تلك النسخة، ودع المالك المعتاد للخدمة يحمّله. ثم ابدأ النسخة واقرأ أول خطأ، إن وجد، من البداية.
openvpn --config /etc/openvpn/server/lab.conf --verb 3 --log /tmp/parse.log
grep -n 'Options error' /tmp/parse.log
عندما تتجاوز مرحلة التحليل، سيتعلق الفشل التالي بملف أو شهادة أو تشفير بدلًا من المفردات، وهذا تقدم حقيقي. احفظ نسخة العمل وملاحظة من سطر واحد عما تم ضمه؛ سيحدث اللصق نفسه مرة أخرى لشخص آخر في الفريق نفسه.