scutil --nc দিয়ে টার্মিনাল থেকে সংরক্ষিত Mac VPN চালু করা
সংরক্ষিত macOS VPN সেবা চালু, পরীক্ষা ও বন্ধ করতে scutil --nc ব্যবহার করুন, শংসাপত্র argv-এর বাইরে রাখুন এবং ট্রাফিক সত্যিই টানেল ব্যবহার করে তা প্রমাণ করুন।
সিস্টেম সেটিংসে আপনার একটি সংরক্ষিত VPN সেবা আছে, এবং আপনি চান টার্মিনাল সেটি চালু করুক। macOS-এ সমর্থিত পথ হলো scutil --nc, তবে শুধু সেই সব সেবার জন্য যা সিস্টেমের নিজস্ব নেটওয়ার্ক সংযোগ ব্যবস্থাপকের মালিকানাধীন। মেনু বার API নয়: তৃতীয় পক্ষের ক্লায়েন্টের সাধারণত নিজস্ব অটোমেশন থাকে, এবং ব্যবস্থাপনা সেবা যে প্রোফাইল পাঠায় তা স্থানীয়ভাবে চালু হতে অস্বীকার করতে পারে। এটি আমার অনুসরণ করা চেকলিস্ট: সঠিক সেবাটি খুঁজুন, তার অবস্থা পড়ুন, সেটি চালু করুন, অবস্থা বদলানো পর্যন্ত অপেক্ষা করুন, তারপর প্রমাণ করুন যে ট্রাফিক সত্যিই টানেল ব্যবহার করছে। যে প্রথম ধাপটি মেলে না সেখানেই থামুন, কারণ পরের প্রতিটি কমান্ড ধরে নেয় আগেরটি সফল হয়েছে।
চালু করার চেষ্টা করার আগে সেবাটি খুঁজুন
আপনার মনে থাকা প্রোফাইলের নাম নয়, ইনভেন্টরি দিয়ে শুরু করুন:
scutil --nc help
scutil --nc list
প্রতিটি লাইন একটি স্ট্যাটাসকে সেবা শনাক্তকারী, ধরন ও প্রদর্শিত নামের সঙ্গে জোড়া দেয়। শনাক্তকারীটাই স্ক্রিপ্টের জন্য ব্যবহার করার মান, কারণ প্রদর্শিত নাম পুনরাবৃত্ত হয় এবং সম্পাদনা করা যায়। অ্যাপলের scutil ম্যানুয়াল নেটওয়ার্ক সংযোগ মোড নথিভুক্ত করে, আর ইনস্টল করা --nc help হলো সেই Mac-এর সাবকমান্ডের প্রামাণিক তালিকা; পুরোনো গাইডের কোনো ফ্ল্যাগ আপনার macOS সংস্করণে এখনো আছে বলে ধরে নেবেন না।
খালি তালিকা একটি ফলাফল, ত্রুটি নয়। কোনো ভেন্ডর ক্লায়েন্ট বা ব্যবস্থাপনা প্রোফাইল তৈরি করা সেবা এখানে অদৃশ্য থাকলেও সক্রিয় থাকতে পারে, অথবা এমন ধরনে দৃশ্যমান হতে পারে যা নেটিভ নিয়ন্ত্রক চালাতে পারে না। সে ক্ষেত্রে ভেন্ডরের টুল বা প্রোফাইলের ডকুমেন্টেশন ব্যবহার করুন। শুধু চালু করার মতো কিছু থাকার জন্য একটি সমান্তরাল নেটিভ প্রোফাইল তৈরি করা খারাপ বিনিময়।
বর্তমান অবস্থা পড়ুন এবং নির্বাচক নিশ্চিত করুন
চালু করার আগে সেবার অবস্থা জিজ্ঞাসা করুন, যাতে জানতে পারেন সফল চালু হলে কী বদলানো উচিত:
scutil --nc status "Office VPN"
যদি দুটি সেবা একই প্রদর্শিত নাম ভাগ করে, নামটি অস্পষ্ট। পরিবর্তে শনাক্তকারী দিন; কমান্ডটি দুটোই গ্রহণ করে, কিন্তু কেবল শনাক্তকারীই একটি সেবা নির্বাচন করার নিশ্চয়তা দেয়। স্ক্রিপ্টে বিশ্লেষণ করার আগে যাচাই করুন স্ট্যাটাস শব্দটি আপনার চেনা একটি — সাধারণত Connected, Disconnected, Connecting বা Disconnecting। প্রোফাইলটি ব্যবস্থাপিত কি না তাও যাচাই করুন, কারণ লক করা কনফিগারেশন কমান্ড গ্রহণ করে হয়তো এড়িয়ে যেতে পারে বা নিশ্চিতকরণ চাইতে পারে।
এই অবস্থা জিজ্ঞাসা সস্তা, তাই অটোমেশনে এটি পাহারাদার হিসেবে ব্যবহার করুন: কেবল তখনই চালু করুন যখন স্ট্যাটাস Disconnected, আর Connecting-কে ব্যর্থতা ভাববেন না। সেবা ইতিমধ্যে Connected থাকলে কাজ করা টানেল ব্যাহত না করে চালু করা বাদ দিন।
সংযোগ চালু করুন এবং অবস্থা স্থির হওয়ার অপেক্ষা করুন
চালু করার অনুরোধটি অ্যাসিঙ্ক্রোনাস। কমান্ডটি ফেরে যখন অনুরোধ গৃহীত হয়, তখন নয় যখন প্রমাণীকরণ শেষ হয় বা রুট ইনস্টল হয়। এটি চালান, তারপর সীমিত অপেক্ষায় অবস্থা জিজ্ঞাসা করুন এবং সেবা Disconnected-এ ফিরে গেলে বেরিয়ে যান:
scutil --nc start "Office VPN"
n=0
while [ "$n" -lt 30 ]; do
state=$(scutil --nc status "Office VPN" | head -n 1)
[ "$state" = "Connected" ] && break
[ "$state" = "Disconnected" ] && { echo "start failed"; exit 1; }
sleep 2
n=$((n + 1))
done
যে Connecting অবস্থা কখনো মেটে না তা সাধারণত শংসাপত্র, MFA বা সার্ভারের দিকে ইঙ্গিত করে, scutil-এর দিকে নয়। কমান্ডটি ইন্টারঅ্যাকটিভ লগইন দিতে পারে না, তাই টোকেন বা হার্ডওয়্যার কী আশা করা প্রোফাইল Connecting-এ থেকে শেষে ফিরে যাবে। পুনরায় চেষ্টা যোগ করার আগে স্ট্যাটাস শব্দটি পড়ুন; প্রমাণীকরণের অনুরোধের বিরুদ্ধে লুপ সফল হতে পারে না।
শেলের প্রস্থান অবস্থাকে প্রস্তুতি ভাববেন না। উপযোগী সংকেত হলো অবস্থা স্ট্রিং, তারপর প্রমাণ যে টানেল ট্রাফিক বহন করছে। নীরবে ফেরা চালু কমান্ড আপনাকে এমন সংযোগে রেখে যেতে পারে যা কখনো প্রমাণীকরণ হয় না।
টানেল ট্রাফিক বহন করে প্রমাণ করুন, শুধু Connected বলা নয়
Connected সংযোগের বর্ণনা দেয়, রাউটিং সিদ্ধান্তের নয়। নেটিভ PPP ও IKEv2 সেবা ppp বা utun ইন্টারফেস তৈরি করে রুট ইনস্টল করে, আর বিভক্ত টানেল ইচ্ছাকৃতভাবে ডিফল্ট রুট অক্ষত রাখে। ইন্টারফেস ও দুই ঠিকানা পরিবার পরীক্ষা করুন:
ifconfig -l
netstat -rn -f inet
netstat -rn -f inet6
scutil --dns
সংখ্যা অনুমান না করে সেবা যে ইন্টারফেস তৈরি করেছে তা খুঁজুন, তারপর রাউটিং টেবিলকে জিজ্ঞাসা করুন একটি নির্দিষ্ট গন্তব্য কোন ইন্টারফেস ব্যবহার করে: route -n get 10.0.0.10, এর জায়গায় একটি অভ্যন্তরীণ হোস্ট বসিয়ে। যদি এটি ভৌত ইন্টারফেস জানায়, টানেল চালু কিন্তু সেই প্রবাহ বহন করছে না। বিভক্ত টানেলের রুট, রিজলভার ক্রম এবং কোনো স্থানীয় ফায়ারওয়াল নিয়ম যাচাই করুন যা টানেল ইন্টারফেসকে অনুমতি দেয় কিন্তু প্রক্রিয়াকে নয়।
নাম রেজলিউশন হলো সাধারণ ভুয়া নেতিবাচক। অভ্যন্তরীণ নাম ভুল রিজলভার দিয়ে মেটানো যায় যখন টানেল পুরোপুরি সুস্থ, যা VPN ত্রুটি মনে হয় অথচ নয়। scutil --dns দেখায় macOS কোন ক্রম ব্যবহার করবে; রিজলভার বদলের পরে dscacheutil -flushcache ও sudo killall -HUP mDNSResponder দিয়ে ক্যাশে পরিষ্কার করুন।
শংসাপত্র ও বিশেষাধিকার কমান্ড লাইনের বাইরে রাখুন
পাসওয়ার্ড, পূর্ব-ভাগ করা কী বা টোকেন কখনো আর্গুমেন্টে রাখবেন না। আর্গুমেন্ট প্রক্রিয়া তালিকায় দৃশ্যমান এবং শেল ইতিহাসে জমা হয়, আর কপি করা সাপোর্ট ট্রান্সক্রিপ্ট সেগুলো ফাঁস করতে পারে। প্রোফাইলের নিজস্ব শংসাপত্র ব্যবস্থাপনা — Keychain আইটেম, সিস্টেম প্রম্পট বা ক্লায়েন্টের প্রমাণীকরণ প্রবাহ — গোপন তথ্যের জায়গা।
sudo দিয়ে কমান্ড চালালে ইন্টারঅ্যাকটিভ লগইন নজরদারিহীন হয় না। এটি কার্যকর ব্যবহারকারী বদলায়, GUI প্রম্পট, হার্ডওয়্যার টোকেন বা লগইন কীচেইনের প্রাপ্যতা নয়। ব্যবহারকারী লগইন করার ও কীচেইন খোলার পরে LaunchAgent সেবা চালু করতে পারে; LaunchDaemon সাধারণত ব্যবহারকারী সেশনভিত্তিক সেই অংশগুলোতে পৌঁছাতে পারে না। কোনো প্রতিষ্ঠান সেবাটি ব্যবস্থাপনা করলে তার জীবনচক্রের নিয়ম যেকোনো স্থানীয় স্ক্রিপ্টের ওপর জেতে।
সেবা বন্ধ করুন এবং বন্ধই আছে যাচাই করুন
চালু করতে যে নির্বাচক ব্যবহার করেছিলেন সেটি দিয়েই বন্ধ করুন, তারপর টানেল চলে গেছে ধরে না নিয়ে অবস্থা আবার পড়ুন:
scutil --nc stop "Office VPN"
scutil --nc status "Office VPN"
Disconnected-এ ফেরা বন্ধ থাকলেও একটি জিনিস যাচাই করা বাকি থাকে: প্রোফাইলটি চাহিদা অনুযায়ী সংযোগের জন্য সেট করা কি না, যা আপনার স্ক্রিপ্ট ছাড়াই এটি ফিরিয়ে আনতে পারে। একই Mac-এ অন্য ক্লায়েন্টের রুট থাকলে সেই রুট নেটিভ বন্ধের পরেও টিকে থাকতে পারে। মেশিনটি VPN-এর বাইরে আছে সিদ্ধান্তে আসার আগে রুট পরীক্ষা আবার করুন।
হাতে চালানো র্যাপারের জন্য ক্রম অপরিবর্তিত রাখুন: তালিকা, স্ট্যাটাস, চালু, জিজ্ঞাসা, রুট পরীক্ষা, বন্ধ, যাচাই। শনাক্তকারী থাকলে মুক্ত-ফরম্যাট আউটপুট থেকে বন্ধুত্বপূর্ণ নাম বিশ্লেষণ করবেন না, আর চালু কমান্ডের প্রস্থানকে প্রস্তুতি ভাববেন না। সংযোগ ব্যবস্থাপক অবস্থা জানায়; আপনার প্রমাণ হলো অবস্থা আর টানেলের দিকে ইঙ্গিত করা একটি রুট।