একটি NAT নিয়ম যা একটি VPN ক্লায়েন্ট পুলকে তার নিজস্ব পাবলিক ঠিকানা দেওয়ার কথা ছিল, শূন্য প্যাকেটে বসে আছে, অথচ একই পুল ভুল সোর্স নিয়ে বেরিয়ে যাচ্ছে। নিয়মটি সাধারণত ঠিকানা নিয়ে ভুল নয়; এটি ইন্টারফেস নিয়ে ভুল। -o eth0:0 এমন একটি ডিভাইসের দিকে ইশারা করে যা নেই, কারণ eth0:0 একটি ঠিকানার সঙ্গে যুক্ত লেবেল, আর সেই ঠিকানার ডিভাইস হলো eth0। কাউন্টারগুলি দেখা এটি নিশ্চিত করার দ্রুততম উপায়, আর সমাধানটি তদন্ত যতটা বোঝায় তার চেয়ে ছোট।

কার্নেল ডিভাইসটিকে কী বলে তা দেখুন

কিছু বদলানোর আগে দুটি দৃশ্য আলাদাভাবে পড়ুন:

ip link show
ip address show dev eth0
ip route get 203.0.113.20

লিঙ্ক তালিকা ইন্টারফেস দেখায়। ঠিকানা তালিকা লেবেলটি বহনকারী দ্বিতীয় একটি IPv4 ঠিকানা দেখাতে পারে: eth0:0, আর সেই ঠিকানার ডিভাইস এখনও eth0। iproute2-এর ঠিকানা ম্যানুয়াল লেবেলটিকে ঠিকানার নাম হিসেবে ধরে, দ্বিতীয় লিঙ্ক হিসেবে নয়, আর পুরো সমস্যাটি এই পার্থক্যের উপরেই দাঁড়িয়ে আছে।

ইতিহাস এই বিভ্রান্তির ব্যাখ্যা দেয়। পুরনো ifconfig eth0:0 সিনট্যাক্স সত্যিই একটি নতুন ইন্টারফেসের মতো দেখাচ্ছিল, আর সেই যুগের স্ক্রিপ্টগুলি এখনও তার উল্লেখ করে। বর্তমান সিস্টেমে অ্যালিয়াস হলো একটি ঠিকানার উপর লেবেল, এবং রাউটিং বা netfilter পথে কিছুই এটিকে আলাদা ইগ্রেস পয়েন্ট হিসেবে গণ্য করে না।

নিয়মটি আসলে কী মিলেছে তা দেখুন

কাউন্টারগুলি মুখস্থ নয়, নিয়মের তালিকার সঙ্গে পড়ুন:

iptables -t nat -L POSTROUTING -v -n --line-numbers

যে নিয়মের প্যাকেট সংখ্যা শূন্যেই থাকে অথচ মিলে যাওয়া ট্রাফিক চলছে, সেটি মূল্যায়িত হচ্ছে না, আর eth0:0 নাম দেওয়া আউটপুট-ইন্টারফেস শর্ত একটি সাধারণ কারণ। রুট যে আউটপুট ডিভাইস বেছে নিয়েছে তা হলো eth0, তাই ভিন্ন নাম খোঁজা শর্ত কখনও সত্য হয় না, কার্নেল যে সোর্স ঠিকানাই বেছে নিক।

শর্তটি আসল ডিভাইসে বদলান এবং লেবেলটি তার বাইরে রাখুন। যদি একই ডিভাইস ভাগ করা দুটি ক্লায়েন্ট পুল আলাদা করতে হয়, তবে সোর্স প্রিফিক্স দিয়ে আলাদা করুন, এমন ইন্টারফেস নাম দিয়ে নয় যা থাকতে পারে না। ওভারল্যাপহীন -s মিলযুক্ত দুটি নিয়ম পড়া যায় ও পরীক্ষা করা যায়; কাল্পনিক ডিভাইসযুক্ত একটি নিয়ম কোনোটিই নয়। প্রতিটি নিয়মে পুলের নাম লেখা একটি মন্তব্য দিন, কারণ ছয় মাস পরে কেবল প্রিফিক্স কাউকে বলবে না কেন এটি সেখানে আছে।

যে রুট ডিভাইসটি বেছে নিয়েছে তা দেখুন

Postrouting NAT চলে রুট ইতিমধ্যে একটি আউটপুট ইন্টারফেস বেছে নেওয়ার পরে, তাই নিয়মের ইন্টারফেসটি অবশ্যই সেই একটি হতে হবে যা রুট বেছে নিয়েছে। কার্নেলকে সরাসরি জিজ্ঞাসা করুন ip route get দিয়ে একটি প্রতিনিধিত্বমূলক ক্লায়েন্ট ঠিকানার জন্য, এবং ডিভাইস ও এটি যে সোর্স জানায় দুটিই পড়ুন।

যদি উত্তরটি eth0বলে, তবে নিয়মের ইন্টারফেস অংশটি নিষ্পত্তি হয়েছে। যদি এটি একটি টানেল ডিভাইস বলে, তবে প্যাকেটটি কখনও আপনার সম্পাদনা করা নিয়মে পৌঁছায় না, আর অনুসন্ধান রাউটিং টেবিল ও তার অগ্রাধিকারে চলে যায়। যে নিয়ম কখনও মেলে না কারণ প্যাকেট অন্যত্র বেরিয়েছে, সেটি কাউন্টার আউটপুটে ভুল বানানের ডিভাইসযুক্ত নিয়মের মতোই দেখায়। কিছু সম্পাদনার আগে নিশ্চিত করুন আপনার কাছে দুটির মধ্যে কোনটি আছে, কারণ দ্বিতীয়টির জন্য পাঠ্য পরিবর্তনের বদলে রাউটিং পরিবর্তন দরকার।

অনূদিত সোর্সটি সচেতনভাবে বেছে নিন

ডিভাইস ঠিক হলে সোর্স ঠিকানা একটি আলাদা সিদ্ধান্ত। এটি একটি দৃষ্টান্তমূলক IPv4 পুল এবং কেবল একটি উদাহরণ ঠিকানা:

iptables -t nat -A POSTROUTING -s 10.8.1.0/24 -o eth0 \
  -j SNAT --to-source 203.0.113.20

একটি ঠিকানা --to-source এর মধ্যে লেখা কাউকে এটি আপনার দিকে ফিরিয়ে রুট করতে বাধ্য করে না। আপস্ট্রিম প্রদানকারী বা ঠিকানার মালিককে সেই ঠিকানার উত্তরগুলি এই হোস্টে পৌঁছে দিতে হবে, আর ঠিকানাটি এমন হতে হবে যা ব্যবহারের অনুমতি আপনার আছে। যদি না থাকে, নিয়মটি মিলবে ও অনুবাদ করবে, আর উত্তরগুলি তবুও অন্যত্র যাবে।

সোর্স ঠিকানা বদলানো আপলিঙ্ক বদলানোর সমান নয়। যখন আসল প্রয়োজন ভিন্ন একটি ভৌত পথ, তখন রাউটিং নীতি প্রথমে সেই পথ বেছে নিতে হবে; এরপর SNAT যে ডিভাইস নীতি বেছে নিয়েছে সেখানেই সোর্স পুনর্লিখন করে। eth0 ডিভাইসে আরও লেবেল যোগ করা রুটও দেয় না, অনুমতিও দেয় না।

এইমাত্র খোলা একটি সংযোগ দিয়ে যাচাই করুন

বিদ্যমান সংযোগ পুনরায় ব্যবহার না করে নতুন একটি ক্লায়েন্ট সংযোগ খুলুন। সংযোগ ট্র্যাকিং প্রবাহ শুরুর সময় যে অনুবাদ লিপিবদ্ধ করেছিল তা ধরে রাখে, তাই পুরনো সেশন আগের সোর্স ঠিকানা ব্যবহার চালিয়ে যেতে পারে এবং সঠিক নতুন নিয়মকে বিকল দেখাতে পারে। কাউন্টার বাড়তে দেখুন, তারপর তারে বা দূর প্রান্তে অনূদিত সোর্সটি লক্ষ্য করুন।

একটি ইন্টারফেস ভাগ করা কয়েকটি পুলের জন্য প্রত্যেককে স্পষ্ট সোর্স মিল ও নিজের অনুবাদ ঠিকানা দিন, সেগুলি ফায়ারওয়ালের পরিচালিত কনফিগারেশনে রাখুন, এবং যে ক্রমে সেগুলি মূল্যায়িত হয় তা লিখে রাখুন। তারপর আপনি কী যাচাই করেছেন তা লিপিবদ্ধ করুন: ip route getথেকে পাওয়া ডিভাইস, যে কাউন্টারটি নড়েছে, এবং দূর প্রান্ত যে সোর্স দেখেছে। সেই লিপি অ্যালিয়াস বিভ্রান্তি পুনরাবৃত্তি না করেই পরবর্তী প্রতিবেদনের উত্তর দেয়।

সম্পর্কিত নিবন্ধ