Systemd بمقابلہ NetworkManager: بوٹ پر VPN کون شروع کرتا ہے؟
تین طریقے ایک ہی Ubuntu پروفائل اوپر لا سکتے ہیں، ہر ایک کا محرک مختلف ہے۔ اُن کا موازنہ کریں، ایک مالک رکھیں اور نقل ہٹا دیں۔
ایک ہی امیج کی دو Ubuntu مشینیں، ایک VPN پروفائل، لاگ اِن پر اُلٹے نتائج: ایک پر ڈیسک ٹاپ ظاہر ہونے سے پہلے ہی ٹنل اوپر ہے، دوسری پر وہ کبھی اوپر نہیں آتی۔ یہاں پروفائل متغیر نہیں ہے۔ فرق یہ ہے کہ تین اجزاء میں سے کس کو اُسے شروع کرنے کا حکم دیا گیا، اور یہ تین ایک ہی سوئچ شیئر نہیں کرتے۔
اُنہیں ساتھ ساتھ رکھ کر موازنہ کرنا اندازہ لگانے سے تیز ہے۔ ہر ایک پہچانے جانے والے انداز میں ناکام ہوتا ہے، اور یہی موازنے کو کارآمد بناتا ہے۔
تین مختلف محرکوں والے تین آغاز کار
پیکج شدہ openvpn سروس سب سے پرانا راستہ ہے۔ اُس کی init اسکرپٹ /etc/default/openvpn سے خودکار آغاز کی فہرست پڑھتی ہے۔ اگر وہ فہرست تبصرہ شدہ ہو یا خالی چھوڑ دی گئی ہو، تو اسکرپٹ آپ کی شامل کردہ واحد ترتیب کے بجائے اُس ڈائریکٹری میں ملنے والی ہر ترتیب شروع کر دیتی ہے۔ ایک ٹنل کے لیے شامل کی گئی ایک فائل خاموشی سے کئی کو اوپر لا سکتی ہے۔
| Starter | What triggers it | Typical failure |
|---|---|---|
| Init script and templated units | Boot, plus anything in the autostart list | Starts every config, not the one you meant |
| NetworkManager secondary | Activation of the base Wi-Fi or Ethernet profile | Nothing happens until that base link comes up |
| Hand-written unit or wrapper | Whatever its WantedBy and ExecStart say | Runs a different binary or environment than your shell |
دوسری سطر وہ ہے جسے لوگ غلط ترتیب دیتے ہیں۔ NetworkManager درآمد شدہ پروفائل رکھتا ہے اور اُسے شروع کرے گا، مگر صرف کسی دوسرے کنکشن کے ثانوی کے طور پر، یعنی محرک نیٹ ورک لنک کا ہے، VPN کا نہیں۔
ترتیب کی لاگت اور دائرے کا موازنہ کریں
init اسکرپٹ کے راستے میں ایک سطر کی لاگت آتی ہے اور یہ مشین کی ہر ترتیب کو ڈھانپ لیتا ہے۔ یہ راؤٹر کے لیے مناسب ہے اور مختلف نیٹ ورکس سے جڑنے والے لیپ ٹاپ کے لیے غلط ہے۔ NetworkManager کے راستے میں ایک UUID کی تلاش درکار ہے اور یہ ٹنل کو ایک بنیادی کنکشن سے باندھتا ہے۔ یہ دفتر کے SSID پر اوپر آتا ہے اور ہوٹل کے نیٹ ورک پر نیچے ہی رہتا ہے۔
ہاتھ سے لکھا unit سب سے زیادہ لاگت لیتا ہے اور دوسری سروسز کے مقابل ترتیب سمیت سب سے زیادہ کنٹرول دیتا ہے۔ فیصلہ کن عامل دائرہ ہے۔ اگر مشین میں ایک نیٹ ورک اور ایک ٹنل ہے تو پیکج شدہ سروس دیانت دار اور قابلِ اندازہ ہے۔ اگر ٹنل کو کسی مخصوص Wi-Fi نیٹ ورک کی پیروی کرنی ہے تو تینوں میں سے صرف ثانوی ہی اضافی اسکرپٹنگ کے بغیر وہ شرط بیان کرتا ہے۔
ایک مالک منتخب کریں اور باقی ہٹا دیں
دو مالکان کی شروع کردہ پروفائل ایسا وقت پیدا کرتی ہے جو ہر بوٹ پر بدلتا ہے، جو کسی ایک طریقے کے مقابلے میں بدتر ہے۔ مالک منتخب کریں، پھر حریف راستے کو اتفاقاً نہیں بلکہ دانستہ بند کریں۔
# who is configured to start something?
grep -v '^#' /etc/default/openvpn
systemctl list-units 'openvpn*'
nmcli -g connection.secondaries connection show 'Work Wi-Fi'
# NetworkManager: attach the tunnel to the base link by UUID
TUNNEL=$(nmcli -g UUID connection show 'Corp Tunnel')
nmcli connection modify 'Work Wi-Fi' +connection.secondaries "$TUNNEL"
اگر ریٹائر ہونے والا راستہ پیکج شدہ ہی ہے تو درست ترتیب سے کریں: AUTOSTART کو none پر رکھیں، systemctl daemon-reload چلائیں تاکہ بنائے گئے unit نئی فہرست لے لیں، پھر وہ ٹیمپلیٹ مثال بند کریں جو آپ کو مزید درکار نہیں۔ ری لوڈ چھوڑ دینے سے پرانے unit فعال رہتے ہیں، اور ایسا لگتا ہے کہ تبدیلی کا کوئی اثر نہیں ہوا۔
لٹکا ہوا اسٹاپ الگ مسئلہ ہے جس کا جواب محدود ہے۔ TimeoutStopSec طے کرتا ہے کہ SIGKILL بھیجنے سے پہلے systemd کتنی دیر انتظار کرے۔ اِسے مقرر کرنے کی درست جگہ drop-in فائل ہے، کیونکہ پیکج شدہ unit میں ترمیم کی تو اگلی اپ گریڈ پر تبدیلی ضائع ہو جاتی ہے۔
تصدیق کریں کہ اصل میں کیا شروع ہوا
دوبارہ بوٹ کریں اور ترتیب کی فائل پر بھروسہ کرنے کے بجائے ثبوت پڑھیں۔ ٹنل کا مالک unit فعال حالت اور بوٹ سے مطابقت رکھنے والا آغاز کا وقت دکھائے گا، اور VPN انٹرفیس آپ کے لاگ اِن سے پہلے موجود ہوگا۔
systemctl is-enabled openvpn-client@office
systemctl status openvpn-client@office --no-pager
nmcli -f GENERAL.STATE,connection.secondaries connection show 'Work Wi-Fi'
ip -brief link show tun0
یہاں ایک اور جانچ کی گئی بات ہے: تصدیق کریں کہ unit کا ExecStart اُسی بائنری کی طرف اشارہ کرتا ہے جو آپ کے خیال میں ہے۔ مقامی طور پر کمپائل شدہ کلائنٹ یا snap پیکج کو اکثر واضح راستہ یا snap run ریپر درکار ہوتا ہے، کیونکہ systemd آپ کے شیل کی تلاش کی ترتیب ورثے میں نہیں پاتا۔ command -v openvpn کا unit فائل سے موازنہ یہ معاملہ سیکنڈوں میں طے کر دیتا ہے۔
منتخب مالک کو پروفائل کے نام کے ساتھ مشین کے نوٹس میں لکھیں۔ گمشدہ ٹنل کی ڈیبگ کرنے والا اگلا شخص موازنہ دہرانے کے بجائے اُسی سطر سے شروع کرے گا۔