ایک پروفائل جو پہلے چلتی تھی اب آپشن کی خرابی کے ساتھ ناکام ہوتی ہے، اور تجزیہ کار جس سطر کا حوالہ دیتا ہے وہ اسکرین پر بالکل معقول دکھائی دیتی ہے۔ یہی جال ہے: کنفیگریشن فائل جسمانی سطروں کی فہرست ہے، ہر ایک میں ایک آپشن کا کلیدی لفظ اور اس کے دلائل ہوتے ہیں، اور ایڈیٹر کی لپیٹی ہوئی لمبی سطر بائٹس دیکھنے تک دو سطروں جیسی لگتی ہے۔ نیٹ ورک، سرٹیفکیٹ یا ٹنل اس خرابی کی قسم میں شامل نہیں۔ اسکرین پر یکساں دکھنے والی دو سطریں ایک بائٹ سے مختلف ہو سکتی ہیں۔

نیچے دیے گئے چیک ترتیب سے کریں اور پہلے ناکام ہونے والے پر رک جائیں۔ ہر ایک اگلے سے سستا ہے، اور ہر ایک مختلف وضاحت کو خارج کرتا ہے۔

ایک سطر، ایک ہدایت

تجزیہ کار ایک سطر پڑھتا ہے، پہلا لفظ آپشن کے طور پر لیتا ہے اور باقی کو اسی آپشن کے دلائل سمجھتا ہے۔ اس لیے 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

جب تجزیے کا مرحلہ گزر جائے تو اگلی ناکامی الفاظ کے بجائے فائل، سرٹیفکیٹ یا سائفر کے بارے میں ہوگی، اور یہی حقیقی پیش رفت ہے۔ ورکنگ کاپی اور اس بارے میں ایک سطری نوٹ رکھیں کہ کیا ملایا گیا؛ وہی چپکانا اسی ٹیم کے کسی اور کے ساتھ دوبارہ ہوگا۔

متعلقہ مضامین