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

ہر پروفائل کو اس کی اپنی مقامی پورٹ دیں

طے شدہ مقامی پورٹ پر چھوڑا گیا vpnc پروفائل پہلے سے چل رہے پروفائل سے مقابلہ کرتا ہے۔ پہلا پورٹ تھامے رکھتا ہے تو دوسرا کنکشن ناکام ہوتا ہے، اور لاگ کی سطر مقامی ٹکراؤ کے بجائے گیٹ وے کے مسئلے جیسی لگتی ہے۔ اس کے بجائے ہر پروفائل فائل کے لیے ایک سطر رکھیں:

Local Port 0

صفر کرنل کو عارضی پورٹ چننے دیتا ہے، اس لیے دو پروفائل ایک وقت میں قائم کیے جا سکتے ہیں۔ ہر فائل کا نام اس گیٹ وے اور گروپ پر رکھیں جس کی وہ خدمت کرتی ہے، اسے صرف root کے لیے پڑھنے کے قابل رکھیں، اور ہمیشہ مشترکہ طے شدہ کے بجائے مماثل پروفائل سے جڑیں۔ مشترکہ طے شدہ فائل ہی وہ طریقہ ہے جس سے اسکرپٹ کسی کے پروفائل کا نام بدلنے کے بعد غلط سرنگ دوبارہ جوڑتی ہے۔

پروفائل فائلوں میں اسناد ہوتی ہیں، اس لیے اجازتیں ڈیزائن کا حصہ ہیں، گھر کے کام کا نہیں۔ /etc/vpnc کے تحت سب کے لیے پڑھنے کے قابل فائل گروپ کا راز ہر مقامی صارف کو دے دیتی ہے۔ موڈ 0600 رکھیں اور مالک root رکھیں، اور اسکرپٹس کو راز دلائل میں نقل کرنے کے بجائے فائل root کے طور پر پڑھنے دیں۔ اسی لیے جانچ اسکرپٹ کو کبھی فائل کا مواد لاگ میں نہیں لکھنا چاہیے۔

ہر پروفائل کے لیے ایک سروس جانچیں، سرنگ کا پتہ نہیں

سرنگ کے اپنے پتے پر بھیجا گیا ایکو درخواست زیادہ تر یہی ثابت کرتی ہے کہ انٹرفیس موجود ہے۔ یہ نہیں بتاتی کہ اس کے پیچھے کا میزبان اب بھی اس ایپلیکیشن تک پہنچتا ہے جو سرنگ کا جواز ہے۔ انٹرفیس اوپر ہو سکتا ہے جبکہ اس کے آگے کا راستہ پہلے ہی جا چکا ہو۔

ہر پروفائل کے لیے ایک سروس مختصر TCP مہلت کے ساتھ جانچیں اور صرف وہی پروفائل دوبارہ جوڑیں جس کی جانچ ناکام ہوئی۔ دو سیکنڈ مردہ راستے کو سست راستے سے الگ کرتے ہیں، اور TCP جانچ اس پر منحصر نہیں کہ راستے میں کہیں ICMP کی اجازت ہے یا نہیں۔ پروفائلوں کے درمیان صرف ہدف اور کنفگ کا نام بدلیں:

#!/bin/bash
set -eu
if ! nc -z -w 2 10.63.7.20 8443; then
  /usr/sbin/vpnc-connect ops.conf
fi

اسے /usr/local/bin/ensure-vpn-ops.sh کے طور پر محفوظ کریں، قابلِ عمل بنائیں، اور صرف جانچ کا ہدف اور کنفگ کا نام بدل کر ہر پروفائل کے لیے دہرائیں۔ وہ جانچ جو پروٹوکول کے سوال کا جواب دیتی ہے ایسے گیٹ ویز سے بچ نکلتی ہے جو ایکو گرا دیتے ہیں مگر صارفین کے لیے اہم سروسز اب بھی آگے بھیجتے ہیں۔

جانچوں کو زنجیر میں جوڑیں تاکہ وہ کبھی مقابلہ نہ کریں

پیکج کی دوبارہ جڑنے والی اسکرپٹ آپ کی جانچوں کو ترتیب سے بلا سکتی ہے، اور ترتیب ہی سارا معاملہ ہے۔ ایک ساتھ چلنے والی دو vpnc-connect کالیں راؤٹنگ جدول کو ایسی ترتیب میں دوبارہ لکھتی ہیں جسے کوئی کنٹرول نہیں کرتا، اور اسی طرح صحت مند پروفائل اپنا راستہ کھو دیتا ہے۔

کالوں کو سامنے رکھیں، نیچے والے انٹرفیس کے لیے مختصر استحکام تاخیر شامل کریں، اور زنجیر کو root کے cron جدول سے مقرر کریں، کیونکہ سرنگ کے راستے صرف root ہی دوبارہ لکھ سکتا ہے:

#!/bin/bash
sleep 20
/usr/local/bin/ensure-vpn-ops.sh
/usr/local/bin/ensure-vpn-lab.sh

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

لاگ پر نظر رکھیں، پھر جان بوجھ کر ایک توڑیں

ہر بار چلنے پر ایک سطر لاگ کریں — پروفائل، جانچ کا ہدف، نتیجہ اور اٹھایا گیا قدم۔ اس کے بغیر ہر منٹ ڈگمگاتی سرنگ بالکل ایسی لگتی ہے جو کبھی گری ہی نہیں، اور جانچ کی خرابی گیٹ وے کی رکاوٹ سے الگ نہیں پہچانی جا سکتی۔ لاگ یہ بھی ثابت کرتا ہے کہ زنجیر نے صرف اسی پروفائل کو چھوا جو ناکام ہوا۔ اسے ایسی جگہ لکھیں جو ری بوٹ کے بعد بھی رہے، ورنہ ثبوت عمل کے ساتھ چلے جاتے ہیں۔

پھر جان بوجھ کر ایک سرنگ توڑیں اور دیکھیں کیا ہوتا ہے۔ ایک ہی پروفائل روکیں اور تصدیق کریں کہ کون سے عمل اور راستے اب بھی موجود ہیں:

pgrep -a vpnc
ip -4 route show | grep -E '10[.]63|10[.]90'
tail -n 5 /var/log/ensure-vpn.log

صرف روکا گیا پروفائل ہی دوبارہ جڑنا چاہیے، اور باقی سیشنز کو اپنے عمل اور اپنے راستے دونوں رکھنے چاہئیں۔ اگر دو پروفائل دوبارہ شروع ہوں تو آپ کی زنجیر کہیں متوازی چل رہی ہے جہاں آپ نے توقع نہیں کی تھی۔

پہریدار کو کیا نہیں کرنا چاہیے

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

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

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