আপাতদৃষ্টিতে সুস্পষ্টভাবে iptables -t nat -A PREROUTING -d 192.168.12.87 -p tcp --dport 80 -j DNAT --to-destination 192.168.12.77
কাজ না করার কারণটি হল কীভাবে রিটার্ন প্যাকেটগুলি রুট করা হবে।
আপনি এমন নিয়ম স্থির করতে পারেন যা 192.168.12.87 এ প্যাকেটগুলি কেবল 192.168.12.77 এ প্রেরণ করতে পারে তবে 192.168.12.77 এর পরে ক্লায়েন্টকে সরাসরি জবাব পাঠানো হবে। এই উত্তরগুলি হোস্টের মধ্য দিয়ে যাবে না যেখানে আপনার iptables নিয়মটি NAT করছে, সুতরাং একদিকে প্যাকেটগুলি অনুবাদ করা হয়েছে, তবে অন্য দিকের প্যাকেটগুলি নেই।
এই সমস্যাটি সমাধান করার জন্য তিনটি পন্থা রয়েছে।
- প্রথম হোস্টে কেবল ডিএনএটি করবেন না, তবে এসএনএটিও করুন যে রিটার্ন ট্র্যাফিক প্রথম হোস্টের মাধ্যমে ফেরত পাঠানো হবে। নিয়মটি এরকম দেখতে পারে
iptables -t NAT -A POSTROUTING -d 192.168.12.77 -p tcp --dport 80 -j SNAT --to-source 192.168.12.87
- ডিএসআর লোড ব্যালেন্সিং থেকে অনুপ্রেরণা গ্রহণ করুন এবং আইপি স্তরের পরিবর্তে ইথারনেট স্তরে প্যাকেটগুলি ডিএনএটি করুন। 192.168.12.77 এর ম্যাকের সাথে প্যাকেটের গন্তব্য MAC প্রতিস্থাপন করে এবং আইপি স্তরটি স্পর্শ না করে ইথারনেটে প্রেরণ করে, 192.168.12.77 এর সাথে ডামি ইন্টারফেসে 192.168.12.87 কনফিগার করা থাকতে পারে এবং এভাবে টিসিপি সংযোগটি বন্ধ করতে সক্ষম হতে পারে ক্লায়েন্টের সাথে পরিচিত সার্ভার আইপি সহ।
- প্রথম হোস্টে নিষ্পাপ (তবে কাজ করছে না) সমাধানটি ব্যবহার করুন। তারপরে রিটার্ন ট্র্যাফিকে একটি এসএনএটি করে দ্বিতীয় হোস্টের রিটার্ন প্যাকেটগুলি হ্যান্ডেল করুন। একটি নিয়ম মত দেখতে পারে
iptables -t nat -A OUTPUT -p tcp --sport 80 -j SNAT --to-source 192.168.12.87
এই তিনটি সমাধানের প্রতিটিটিরই ত্রুটি রয়েছে, সুতরাং আপনার যদি সত্যই এই নির্দিষ্ট ফরওয়ার্ডিং করতে হয় তবে আপনার সাবধানতার সাথে বিবেচনা করা উচিত।
- এসএনএটি ব্যবহার করে ক্লায়েন্টের আইপি হারাবে, তাই হোস্ট নম্বর 2 টি ভাবেন যে সমস্ত সংযোগ 192.168.12.87 থেকে এসেছে। অতিরিক্তভাবে আপনি সমস্ত উত্তর প্যাকেটের জন্য হোস্ট নম্বর 1 এর মাধ্যমে ব্যান্ডউইদথ ব্যবহার করবেন, যা অন্যান্য পদ্ধতির সাথে আরও সরাসরি রুট নেবে।
- ডিএসআর অ্যাপ্রোচ দুটি নোডের মধ্যে অন্য সমস্ত যোগাযোগকে ভেঙে দেবে। ডিএসআর অ্যাপ্রোচটি কেবল তখনই উপযুক্ত যখন সার্ভারের ঠিকানা কোনও হোস্টের প্রাথমিক আইপি না থাকে। প্রতিটি হোস্টের একটি প্রাথমিক আইপি থাকা দরকার যা ডিএসআর আইপি নয়।
- এক দিক থেকে অনুবাদ করার জন্য এক হোস্টের সাথে সংযোগ ট্র্যাকিং এবং অন্য হোস্টের সাথে অন্য দিক থেকে অনুবাদ করার জন্য সংযোগ ট্র্যাকিং ব্যবহার করা সহজ কুরুচিপূর্ণ এবং এটি বিভিন্নভাবে ভেঙে যেতে পারে। উদাহরণস্বরূপ, যদি কোনও হোস্টে পোর্ট সংখ্যাগুলি NAT দ্বারা সংশোধিত হয় তবে সেগুলি পুনর্গঠনের কোনও উপায় নেই। এটি কোনও প্রদত্তও নয়, সংযোগ ট্র্যাকিংটি সঠিকভাবে কাজ করবে, যদি এটি প্রথম প্যাকেটটি দেখে তবে এটি এসিএন-এর পরিবর্তে এসওয়াইএন-এসিকে।
তিনটি পদ্ধতির মধ্যে আমি মনে করি প্রথমটি একটি, যা সম্ভবত সবচেয়ে বেশি কাজ করবে। সুতরাং আপনার যদি ক্লায়েন্টের আইপি অ্যাড্রেসগুলি জানার দরকার না থাকে তবে আমি এটিই সুপারিশ করব।
আপনি NAT সম্পর্কে পুরোপুরি ভুলে যাওয়া এবং ম্যাক বা আইপি স্তরটিতে সমস্যাটি সমাধান করার চেষ্টা না করে বেছে নিতে পারেন। আপনি এইচটিটিপি স্তর পর্যন্ত সমস্ত পথে যেতে পারেন এবং সেখানে সমাধানের সন্ধান করতে পারেন। সেক্ষেত্রে যে সমাধানটি পাবেন তা হ'ল একটি এইচটিটিপি প্রক্সি। আপনি যদি 192.168.12.87 এ কোনও HTTP প্রক্সি ইনস্টল করেন এবং এটিকে যথাযথভাবে কনফিগার করেন তবে আপনি এটি অনুরোধগুলি 192.168.12.77 এ পাঠাতে এবং উত্তরগুলি আবার ফরোয়ার্ড করতে পারেন। অতিরিক্তভাবে এটি মূল ক্লায়েন্ট আইপি সংরক্ষণ করে একটি এক্স-ফরওয়ার্ড-ফর শিরোনাম সন্নিবেশ করতে পারে। 192.168.12.77 এ সার্ভারটি তারপর 192.168.12.87 থেকে এক্স-ফরওয়ার্ড-ফর শিরোনামকে বিশ্বাস করার জন্য কনফিগার করা দরকার।