macOS-এ টার্মিনাল থেকে VPN স্ট্যাটাস: scutil, রুট বা পিং
সার্ভিসের অবস্থা, কার্নেলের রুট এবং একটি বাস্তব অনুরোধ তিনটি ভিন্ন প্রশ্নের উত্তর দেয়। সার্ভিসের শনাক্তকারী ধরে স্ক্রিপ্ট লিখুন এবং রুটটিও যাচাই করুন।
কোনো ডিপ্লয় স্ক্রিপ্টে কপি শুরুর আগে টানেল চালু আছে কি না তা দেখার একটি ধাপ থাকে। তিনটি উত্তর পাওয়া যায়, আর তারা একই কথা বলে না: scutil যে সার্ভিস-অবস্থা জানায়, কার্নেল যে রুট বেছে নিয়েছে, এবং বিপরীত প্রান্ত সত্যিই উত্তর দেয় কি না। এগুলো তুলনা করাই হলো এমন এক পরীক্ষার মধ্যে পার্থক্য যা কপিটির পূর্বাভাস দেয় আর এমন একটির মধ্যে যা শুধু লগ সাজায়।
VPN চালু আছে কি না — তিনটি উত্তর
সার্ভিসের অবস্থা কন্ট্রোল-প্লেনের তথ্য। macOS জানে একটি কনফিগারেশন সংযুক্ত কারণ তার ক্লায়েন্ট প্রসেস তা বলেছে। রুট হলো ডেটা-প্লেনের তথ্য: কার্নেল এই গন্তব্যটি ওই ইন্টারফেস দিয়ে পাঠাবে। আর পৌঁছানোযোগ্যতা প্রান্ত-থেকে-প্রান্তের তথ্য, এবং এটি এমন কারণে ব্যর্থ হতে পারে যা অন্য দুটির কেউই দেখে না।
| Signal | Answers | Blind spot |
|---|---|---|
scutil --nc status | Is the service connected? | Third-party clients, wrong routes |
route -n get | Where would this go? | The peer may be down |
| A request to the far side | Does it work now? | Slow, and it changes state |
উপকারী পরীক্ষা প্রথম দুটিকে একত্র করে এবং তৃতীয়টিকে প্রমাণ হিসেবে ব্যবহার করে যে অন্য দুটি মিথ্যা বলেনি। যেকোনো একটি একা হলো টাইমস্ট্যাম্পসহ একটি অনুমান।
প্রদর্শিত নাম নয়, শনাক্তকারী পড়ুন
scutil --nc list
scutil --nc status "Office"
তালিকাটি প্রতি সার্ভিসে একটি লাইন ছাপায়, আর প্রতিটি লাইনে বন্ধনীতে একটি অবস্থা থাকে, তারপর সার্ভিসের শনাক্তকারী, ধরন ও প্রদর্শিত নাম। শনাক্তকারী ধরে স্ক্রিপ্ট লিখুন, কারণ প্রদর্শিত নামটি কেউ সিস্টেম সেটিংসে টাইপ করেছে এবং তা নোটিশ ছাড়াই বদলে যেতে পারে। স্ট্যাটাস কমান্ডটি একটি শব্দ ছাপায়, কিছু সার্ভিস-ধরনের জন্য তারপর পরিসংখ্যান; পুরো আউটপুটে নাম খোঁজার বদলে ওই প্রথম শব্দটির সঙ্গে মিলিয়ে দেখুন, কারণ নামটি অন্যত্রও আসে।
সার্ভিস চালু করা অনুমোদনের অনুরোধ আনতে পারে, অথবা প্রোফাইল ম্যানেজড হলে সরাসরি প্রত্যাখ্যাত হতে পারে। ওই প্রত্যাখ্যান টানেলের ত্রুটি নয়; এটি একটি নীতিবাক্য যে কে এটি তুলতে পারে।
তৃতীয় পক্ষের ক্লায়েন্ট তালিকা থেকে লুকায়
খালি তালিকা মানে VPN নেই নয়। সিস্টেমের নিজস্ব নেটওয়ার্ক সেটিংসের ভেতরে তৈরি কনফিগারেশন এখানে দেখা যায়; কোনো ভেন্ডর ক্লায়েন্ট, ম্যানেজমেন্ট প্রোফাইল বা তৃতীয় পক্ষের অ্যাপ এমন একটি সক্রিয় টানেল ধরে রাখতে পারে যা এই কমান্ড কখনো দেখে না। নিজের সার্ভিসের জন্য তার নিজের টুলই কর্তা। যে ক্লায়েন্ট কখনো এতে নিবন্ধিত হয়নি তাকে scutil জিজ্ঞাসা করলে কিছুই ফেরে না, আর কিছুই ফেরা আর «সংযোগ বিচ্ছিন্ন» এক উত্তর নয়।
তালিকা খালি কিন্তু ট্রাফিক স্পষ্টভাবে এনক্রিপ্টেড হলে বরং ইন্টারফেসটি খুঁজুন: প্রত্যাশিত রেঞ্জে ঠিকানা থাকা একটি utun বা ppp ডিভাইস প্রমাণ যে কিছু একটি টানেল প্রতিষ্ঠা করেছে। এটি সার্ভিস-অবস্থার চেয়ে দুর্বল সংকেত, তাই ইন্টারফেসকে পরিচয়ের প্রমাণ ভাবার বদলে এটিকে রুট-যাচাইয়ের সঙ্গে জুড়ুন। একাধিক ক্লায়েন্ট একাধিক এমন ইন্টারফেস তৈরি করতে পারে, আর তাদের মধ্যে কেবল একটি আপনার বোঝানো টানেলের।
স্ট্যাটাস মানেই রাউটিং নয়
সংযুক্ত সার্ভিস বলে টানেলটি আছে। এটি বলে না যে আপনার গন্তব্য এটি ব্যবহার করে। ঠিকানাগুলো পড়ুন, তারপর কার্নেলকে সরাসরি জিজ্ঞাসা করুন:
ifconfig | grep -A4 utun
netstat -rn -f inet
route -n get 10.40.0.20
ফুল-টানেল ক্লায়েন্ট টানেলের মধ্য দিয়ে একটি ডিফল্ট রুট বসায়; স্প্লিট-টানেল ক্লায়েন্ট নির্দিষ্ট কিছু প্রাইভেট প্রিফিক্স বসায়। দুটোই Connected জানায়, আর কেবল স্ট্যাটাস দেখে এমন স্ক্রিপ্ট আনন্দে ভুল পথে চলবে। একটি টানেল থামালে অন্য ক্লায়েন্ট বসানো রুট মোটেই সরে না, আর এভাবেই একটি মেশিনে একসঙ্গে সংযুক্ত সার্ভিস ও পুরোনো রুট থেকে যায়। পুরো রুট টেবিলের দিকে নয়, আপনার দরকারের গন্তব্যের দিকে তাকান।
নামকরণ আলাদা একটি সমস্যা
অন্য মেশিনগুলো নাম দিয়ে Mac-এ পৌঁছাতে পারে না, অথচ তার ঠিকানা কাজ করে, আর সেটিকে VPN-এর ত্রুটি বলে জানানো হয়। লোকাল হোস্টনাম, হোস্টনাম ও DNS রেকর্ড তিনটি আলাদা জিনিস। scutil --get LocalHostName দেখায় Bonjour নাম; sudo scutil --set HostName mac-office ঠিক করে সিস্টেম যে নাম জানায়।
কোনো সেটিংই অফিস জোনে রেকর্ড তৈরি করে না। অন্য হোস্টগুলোকে যদি DNS দিয়ে নামটি রিজলভ করতে হয়, তবে জোনের মালিককে তা যোগ করতে হবে, অথবা স্ক্রিপ্টের বদলে ঠিকানাটি ব্যবহার করা উচিত। স্থির নাম দিলে ঘোষণাগুলো সামঞ্জস্যপূর্ণ হয়; তাতে রিজলভার উত্তর দিতে শুরু করে না।
সার্ভিসের শনাক্তকারী ও প্রত্যাশিত রুটের আকৃতি একসঙ্গে স্ক্রিপ্টে লিখে রাখুন, এবং কপির আগে দুটোই যাচাই করুন। চালু থাকা কিন্তু ভুল পথে রাউট করা টানেল ঠিক টানেল না থাকার মতোই ব্যর্থ হয়, আর Connected লেখা লগ-লাইন পরের মানুষকে ভুল জায়গায় খুঁজতে পাঠাবে।