হোস্ট বিট সহ রুট প্রত্যাখ্যাত? উদ্দিষ্ট প্রিফিক্স খুঁজুন
প্রত্যাখ্যাত রুট লাইন সাধারণত হোস্ট বিটের কারণে হয়, ফরওয়ার্ডিং সমস্যা নয়। মাস্ক প্রসারিত করার বদলে আপনি যে প্রিফিক্স চেয়েছিলেন তা নির্ধারণ করুন।
আপনার রুট লাইন প্রত্যাখ্যাত হয়ে ফিরে আসে, আর যে পরামর্শ পাচ্ছেন তা বলে IP ফরওয়ার্ডিং চালু করুন। এই দুটি বিষয় সমস্যার ভিন্ন পর্যায়ে থাকে। ফরওয়ার্ডিং ঠিক করে হোস্ট ইন্টারফেসের মধ্যে প্যাকেট সরাতে পারে কি না; আপনি যে গন্তব্য লিখেছেন তা বৈধ নেটওয়ার্ক কি না সে সম্পর্কে এর কোনো মত নেই। আগে প্রিফিক্স ঠিক করুন, কারণ পরস্পরবিরোধী ঠিকানা ও মাস্ককে ফরওয়ার্ডিং বাঁচাতে পারবে না।
পার্সার আসলে কী নিয়ে অভিযোগ করছে
ঠিকানা ও মাস্ক মিলিয়ে লেখা গন্তব্যকে একটি নেটওয়ার্ক বর্ণনা করতে হয়, আর নেটওয়ার্ক শুরু হয় শূন্য করা হোস্ট বিট দিয়ে। আপনার দেওয়া ঠিকানায় যদি এখনও হোস্ট অংশে মান থাকে, তাহলে জোড়াটি অভ্যন্তরীণভাবে অসংগত: 172.20.130.0 দেখতে পরিপাটি লাগে কারণ এটি শূন্যে শেষ হয়, কিন্তু চতুর্থ অক্টেটে শূন্য থাকাই একমাত্র গুরুত্বপূর্ণ বিষয় নয়। এখানে তৃতীয় অক্টেটই বিচ্ছিন্ন বিট ধরে আছে।
সরঞ্জামগুলি এই অসংগতি ভিন্নভাবে সামলায়। কঠোর পার্সার লাইনটি প্রত্যাখ্যান করে হোস্ট বিটের নাম বলে। নরম পার্সার ঠিকানাটি মাস্ক করে আপনি যা চাননি তা ইনস্টল করে, যা আরও খারাপ, কারণ কনফিগারেশন এখন এমন একটি পরিসর রুট করে যা আপনি কখনও চাননি। পাইথনের ipaddress মডিউল পছন্দটি সরাসরি দেখায়: কঠোর নেটওয়ার্ক পার্সিং ত্রুটি তোলে, আর strict=False হোস্ট বিট মাস্ক করে দেয়। আপনার ক্লায়েন্ট সংস্করণভেদে কঠোর, নরম বা অসংগত হতে পারে, তাই অভ্যাসে ভরসা না করে বার্তাটি পড়ুন।
উদাহরণটি হাতে করে দেখুন
এমন একটি টানেল নিন যাকে /20 মাস্ক দিয়ে 172.20.130.0 পর্যন্ত পৌঁছাতে হবে। /20 তৃতীয় অক্টেট থেকে চারটি বিট ধার করে, তাই ওই অক্টেট কেবল 16-এর ধাপে গণনা হয়: 0, 16, 32 এবং তারপর 240 পর্যন্ত। 130 মানটি 128 ও 143-এর মধ্যে পড়ে, অর্থাৎ ঘেরা নেটওয়ার্ক শুরু হয় 172.20.128.0 থেকে, শেষ অক্টেট শূন্য করা 172.20.130.0 থেকে নয়।
লিখিতভাবে ব্লকটি 172.20.128.0 থেকে 172.20.143.255 পর্যন্ত বিস্তৃত এবং 4,096টি ঠিকানা ধরে। একই মানগুলি অ-কঠোর পার্সারে দিলে যে প্রতিস্থাপনটি সে আপনার পক্ষে করত তা দেখা যায়:
$ python3 -c "import ipaddress; n=ipaddress.ip_network('172.20.130.0/20', strict=False); print(n, n.num_addresses)"
172.20.128.0/20 4096আসলে কোন গন্তব্য চেয়েছিলেন তা নির্ধারণ করুন
প্রত্যাখ্যাত লাইনটি সাধারণত তিনটি উদ্দেশ্যের একটি লুকিয়ে রাখে, আর বেছে নিতে পারেন কেবল আপনি। টানেলের যদি পুরো ব্লক দরকার হয়, তবে 172.20.128.0/20 লিখুন, যা প্রামাণিক নেটওয়ার্ক ঠিকানা। টানেলের যদি কেবল 130 সেগমেন্ট দরকার হয়, তবে মাস্কটি ভুল ছিল এবং 172.20.130.0/24 হলো সৎ রূপ। যদি একটিমাত্র মেশিন লক্ষ্য হয়, IPv4 হোস্ট রুট হলো /32 এবং এতে কোনো মাস্ক-গণিত থাকে না।
এর প্রতিটি ভিন্ন পরিমাণ ট্রাফিক অনুমোদন করে, এবং অভিযোগ থামা পর্যন্ত মাস্ক না বাড়ানোর আসল কারণ এটিই। /16 লাইনটিকে প্রায় সর্বত্র গ্রহণ করে এবং ট্রাফিক এমন গন্তব্যের দিকে পাঠায় যা আপনি কখনও টানেল দিয়ে রুট করতে চাননি। উদ্দেশ্যের সঙ্গে মেলে এমন সংকীর্ণতম প্রিফিক্স লিখুন, তারপর আপনি যে পরবর্তী হপ আশা করেন তার বিপরীতে যাচাই করুন, পার্সারের নীরবতার বিপরীতে নয়।
কেন ফরওয়ার্ডিং কখনও সমাধান ছিল না
প্রত্যাখ্যাত রুট কখনও ফরওয়ার্ডিং পথে পৌঁছায় না, তাই net.ipv4.ip_forward বদলালে ফলাফল বদলাতে পারে না। ওই সেটিংটি পরে গুরুত্বপূর্ণ, যখন হোস্টকে ইন্টারফেসের মধ্যে প্যাকেট পাঠাতে হয়, আর টেবিল সঠিক হওয়ার আগে এটি চালু করা কেবল পরবর্তী কোন পর্যায় ব্যর্থ হবে তা বদলায়।
একই বিন্দুতে আরও দুটি বিষয়কে প্রায়ই দোষ দেওয়া হয়। রুট গ্রহণ করা হতে পারে এবং তবুও আরও নির্দিষ্ট রুটের কাছে হারতে পারে, এবং সঠিক অনুসন্ধানের পরে ফায়ারওয়াল নিয়ম ট্রাফিক ফেলে দিতে পারে। পর্যায়গুলি আলাদা রাখুন: সিনট্যাক্স, ইনস্টলেশন, নির্বাচন, ফিল্টারিং। ভুল পর্যায়ে কাজ করা উৎপাদনশীল মনে হয় কারণ প্রতিটি পরিবর্তন কিছু আবার শুরু করে।
ইনস্টল করা রুট এবং এটি যে পথ জেতে তা যাচাই করুন
ক্লায়েন্ট লাইনটি গ্রহণ করলে দেখুন সে কী ইনস্টল করেছে এবং ব্লকের ভিতরের প্রতিনিধিত্বমূলক ঠিকানার জন্য কার্নেল কোন রুট বেছে নেয়। ইনস্টল করা প্রিফিক্স আপনার লেখার থেকে আলাদা হলে আপনার পক্ষে একটি নরমালাইজার কাজ করেছে।
ব্লকের ভিতরের একটি সদস্য ঠিকানা এবং বাইরের একটি ঠিকানা জিজ্ঞাসা করুন, যাতে তুলনাটি একটিমাত্র আশ্বস্তকারী লাইনের বদলে অর্থবহ হয়:
ip -4 route show 172.20.128.0/20
ip -4 route get 172.20.140.10
ip -4 route get 172.20.200.10তৃতীয় জিজ্ঞাসাটি আপনার প্রিফিক্স সঠিক হলে টানেলের বাইরে পড়া উচিত, আর না পড়লে আপনি যে রুট তৈরি করেছেন তা আপনি যা ভাবেন তার চেয়ে প্রশস্ত। পরবর্তী সেটিং স্পর্শ করার আগে প্রিফিক্সটি কী ঢাকার কথা ছিল তা লিখে রাখুন, কারণ পার্স হয় এমন রুট আর কাজ করে এমন পথ আলাদা পর্যবেক্ষণই থাকে।