OpenVPN up پر سروس دوبارہ شروع کرنا: hooks tun0.device سے بہتر ہیں
ڈیوائس یونٹ انٹرفیس کا سراغ لگاتا ہے، کنکشن کا نہیں۔ سروس کو درکار شرط کے لیے up یا route-up منتخب کریں، پھر بلاک نہ کرنے والا دوبارہ آغاز بھیجیں۔
کسی منحصر سروس کو tun0.device سے جوڑنا سرنگ کی رکنیت لینے جیسا لگتا ہے، اور ایسا نہیں ہے۔ ڈیوائس یونٹ اس بات کی عکاسی کرتا ہے کہ انٹرفیس موجود ہے، جو ناکام کنکشن اور اس کے بعد دوبارہ جڑنے کے دوران بھی درست رہ سکتا ہے۔ پھر سروس غلط لمحے پر عمل کرتی ہے، یا کبھی نہیں، اس پر منحصر ہے کہ انٹرفیس درمیان میں غائب ہوا یا نہیں۔ وہ ہک جو اس واقعے کی وضاحت کرتا ہے جس کی آپ کو واقعی پروا ہے وہی ہے جسے OpenVPN بلاتا ہے، نہ کہ وہ جس کا systemd اندازہ لگاتا ہے۔
ٹرگر منتخب کرنے سے پہلے فیصلہ کریں کہ سروس کو کون سی شرط درکار ہے، کیونکہ تینوں امیدوار ایک دوسرے کے بدلے استعمال نہیں ہو سکتے۔
ڈیوائس یونٹ دراصل کس چیز کا سراغ لگاتا ہے
systemd نیٹ ورک انٹرفیس کے بارے میں کرنل کے نقطہ نظر سے ڈیوائس یونٹ بناتا ہے، اس لیے انٹرفیس ظاہر ہونے پر tun0.device فعال ہوتا ہے اور ہٹائے جانے پر غیر فعال ہوتا ہے۔ persist-tun کے ساتھ، نرم دوبارہ آغاز انٹرفیس کو اس کی جگہ پر رکھتا ہے، اس لیے یونٹ کبھی فلپ نہیں ہوتا اور اس سے بندھی کوئی چیز متحرک نہیں ہوتی۔ استحکام کے بغیر بھی، یونٹ راستوں، DNS یا اس بارے میں کچھ نہیں کہتا کہ دور والا سرا جواب دیتا ہے یا نہیں۔
یہ اسے 'VPN تیار ہے' کے لیے برا متبادل بناتا ہے۔ صرف مقامی پتہ درکار سننے والا انٹرفیس کے وجود سے مطمئن ہو سکتا ہے، جبکہ دور دراز نیٹ ورک پر کسی ایپلیکیشن کو بلانے والی سروس کو راستے اور رسائی درکار ہوتی ہے، جو ڈیوائس یونٹ ظاہر نہیں کر سکتا۔
up، route-up اور up-restart مختلف معنی رکھتے ہیں
up TUN/TAP ڈیوائس کھلنے اور انٹرفیس کنفیگر ہونے کے بعد چلتا ہے، جو مختص کردہ پتہ باندھنے والے سننے والے کے لیے درست لمحہ ہے۔ راستے نصب ہونے کے بعد، کسی بھی کنفیگر شدہ راستے کی تاخیر کے تابع، route-up چلتا ہے، اور ایسے کام کے لیے موزوں ہے جسے راستے کا مرحلہ مکمل ہونا چاہیے۔ دونوں میں سے کوئی ثابت نہیں کرتا کہ دور دراز ایپلیکیشن جواب دیتی ہے۔ ان کے درمیان انتخاب اس بات کا سوال ہے کہ سروس کو کیا درکار ہے، نہ کہ کون سا ہک زیادہ مکمل لگتا ہے۔
persist-tun کے ساتھ، دوبارہ آغاز ڈیوائس کو دوبارہ استعمال کرتے ہیں، اس لیے up-restart سیٹ نہ ہونے تک up دوبارہ نہیں چلتا۔ وہ آپشن دستاویزی دوبارہ آغاز کے لائف سائیکل کے لیے up اسکرپٹ کو فعال کرتا ہے، اور اس کا ماحول پہلی شروعات کے مقابلے میں کم کیا گیا ہے۔ مکمل ماحول فرض کرنے والی اسکرپٹ پہلے کنکشن پر کام کرتی ہے اور اگلے پر ناکام ہو جاتی ہے۔
کارروائی کا انتظار کیے بغیر بھیجیں
جو ہک systemctl restart کو ہم وقت طور پر بلاتا ہے وہ ایسے یونٹ کے ساتھ تعطل کا شکار ہو سکتا ہے جس کی ترتیب سرنگ کا انتظار کرتی ہے۔ systemctl --no-block try-restart vpn-dependent.service کام کو قطار میں ڈالتا ہے اور واپس آتا ہے، جو ہک کو اس کنکشن کو بلاک کرنے سے روکتا ہے جس پر وہ رد عمل دے رہا تھا۔ try-restart صرف چلنے والے یونٹ پر اثر انداز ہوتا ہے، جبکہ restart غیر فعال یونٹ بھی شروع کرتا ہے؛ عادت سے نہیں، جان بوجھ کر منتخب کریں۔
قطار میں ڈالنا توثیق نہیں ہے۔ کام قبول ہوتے ہی ہک کامیابی واپس کرتا ہے، اس لیے جانچ ہدف یونٹ کے جرنل میں یا اس کی اصل سننے والی حالت میں ہونی چاہیے۔
دوبارہ آغاز کی پالیسی یونٹ میں رہتی ہے، ہک میں نہیں
RemainAfterExit=yes والا oneshot یونٹ اپنے حکم کے ختم ہونے کے بعد بھی فعال رہتا ہے، اور دوسری شروعات کی درخواست کچھ نہیں کرتی کیونکہ systemd اسے پہلے ہی شروع شدہ سمجھتا ہے۔ یہ ایسی خصوصیت ہے جس کے گرد ڈیزائن کرنا چاہیے، نہ کہ ایسا نقص جسے بار بار شروعاتی کالوں سے بچا جائے۔ اگر کارروائی ہر کنکشن پر چلنی چاہیے، تو یونٹ کو ایسی شکل درکار ہے جو اس کی اجازت دے۔
After= یونٹوں کو ترتیب دیتا ہے، اور BindsTo= زندگیاں باندھتا ہے، لیکن ان میں سے کوئی بھی 'VPN کے دوبارہ جڑنے پر اسے دوبارہ شروع کرو' کے معنی نہیں دیتا۔ سرنگ سے بندھا یونٹ سرنگ رکنے پر رک جاتا ہے؛ سرنگ واپس آنے پر وہ خود کو دوبارہ شروع نہیں کرتا، جب تک کوئی چیز اسے دوبارہ شروع نہ کرے۔
ایک نہیں، تین دوبارہ کنکشن آزمائیں
کولڈ بوٹ، مکمل کلائنٹ دوبارہ آغاز اور نرم دوبارہ کنکشن ہر ایک مختلف راستہ اختیار کرتے ہیں۔ نرم دوبارہ کنکشن ہی وہ ہے جو غائب up-restart، کم شدہ ماحول یا کبھی غیر فعال نہ ہونے والے ڈیوائس یونٹ کو بے نقاب کرتا ہے۔ تینوں چلائیں اور دونوں سمتوں کی تصدیق کریں: سرنگ اوپر آئے تو سروس عمل کرتی ہے، اور Wi-Fi رومنگ جیسی غیر متعلقہ لنک تبدیلیوں پر دوبارہ شروع نہیں ہوتی۔
جب منحصر سروس آپ کی اپنی انتظامی رسائی لے کر چلتی ہے تو ایک آزاد بازیابی راستہ رکھیں۔ جو ہک آپ جس چیز کے ذریعے جڑے ہیں اسے دوبارہ شروع کرتا ہے وہ ایسی تبدیلی ہے جو آپ کو باہر بند کر سکتی ہے۔