VPN کلائنٹ کی اسکرپٹنگ: پاس ورڈ سے پہلے پرت منتخب کریں
وینڈر CLI، rasdial، ایپ کی نیت یا UI آٹومیشن ہر ایک مختلف طور پر ناکام ہوتے ہیں۔ پرت منتخب کریں، راز کو argv سے باہر رکھیں، اور حالت کا انتظار کریں، exit کوڈز کا نہیں۔
اسکرپٹس VPN کلائنٹس کو اسی پرت پر شروع کرتے ہیں جو مصنف نے منتخب کی، اور یہ پرت شاذ و نادر ہی وہ ہوتی ہے جس کی کام کو ضرورت تھی۔ وینڈر کی کمانڈ لائن، آپریٹنگ سسٹم کا ڈائلر اور موبائل ایپ کی نیت سبھی کنکشن کی زندگی کے مختلف مقامات پر واپس آتے ہیں۔ وہ راز کو بھی مختلف طریقے سے سنبھالتے ہیں، اور یہی فرق طے کرتا ہے کہ پاس ورڈ مشین پر ہر صارف کو نظر آتا ہے یا نہیں۔ اسکرپٹ کی پہلی سطر لکھنے سے پہلے پرت منتخب کریں۔
پرت 1: وینڈر کی کمانڈ لائن
زیادہ تر ڈیسک ٹاپ کلائنٹس ایسی کمانڈ لائن دیتے ہیں جو پروفائل کا نام اور، بہت زیادہ بار، پاس ورڈ لیتی ہے۔ Cisco کا پرانا کلائنٹ صارف اور پاس ورڈ دلائل کے ساتھ connect فعل قبول کرتا تھا؛ macOS بلٹ ان سروس کو networksetup کے ذریعے پیش کرتا ہے؛ NetworkManager nmcli کو جواب دیتا ہے۔ یہ کالز کمانڈ ختم ہونے پر واپس آتی ہیں، جو وہ لمحہ نہیں جب ٹنل قابل استعمال ہوتا ہے۔ اپنی تعینات کردہ ورژن کے لیے وینڈر کی اپنی دستاویزات پڑھیں، کیونکہ یہ انٹرفیس بدلتے ہیں اور کچھ مکمل طور پر ہٹا دیے جاتے ہیں۔
nmcli connection up "Work VPN"
networksetup -connectpppoeservice "Work VPN"
فائدہ یہ ہے کہ وینڈر اپنا پروفائل اسٹور جانتا ہے، اس لیے کال وہی کنفیگریشن استعمال کرتی ہے جو GUI استعمال کرتا۔ نقصان یہ ہے کہ ہر وینڈر اپنے فعل ایجاد کرتا ہے، اور ایک کلائنٹ کے لیے لکھا گیا اسکرپٹ دوسرے پر منتقل نہیں ہوتا۔ اس پرت کو مختصر ترین راستہ سمجھیں جب کلائنٹ مقرر ہو اور ورژن پن شدہ ہو۔
پرت 2: آپریٹنگ سسٹم کی اپنی سروس
Windows میں ڈائلر آپریٹنگ سسٹم کا حصہ ہے، اور یہ وینڈر کے پروفائل اسٹور کے بجائے فون بک اندراج کے خلاف کام کرتا ہے۔ یہ اسے کلائنٹس کے درمیان زیادہ قابلِ منتقلی اور سروس اکاؤنٹ سے اسکرپٹ کرنے میں آسان بناتا ہے۔ اس کا مطلب یہ بھی ہے کہ کنکشن ایک جگہ موجود ہو سکتا ہے اور دوسری جگہ نہیں، جو غلط فہرست میں دیکھنے والوں کو الجھاتا ہے۔
rasdial "Work VPN" user pass
Get-VpnConnection -Name "Work VPN" | Select-Object ConnectionStatus
جب اندراج بنانا یا ہٹانا ہو تو اسے ڈائل کرنے کے بجائے PowerShell سطح استعمال کریں۔ WMI اور cmdlet پرتیں وہی اشیاء مختلف ناموں سے پیش کرتی ہیں، اور ہٹانا منقطع کرنے سے الگ عمل ہے۔ صرف ڈائل کرنے والا اسکرپٹ منتقلی کے بعد پرانے اندراجات چھوڑ دے گا۔ صفائی ہونے کا وعدہ کرنے سے پہلے جانچیں کہ آپ کی آٹومیشن کس اسٹور میں لکھتی ہے۔
Remove-VpnConnection -Name "Old VPN" -Force
Get-VpnConnection
macOS میں مساوی چیز نیٹ ورک سروسز کی فہرست ہے، جہاں موجودہ سروس نام سے جڑتی ہے بجائے اس کے کہ موقع پر بنائی جائے۔
اسناد ہر پرت پر لیک ہوتی ہیں، اس لیے چینل منتخب کریں
کمانڈ لائن پر جو کچھ بھی گزاریں وہ ہر مقامی صارف کے لیے پروسیس ٹیبل میں ظاہر ہوتا ہے، اور عام طور پر شیل کی تاریخ میں بھی بچ جاتا ہے۔ OpenVPN کا معاون متبادل یہ ہے کہ راز کو فائل سے پڑھیں --askpass کے ساتھ، اور فائل خود ایسی اجازتوں کی متقاضی ہے جو اس پر رکھے گئے اعتماد سے مطابقت رکھتی ہوں۔ نامزد پائپ راز کو ڈسک پر لکھنے سے بچاتا ہے لیکن ہر اس عمل کو جو اسے کھول سکتا ہے وہاں لکھنے دیتا ہے۔ Windows میں راز کو اسناد کے منتظم میں یا ایسی فائل میں رکھیں جسے صرف سروس اکاؤنٹ پڑھ سکے، اور کبھی بیچ فائل میں بطور لٹرل نہ رکھیں۔
openvpn --config /etc/openvpn/work.conf --askpass /etc/openvpn/work.secret --auth-nocache --daemon
ls -l /etc/openvpn/work.secret
یہی اصول ٹوکنز اور یک بار استعمال کوڈز پر لاگو ہوتا ہے: اگر آٹومیشن کو ان کی ضرورت ہو تو آٹومیشن کو ایسا چینل چاہیے جو کمانڈ لائن دلیل نہ ہو۔ جب طریقہ کار بدلیں تو راز گھمائیں، کیونکہ پرانی قدر کہیں لاگ میں پڑی رہی ہے۔ کام کرنے والا اور لیک ہونے والا اسکرپٹ کام کرنے والا اسکرپٹ نہیں ہے۔
حالت کا انتظار کریں، پھر ایک ہی مالک کی نگرانی کریں
ان کالز میں سے ہر ایک ٹنل تیار ہونے سے پہلے واپس آتی ہے، اس لیے وہ حالت پوچھیں جو کلائنٹ پیش کرتا ہے یا اس کے اندر کسی منزل کو وقت کی حد کے ساتھ جانچیں۔ کنیکشن کال کے فوراً بعد فائلیں کاپی کرنا یا ڈیٹا بیس کنکشن کھولنا ایک دوڑ ہے، اور یہ وقفے وقفے سے اس طرح ناکام ہوتا ہے جو نیٹ ورک خرابی جیسا لگتا ہے۔
ip link show tun0
nmcli -t -f GENERAL.STATE connection show "Work VPN"
curl -sS --max-time 5 https://app.internal.example/health -o /dev/null
منقطع کرنے کا الٹ سمت میں وہی مسئلہ ہے: عمل راستے ختم ہونے سے پہلے نکل سکتا ہے۔ کلائنٹ کے ہکس جہاں موجود ہوں استعمال کریں، جیسے OpenVPN کے up اور down اسکرپٹس یا systemd یونٹ کا ExecStartPost، کیونکہ وہ اسی مقام پر چلتے ہیں جو واقعی آپ کے لیے اہم ہے۔ ہکس انہیں بلانے والے کے مراعات کے ساتھ چلتے ہیں، اس لیے نیٹ ورک دوبارہ شروع کرنے والے ہک کو مفروضے کے بجائے واضح قاعدہ درکار ہے۔ کنکشن کی پوری زندگی میں بالکل ایک مالک رکھیں۔
جب دو نگران ایک ہی پروفائل شروع اور بند کرتے ہیں تو نتیجہ دوبارہ جڑنے کا ایک حلقہ ہوتا ہے جو فراہم کنندہ کی بندش جیسا پڑھا جاتا ہے۔ رن بک اس وقت ختم ہوتی ہے جب پرت دستاویزی ہو، راز کے پاس ایسا چینل ہو جو argv نہ ہو، انتظار کی شرط وقت کی حد کے ساتھ حالت کی جانچ ہو، اور ایک عمل زندگی کے چکر کا مالک ہو۔