VPN ক্লায়েন্ট স্ক্রিপ্টিং: পাসওয়ার্ডের আগে স্তর বাছুন
ভেন্ডরের CLI, rasdial, অ্যাপের অভিপ্রায় বা UI অটোমেশন প্রত্যেকে ভিন্নভাবে ব্যর্থ হয়। স্তর বাছুন, গোপনীয়তা argv-র বাইরে রাখুন, এবং অবস্থার জন্য অপেক্ষা করুন, প্রস্থান কোডের নয়।
স্ক্রিপ্ট 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 নয়, অপেক্ষার শর্ত সময়সীমাসহ অবস্থা যাচাই হয়, এবং একটি প্রক্রিয়া জীবনচক্রের মালিক হয়।