OpenVPN میں persist-tun اور persist-key واقعی کیا بچاتے ہیں
دونوں اختیارات ایک زندہ عمل کے اندر نرم ری اسٹارٹ کا احاطہ کرتے ہیں۔ وہ بند ہونے کے بعد انٹرفیس نہیں رکھتے، اور وہ ٹریفک روکنے کی پالیسی نہیں ہیں۔
سروس بند کرنا persist-tun سیٹ ہونے کے باوجود انٹرفیس ہٹا دیتا ہے۔ یہ اختیار دستاویز کے مطابق کام کر رہا ہے، ناکامی نہیں۔ اختیار چلتی ہوئی عمل کے اندر ایک ری اسٹارٹ راستہ بیان کرتا ہے، اور systemctl stop وہ راستہ نہیں ہے۔
دونوں نام ایک ساتھ پڑھیں اور ڈیزائن واضح ہو جاتا ہے۔ ایک ڈسکرپٹر رکھتا ہے، دوسرا کلید کا مواد رکھتا ہے، اور دونوں اس لیے موجود ہیں کہ مراعات چھوڑنے کے بعد کیا ہوتا ہے۔
دو وسائل اور وہ ری سیٹ جن سے وہ تعلق رکھتے ہیں
OpenVPN دو عام حالات میں اپنے ری اسٹارٹ کا اشارہ دیتا ہے۔ واضح SIGUSR1 یہ کرتا ہے، اور مردہ ساتھی کی طرف سے پیدا کردہ ping-restart بھی یہی کرتا ہے۔ دونوں عمل کو زندہ رکھتے ہیں اور کنکشن سیٹ اپ دوبارہ چلاتے ہیں، اور وہیں اختیارات اپنی جگہ کماتے ہیں۔
| Event | TUN/TAP device | Key and auth files | Addresses and routes | up/down hooks |
|---|---|---|---|---|
Soft reset, from SIGUSR1 or from a ping-restart the daemon sends itself | survives only with persist-tun | survive only with persist-key | survive with the device, otherwise rebuilt | run again only when restart hooks are enabled |
Configuration reload, SIGHUP | recreated | re-read from disk | rebuilt once the device returns | run again |
| Service stop | lost | re-read at the next start | removed | run at the next start |
صرف نرم ری سیٹ کی سطر ہی وہ چیز ہے جو یہ دونوں اختیارات بدلتے ہیں، اور جو کام وہ چھوڑ دیتے ہیں وہ مصروف لنک پر مہنگا حصہ ہے۔ ڈیوائس دوبارہ کھولنا اس سے جڑے پتے اور راستے توڑ دیتا ہے، اور انہیں دوبارہ بنانا ری اسٹارٹ شروع ہونے کے وقت راستے میں موجود پیکٹ گرا سکتا ہے۔ بند کرنا انہی اشیاء کو بچانے کے کسی اختیار کے بغیر تباہ کر دیتا ہے۔
یہ اختیارات بالکل کیوں موجود ہیں
سخت کیا گیا OpenVPN سرور عام طور پر root کے طور پر شروع ہوتا ہے، اپنی کلیدیں اور اپنا ڈیوائس کھولتا ہے، پھر بغیر مراعات والے صارف کی طرف جاتا ہے۔ اس منتقلی کے بعد کچھ کارروائیاں بس غائب ہو جاتی ہیں۔ موڈ 0600 والی کلید فائل پڑھنا، نیٹ ورک انٹرفیس بنانا یا راستے بدلنا سب رد ہو سکتے ہیں۔
persist اختیارات کے بغیر، ping-restart پیدا کرنے کے لیے کافی دیر خاموش رہنے والا ساتھی ٹھیک وہی کارروائیاں لازم کرے گا۔ کنفیگریشن میں کچھ نہ بدلنے کے باوجود دوبارہ جڑنا ناکام ہو جائے گا۔ عمل بلا وجہ مرتا ہوا دکھائی دے گا، اور لاگ نیٹ ورک خرابی کے بجائے اجازت کی خرابی دکھائے گا۔
ان کے ساتھ، نرم ری اسٹارٹ وہی دوبارہ استعمال کرتا ہے جو مراعات یافتہ مرحلے نے پہلے ہی حاصل کیا۔ کوئی جادو نہیں ہے اور عمل کچھ بھی نہیں بچاتا۔ وسائل کا حصول بس مؤخر کر دیا جاتا ہے۔
آخری نہیں، پہلی خرابی پڑھیں
جب ری اسٹارٹ ناکام ہو، تو آخری کے بجائے پہلی خرابی پڑھیں۔ محفوظ کلید، auth فائل، انٹرفیس ioctl اور بیرونی ہک چار مختلف وسائل ہیں۔ ایک رکھنا باقی تک رسائی کے بارے میں کچھ نہیں کہتا۔ فائر وال ٹول کو کال کرنے والے ہک کو اب بھی وہی مراعات درکار ہیں جو وہ ٹول مانگتا ہے۔
ہک کا اپنا سوئچ ہوتا ہے۔ OpenVPN دستی persist اختیارات کو up-restart کے ساتھ جوڑتا ہے، جو طے کرتا ہے کہ ری اسٹارٹ کے بعد up اور down اسکرپٹ دوبارہ چلیں گی یا نہیں۔ اس لیے اوپر رہا انٹرفیس آپ کو اس بارے میں کچھ نہیں بتاتا کہ آپ کا ریزولور انٹیگریشن تازہ ہوا یا نہیں۔
# which restart path just happened?
journalctl -u openvpn-client@office --since '10 min ago' | grep -E 'SIGUSR1|ping-restart|Restart pause|NOTE:'
# did the interface survive, and do its routes still exist?
ip -brief link show tun0
ip route show dev tun0
یہ دو کمانڈیں دو ناکامی طریقے سیکنڈوں میں الگ کرتی ہیں۔ موجود مگر راستے غائب والا انٹرفیس ہک یا راستے کا مسئلہ ہے۔ غائب ہو گیا انٹرفیس مطلب عمل واقعی ختم ہوا۔
محفوظ کیا گیا انٹرفیس kill switch نہیں ہے
اگر تقاضا یہ ہو کہ ٹریفک کبھی سرنگ سے باہر نہ نکلے، تو محفوظ کیا گیا ڈیوائس یہ نہیں دیتا۔ دوسرے پتہ خاندان کے راستے، دوسرا ڈیفالٹ راستہ، اور وہ حالت جب عمل مکمل طور پر باہر نکل جائے سب اختیار کے دائرے سے باہر رہتے ہیں۔
دونوں تقاضوں کو الگ الگ سنبھالیں۔ دوبارہ جڑنے کے دوران سرنگ آبجیکٹ رکھنا ڈیمون کے لیے سہولت ہے۔ سرنگ بند ہونے پر باہر جانا روکنا اپنے قواعد اور اپنے امتحان والی فائر وال پالیسی ہے۔ انہیں ملانا ایسی کنفگ بناتا ہے جو دفاعی دکھتی ہے اور بہترین کوشش والے دوبارہ جڑنے کی طرح برتاؤ کرتی ہے۔
تشخیص سے پہلے واقعہ کا نام دیں۔ نرم ری اسٹارٹ، ناکام کنکشن کی کوشش اور سروس بند کرنا تین رویوں والے تین واقعات ہیں، اور صرف پہلا ہی وہ ہے جو یہ اختیارات بیان کرتے ہیں۔