Mac L2TP স্প্লিট রুট: হোস্ট ঠিকানা কেন কাজ করে না
setadditionalroutes নেটওয়ার্ক ও মাস্ক জোড়া চায়, পুরো তালিকা প্রতিস্থাপন করে, এবং আক্ষরিক সার্ভিস নাম দরকার। গেটওয়েকে দোষ দেওয়ার আগে টেবিলটি দেখুন।
VPN সংযুক্ত হয়, মেনু বারে দেখা যায়, তবুও একটি অভ্যন্তরীণ হোস্ট টাইম আউট করে। এই পরিস্থিতিতে তিনটি সম্ভাব্য কারণ আছে, এবং কোনটি প্রযোজ্য তা নির্ভর করে টানেলটি কীভাবে কনফিগার করা হয়েছিল তার উপর। হয় রুট কমান্ডটি নেটওয়ার্ক ঠিকানা দরকার এমন জায়গায় হোস্ট ঠিকানা ব্যবহার করেছে, নয়তো প্রোফাইল নিজেই একটি ডিফল্ট রুট ইনস্টল করে যা সিদ্ধান্তটি গিলে ফেলে, নয়তো ক্লায়েন্টটি একটি PPP টানেল যা প্রোফাইল কী-এর বদলে hook দরকার। এই ক্রমে সেগুলো পরীক্ষা করুন, কারণ প্রথমটি বাদ দেওয়া সবচেয়ে সস্তা।
গন্তব্য একটি নেটওয়ার্ক ঠিকানা, মাস্ক প্রিফিক্স বর্ণনা করে
networksetup -setadditionalroutes গন্তব্য, সাবনেট মাস্ক ও গেটওয়ে-এর ত্রয়ী নেয়। যে কলটি একটি অভ্যন্তরীণ সাবনেট টানেলের মধ্য দিয়ে পাঠায় তা এমন দেখায়:
sudo networksetup -setadditionalroutes "VPN (L2TP)" 192.168.1.0 255.255.255.0 10.2.0.0
খেয়াল করুন গন্তব্য কী: নেটওয়ার্ক ঠিকানা, আপনি যে সার্ভারে পৌঁছাতে চাইছেন তার ঠিকানা নয়। যে ঘটনাটি এই নিবন্ধটির জন্ম দিয়েছে, সেখানে ওই অবস্থানে 192.168.1.20 দিয়ে একই কমান্ড কোনো কাজে আসেনি, এবং এটি 192.168.1.0 দিয়ে প্রতিস্থাপন করলে সঙ্গে সঙ্গে কাজ করেছে। একই মাস্ক, একই গেটওয়ে, একটি ভিন্ন সংখ্যা। পুরো ব্যর্থতাটাই ক্ষুদ্র পরিসরে এটিই।
কারণটি নীতি নয়, গণিত। একটি হোস্ট ঠিকানা /24 মাস্কের সঙ্গে জুড়ে দিলে 192.168.1.0/24 বর্ণনা করে না; এটি এমন কিছু বর্ণনা করে যা রাউটিং টেবিল কাজে লাগিয়ে ধরে রাখতে পারে না, তাই এন্ট্রিটি প্রত্যাখ্যাত বা উপেক্ষিত হয় এবং টানেল শেষে আপনার ইচ্ছার চেয়ে কম বহন করে।
যখন ঠিক একটি হোস্ট দরকার, তখন হোস্ট ঠিকানাটি 255.255.255.255 মাস্কের সঙ্গে ব্যবহার করুন। মিশ্র জোড়াই এখানে ভুল হয়, হোস্ট ঠিকানা ব্যবহার করা নিজে নয়। একটি ঠিকানা থেকে তৈরি /32 বৈধ রুট; একটি ঠিকানা থেকে তৈরি /24 ভুল।
কলটি তালিকা প্রতিস্থাপন করে, আর নামটি আক্ষরিক
প্রথম প্রচেষ্টায় দুটি আচরণ মানুষকে অবাক করে। কমান্ডটি সংযোজন না করে সম্পূর্ণ অতিরিক্ত রুট তালিকাই সেট করে, তাই একটি প্রিফিক্স যোগ করা কল আগে থাকা অন্যগুলোকে নিঃশব্দে সরিয়ে দেয়। পুরো সেটটি একক আহ্বানে তৈরি করুন।
সার্ভিস নামটিও আপনার বানানো লেবেল নয়। এটি টুল থেকে পড়ুন এবং টাইপ সাফিক্সসহ হুবহু কপি করুন:
networksetup -listallnetworkservices
একটি অক্ষরে ভিন্ন নাম পড়ার যোগ্য কোনো ত্রুটি দেয় না, কোনো রুটও দেয় না। এখানে সঠিক পদ্ধতি হলো কপি-পেস্ট, স্মৃতি থেকে আবার টাইপ করা নয়।
যখন প্রোফাইল ডিফল্ট রুট দাবি করে
স্প্লিট রুট যেকোনো গন্তব্যের ক্ষেত্রে ডিফল্ট রুটের কাছে হেরে যায় যা তারা স্পষ্টভাবে কভার করে না, এবং পূর্ণ টানেলের জন্য কনফিগার করা একটি L2TP প্রোফাইল ঠিক সেটাই ইনস্টল করে। প্রোফাইল যদি বলে সবকিছু টানেলের মধ্য দিয়ে যায়, তবে অতিরিক্ত রুট তালিকা খুব সামান্য বদলায়। আপনার এন্ট্রি ভুল নয়; এটি কেবল সেই গন্তব্যগুলোর জন্য অপ্রাসঙ্গিক যা এটি কখনো নাম দেয় না। এর নিয়ন্ত্রণ সাধারণত কোনো রুট কমান্ডে নয়, প্রোফাইলের সব-ট্রাফিক-পাঠানোর সেটিংয়ে থাকে।
আরও এন্ট্রি সম্পাদনার আগে সিদ্ধান্ত নিন আপনি আসলে কোন মডেল চান। ব্যতিক্রমসহ পূর্ণ টানেল নির্দিষ্ট প্রিফিক্সসহ স্প্লিট টানেল থেকে আলাদা কনফিগারেশন, এবং দুটো মিশিয়ে দিলে এমন টেবিল তৈরি হয় যা কেউ পূর্বানুমান করতে পারে না।
যদি প্রতিষ্ঠান পূর্ণ টানেল দাবি করে, স্থানীয়ভাবে এটি ভাগ করার চেষ্টা বন্ধ করুন এবং দাবিটি নীতির মালিকের কাছে নিয়ে যান। স্থানীয়ভাবে যোগ করা রুট যা এর বিরোধিতা করে তা পরবর্তী প্রোফাইল আপডেটেই সরিয়ে দেওয়া হবে।
PPP টানেলের কী-এর বদলে hook দরকার
PPP-ভিত্তিক টানেলের জন্য defaultroute হলো প্রোফাইল কী যা ডিফল্ট রুট তৈরি করে; এটি বাদ দিলে ক্লায়েন্ট প্রতিটি গন্তব্য দাবি করা বন্ধ করে। এরপর ইন্টারফেস দেখা দেওয়ার পরে রুট যোগ করা হয়, সাধারণত /etc/ppp/ip-up থেকে:
#!/bin/sh
/sbin/route add -net 192.168.1.0 -interface ppp0
স্ক্রিপ্টটি root-এর মালিকানায় ও এক্সিকিউটেবল রাখুন, এবং মেশিনে একাধিক টানেল প্রোফাইল থাকলে ইন্টারফেস নামের উপর একটি গার্ড যোগ করুন। যে hook প্রতিটি PPP লিংকের জন্য চলে এবং একটি ডিভাইস নাম ধরে নেয়, সেটি দীর্ঘজীবী ছোট একটি বাগ।
তিনটি অনুরোধে স্প্লিট যাচাই করুন
সংযুক্ত থাকার সময় টেবিলটি নিন এবং কোন ইন্টারফেস টানেল পরিবেশন করে তা লক্ষ্য করুন। তারপর নির্দিষ্ট গন্তব্য পরীক্ষা করুন, এটি তৈরি করা কমান্ডের এক্সিট স্ট্যাটাসে ভরসা করার বদলে। এক্সিট কোড জানায় টুলটি আর্গুমেন্ট গ্রহণ করেছে কি না, ট্রাফিক আপনার ইচ্ছাকৃত পথে যাচ্ছে কি না তা নয়।
তিনটি অনুরোধ দিয়ে শেষ করুন যা স্প্লিট প্রমাণ করে: ঠিকানা দিয়ে একটি অভ্যন্তরীণ হোস্ট, অভ্যন্তরীণ রিজলভার দিয়ে একটি অভ্যন্তরীণ নাম, এবং একটি পাবলিক সাইট যা এখনও স্থানীয় সংযোগ ব্যবহার করা উচিত। পাবলিক সাইটটিও যদি এখন টানেলের মধ্য দিয়ে যায়, তবে রুট তালিকা যা-ই বলুক, স্প্লিট কখনো ঘটেনি।
আরেকবার পুনঃসংযোগ করুন এবং অভ্যন্তরীণ অনুরোধটি পুনরাবৃত্তি করুন, কারণ হাতে যোগ করা রুট তাদের বৈধ করা ইন্টারফেসের চেয়ে বেশি দিন বাঁচতে পারে এবং টানেল পড়ে যাওয়ার পর নিঃশব্দে ট্রাফিককে ব্ল্যাকহোলে পরিণত করতে পারে।