کیا OpenVPN کا ہک اسکرپٹ وہ ٹنل استعمال کر سکتا ہے جو اس نے ابھی بنایا ہے؟
OpenVPN اپنے ہی آغاز کے اندر ہک چلاتا ہے، اس لیے ٹنل کی ضرورت والا اسکرپٹ ایسی ٹنل کا انتظار کرتا ہے جو اس کا انتظار کر رہی ہے۔ کام کو الگ کریں اور ہک کو واقعے کے مطابق چنیں۔
ہک اسکرپٹ ٹنل کے دوسری طرف پہنچتا ہے یا نہیں، یہ تین شرطوں پر منحصر ہے: یہ کس واقعے سے جڑا ہے، اسکرپٹ چلتے وقت OpenVPN ابھی اپنے آغاز کی ترتیب کے اندر ہے یا نہیں، اور کام اس ترتیب سے الگ کیا گیا ہے یا نہیں۔ زیادہ تر اسکرپٹ تیسری شرط پر ناکام ہوتے ہیں۔ نیند شامل کرنا زندگی کے چکر کے مسئلے کو وقت کے مسئلے کے طور پر دیکھتا ہے، اور یہ گمراہ کرنے کے لیے کافی بار کام کرتا ہے۔
پہلے واقعہ طے کریں، پھر کام مؤخر کرنے کا طریقہ، پھر وہ جگہ جہاں مؤخر شدہ کام چلتا ہے۔ یہ تین فیصلے خودمختار ہیں، اور انہیں ملانا ہی دو سطروں کے ہک کو پوری دوپہر بنانے کی وجہ ہے۔
ہک ایسی ٹنل کا انتظار کیوں کرتا ہے جو اس کا انتظار کر رہی ہے
OpenVPN اپنے ہکوں کو ہم وقت طور پر بلاتا ہے، اسی عمل کے اندر جو پیکٹ آگے بڑھاتا ہے۔ up اس وقت فعال ہوتا ہے جب tun یا tap آلہ موجود ہو لیکن کوئی راستہ شامل کرنے سے پہلے، اور route-up راستوں کے بعد فعال ہوتا ہے؛ ان دونوں لمحوں میں سے کوئی بھی یہ وعدہ نہیں کرتا کہ سامنے والا فریق جواب دے گا۔ جب تک کسی بھی ہک کا اسکرپٹ چل رہا ہو، ڈیمن آگے نہیں بھیجتا، اس لیے جو حکم ٹنل سے گزرنے کی توقع رکھتا ہے وہ ایسی ٹنل کا انتظار کرتا ہے جو اس حکم کا انتظار کر رہی ہے۔ یہی دائرہ دار انتظار وجہ ہے کہ ہاتھ سے چلانا کامیاب ہوتا ہے اور ہک کا وقت ختم ہو جاتا ہے۔
ظاہر حل، یعنی چند سیکنڈ کی نیند، کبھی کبھی کام کرتا ہے کیونکہ دور کا سرا خود بخود اوپر آ گیا، اس لیے نہیں کہ نیند نے کچھ ٹھیک کیا۔ تیاری پوچھنے والا مددگار دوسرا جواب ہے: ہک واپس آتا ہے، ترسیل شروع ہوتی ہے، اور مددگار کو مطلوبہ چیز اس وقت ملتی ہے جب وہ واقعی موجود ہو۔
سہولت کے مطابق نہیں، واقعے کے مطابق ہک چنیں
up کو صرف آلے کی ضرورت والے کام سے جوڑیں، route-up کو راستوں کی ضرورت والے کام سے، اور client-connect اور client-disconnect رکھیں سرور کی طرف ہر کلائنٹ کے کاموں کے لیے۔ ڈسکنیکٹ پر صفائی کو دو بار چلنا برداشت کرنا چاہیے، کیونکہ مستقل انٹرفیس پر دوبارہ جڑنا مکمل ری اسٹارٹ جیسی ترتیب نہیں اپناتا۔ سرور پر، client-connect ڈیمن کے شروع ہونے پر نہیں بلکہ کلائنٹ کی تصدیق پر فعال ہوتا ہے، جسے وہاں منطق منتقل کرنے سے پہلے تصدیق کرنا بہتر ہے۔ اگر کام ایک کنکشن کے بجائے سروس کے زندگی کے چکر کا ہے، تو systemd یونٹ کسی بھی ہک سے بہتر ٹھکانہ ہے۔
ہک کے احکام ڈیمن خود چلاتا ہے، درمیان میں کوئی شیل نہیں، اس لیے up سطر میں ifconfig_remote لفظی متن کے طور پر آتا ہے۔ حکم کو واضح شیل میں لپیٹیں، یا منطق کو ماحول پڑھنے والے اسکرپٹ میں رکھیں۔ ipchange ایک ہدایت ہے جو اپنے دلائل شامل کرتی ہے: یہ حکم کو پتہ اور پورٹ دیتی ہے، اس لیے کسی کے لیے نہ لکھا گیا اسکرپٹ دو غیر متوقع دلائل دیکھتا ہے۔
کام الگ کرنے کے تین طریقے
پہلا اختیار یہ ہے کہ مددگار کو ہک کے اندر سے پس منظر میں بھیجا جائے: اسے setsid یا systemd-run --scope سے شروع کریں، وراثت میں ملے ڈسکرپٹر بند کریں، اور فوراً صفر کے ساتھ باہر نکلیں۔ دوسرا یہ ہے کہ ہک ایک چھوٹی حالت کی فائل لکھے اور systemd ٹائمر یا پاتھ یونٹ اس پر عمل کرے، جو ہک کو سادہ رکھتا ہے اور دوبارہ کوشش کی پالیسی کو وہاں رکھتا ہے جہاں لاگ موجود ہیں۔ تیسرا یہ ہے کہ ہک کو بالکل چھوڑ دیا جائے اور کام کو VPN سروس کے بعد ترتیب دی گئی یونٹ میں منتقل کیا جائے، جو صحیح جواب ہے جب کام بالکل بھی فی کنکشن نہ ہو۔ تینوں ایک ہی اصول بانٹتے ہیں: ہک کو ٹنل کی ضرورت سے پہلے واپس آنا چاہیے۔
جو بھی چنیں، مددگار کو ایک ہی اثر والا اور قابل مشاہدہ بنائیں۔ دو اوورلیپنگ کالیں ایک ہی ناقابل واپسی عمل دو بار نہیں چلا سکتیں، اور ناکام ہونے والا مددگار ایسی چیز چھوڑے جو انسان پڑھ سکے۔
سینڈ باکس کی ناکامیوں کو زندگی کے چکر کی ناکامیوں سے الگ کریں
جب اسکرپٹ root پرامپٹ سے چلتا ہے اور بطور سروس ناکام ہوتا ہے، تو وجہ عام طور پر نیٹ ورک نہیں بلکہ سینڈ باکس ہوتی ہے۔ محدود کرنے والا ProtectHome، صرف پڑھنے والا ProtectSystem، یا غیر موجود ورکنگ ڈائریکٹری اسکرپٹ یا اس کے ڈیٹا کو ناقابل رسائی بنا سکتے ہیں، اور SELinux میزبان پر فائل کو اجازت دینے والا سیاق بھی درکار ہوتا ہے۔ یونٹ systemctl cat openvpn-server@server سے اور جرنل journalctl -u openvpn-server@server -n 80 سے پڑھیں، پھر کنکشن ٹائم آؤٹ کے بجائے اجازت یا سیاق کی غلطی تلاش کریں۔ سینڈ باکس غیر فعال کرنا پہلا نہیں، آخری قدم ہونا چاہیے۔
زندگی کے چکر کی ناکامی مختلف دکھتی ہے: ہک شروع ہوتا ہے، مددگار چلتا ہے، اور ساکٹ ابھی وہاں نہیں ہوتا۔ ہک ہی سے وقت کی مہر والی سطر لکھیں، کنکشن توڑ کر دوبارہ جوڑیں، اور واقعات ترتیب سے پڑھیں۔ جب مددگار کو واقعی ٹنل درکار ہو، تو مقررہ وقت سونے کے بجائے تیاری پوچھنے دیں۔
تین فیلڈ اگلی رپورٹ کو مفید بناتے ہیں: کون سا ہک چلا، کون سا اکاؤنٹ استعمال ہوا، اور کہاں رکا۔ ان کے بغیر ہر بعد کی تحقیق شروع سے ہوتی ہے۔