দুটি VPN ক্লায়েন্ট, দুটি পাবলিক ঠিকানা: SNAT মিলিয়ে নিন
সোর্সভিত্তিক SNAT একটি পাবলিক ঠিকানা বেছে নিতে পারে, কিন্তু কেবল ততক্ষণই যখন গেটওয়ে এখনও ক্লায়েন্টদের আলাদা করতে পারে। নিয়ম লেখার আগে টিকে থাকা সোর্সটি যাচাই করুন।
দুটি VPN ক্লায়েন্ট দুটি ভিন্ন পাবলিক IPv4 ঠিকানা দিয়ে বের হতে পারে, আর যে নিয়মটি তা করে সেটি বেশিরভাগ মানুষের প্রত্যাশার চেয়ে ছোট। এটি কাজ করে iptables-এর সিনট্যাক্সের কারণে নয়, বরং প্যাকেটটি যখন এগ্রেস চেইনে পৌঁছায় তখন তার অবস্থার কারণে: সেখানকার সোর্স ঠিকানাটিকে এখনও ক্লায়েন্টদের আলাদা করতে হবে। যদি আগের কোনো masquerade ইতিমধ্যে দুটিকেই একটি ঠিকানায় মিলিয়ে দিয়ে থাকে, তবে কোনো ক্লায়েন্ট-ভিত্তিক নিয়ম সেই পার্থক্য ফিরিয়ে আনতে পারে না। আগে এই প্রশ্নটি নিষ্পত্তি করুন, তারপর অনুবাদ লিখুন।
কোন পরিচয় গেটওয়ে পর্যন্ত টিকে থাকে
নিয়মটি প্যাকেটের সোর্স ঠিকানার সঙ্গে মেলে, VPN ব্যবহারকারীর নামের সঙ্গে নয় এবং ক্লায়েন্ট অ্যাপ্লিকেশন যে নাম দেখায় তার সঙ্গেও নয়। পথে আগে প্যাকেটটির যা কিছু রূপান্তর করে, তা-ই নির্ধারণ করে আপনার নিয়মটি এখনও কী দেখতে পাবে। nat টেবিলটি ক্রমানুসারে চালান এবং সেই বিন্দুটি খুঁজুন যেখানে সোর্স এখনও প্রতিটি ক্লায়েন্টের জন্য আলাদা।
iptables -t nat -S POSTROUTING
সেই তালিকাটি উপর থেকে পড়ুন। উপরের দিকে থাকা masquerade নিয়মটি প্রতিটি মিলে যাওয়া ফ্লো-এর জন্য সোর্স পুনর্লিখন করে, আর তার পরে বসানো ক্লায়েন্ট-ভিত্তিক এন্ট্রিগুলি এমন ঠিকানার সঙ্গে মেলে যা আর নেই। যখন দুটি LAN ডিভাইস একটি টানেল ভাগ করে এবং একটিমাত্র অভ্যন্তরীণ ঠিকানা হিসেবে পৌঁছায়, তখন ফায়ারওয়ালের আগে নকশাটিকেই বদলাতে হবে: তাদের সোর্স রেঞ্জ আলাদা রাখুন বা প্রত্যেককে নিজস্ব অভ্যন্তরীণ ঠিকানা দিন।
অভ্যন্তরীণ ঠিকানা বরাদ্দটিকে প্রমাণিত ক্লায়েন্টের সঙ্গে বেঁধে দিন। সেই ঠিকানা অন্য ডিভাইসকে দিলে তার সঙ্গে এগ্রেস নীতিও হস্তান্তরিত হয়, আর সোর্স রূপান্তর নিজে থেকে কোনো পরিচয়ের প্রমাণ নয়।
রূপান্তর ঠিকানা বানিয়ে তৈরি করতে পারে না
প্রতিটি পাবলিক ঠিকানা এই এগ্রেস পয়েন্টে বরাদ্দ বা রুট করতে হবে, আর উত্তরগুলিকে তার কাছে ফিরে আসার পথ খুঁজতে হবে। যে নিয়ম কোনো ঠিকানা থেকে ট্রাফিক পাঠায় যেখানে কেউ ফিরতি রুট দেয় না, সেটি দূর প্রান্তে বাতিল হয় বা এমন হোস্টকে উত্তর দেওয়া হয় যে কখনও তা চায়নি। ক্লাউড প্রদানকারীর একটি ইনস্ট্যান্স সাধারণত প্যাকেট বের হওয়ার আগেই তার পাবলিক ঠিকানাকে একটি প্রাইভেট ইন্টারফেস ঠিকানায় রূপান্তর করে, তাই SNAT সোর্সকে প্রদানকারী যে ঠিকানা গ্রহণ করবে সেটিই হতে হবে, কনসোল যে মান দেখায় তা নয়। প্রদানকারীর ঠিকানা মডেল পড়ুন এবং প্রতিটি প্যাকেটে পাবলিক মান কপি না করে তা অনুসরণ করুন।
ব্যবহারে এর অর্থ হল ফায়ারওয়াল স্পর্শ করার আগে প্রদানকারীর কনসোলে রাউট করা প্রিফিক্স যাচাই করা, এবং ম্যাপিং এক-এক হলে প্রাইভেট ইন্টারফেস ঠিকানাকে রূপান্তরের সোর্স হিসেবে ব্যবহার করা। নিচের উদাহরণগুলিতে ব্যবহৃত ঠিকানাগুলি ডকুমেন্টেশন রেঞ্জ থেকে নেওয়া, তাই প্রথমে যা বদলাতে হবে তা হল ঠিকানার লেখাটি নিজেই।
সাধারণ masquerade-এর আগে সন্নিবেশ করুন
কিছু যোগ করার আগে এগ্রেস ইন্টারফেস ও বর্তমান চেইন নিশ্চিত করুন। প্রথমটি নির্ধারণ করে নিয়মটি কোন প্যাকেটের সঙ্গে মেলাতে পারবে, আর দ্বিতীয়টি দেখায় এর সামনে ইতিমধ্যে কী দাঁড়িয়ে আছে।
ip -4 route show default
iptables -t nat -L POSTROUTING -n -v --line-numbers
প্রথম কমান্ডটি জানায় ইন্টারনেটগামী প্যাকেটটি আসলে কোন ইন্টারফেস দিয়ে বের হয়। দ্বিতীয়টি লাইন নম্বরসহ চেইনটি ছাপে। সাধারণ masquerade এন্ট্রিটি হল সেই লাইন যার উপরে থাকতে হবে।
iptables -t nat -I POSTROUTING 1 -s 10.88.4.20/32 -o ens3 -j SNAT --to-source 198.51.100.77
iptables -t nat -I POSTROUTING 1 -s 10.88.4.21/32 -o ens3 -j SNAT --to-source 198.51.100.78
উপরের দুটি নিয়ম প্রত্যেকে একটি অভ্যন্তরীণ ঠিকানার সঙ্গে মেলে, মিলটিকে এগ্রেস ইন্টারফেসে সীমাবদ্ধ করে এবং সোর্স স্পষ্টভাবে নির্ধারণ করে। যোগ করার বদলে সন্নিবেশ করুন: অবস্থান 1-এ এগুলি masquerade লাইনের আগে মূল্যায়িত হয়। দুটির মধ্যে ক্রম গুরুত্বপূর্ণ নয়, কারণ তাদের সোর্স আলাদা। রুট কমান্ড যা জানিয়েছে তা দিয়ে ens3 প্রতিস্থাপন করুন এবং অন্য ফায়ারওয়াল ম্যানেজারদের একই হুক থেকে দূরে রাখুন, কারণ দুটি টুল একটি টেবিলে লেখা একটি সঠিক নিয়মের প্রভাব না থাকার সাধারণ কারণ।
নতুন ফ্লো দিয়ে সোর্স প্রমাণ করুন
স্টেটফুল NAT ফ্লো শুরু হলে একটি রূপান্তর বেঁধে দেয় এবং পরের প্যাকেটগুলির জন্য তা পুনরায় ব্যবহার করে, তাই পরিবর্তনের আগে খোলা একটি সেশন পরিবর্তনের পরেও তার পুরনো সোর্স ধরে রাখে। কেবল নতুনভাবে শুরু করা সংযোগই নিয়মটি প্রমাণ করে।
conntrack -L -s 10.88.4.20 -p tcp --dport 443
সেই এন্ট্রির উত্তর দিকটি পড়ুন: এর গন্তব্য হল সেই ঠিকানা যা দূর প্রান্ত সোর্স হিসেবে দেখে। এটি আপনার অভীষ্ট পাবলিক ঠিকানার সঙ্গে তুলনা করুন, এবং পুরনো ঠিকানা বহনকারী এন্ট্রিকে ভাঙা নিয়ম নয় বরং খুব তাড়াতাড়ি শুরু হওয়া ফ্লোর প্রমাণ হিসেবে ধরুন। ক্লায়েন্টকে একটি নতুন সংযোগ খুলতে বলুন, তারপর কোয়েরিটি পুনরাবৃত্তি করুন। পরীক্ষা করতে গোটা ট্র্যাকিং টেবিল ফ্লাশ করা গেটওয়ের প্রতিটি অন্য সেশন বাধাগ্রস্ত করে।
রূপান্তর এখনও রুট বেছে নেয় না, ফিল্টার দিয়ে ফ্লো প্রবেশ করায় না বা ইনবাউন্ড পরিষেবা প্রকাশ করে না। ভুল রুট এবং অনুপস্থিত অনুমোদন নিয়ম নিখুঁত SNAT নিয়মের পরেও ব্যর্থ হতে থাকে। IPv6 এবং যেকোনো গৌণ এগ্রেস পথও যাচাই করুন, তারপর ফায়ারওয়ালের ডকুমেন্টেশনে অভ্যন্তরীণ-থেকে-পাবলিক জোড়াগুলি নোট করুন যাতে পরবর্তী পরিবর্তন নিয়মের লেখা নয় বরং ম্যাপিং থেকে শুরু হয়।