This site is best viewed using the updated version of Mozilla Firefox


Understanding and Configuring Hairpin NAT in MikroTik

আমরা যারা ডাটা নেটওয়ার্কিং-এ কাজ করছি তারা সবাই NAT শব্দটি শুনেছি এবং কম-বেশি কনফিগারও করেছি। যখন আমাদের হাতে একটি মাত্র পাবলিক আই.পি থাকে তখন আমাদের ল্যান এর একাধিক কম্পিউটার থেকে ইন্টারনেট এ্যাক্সেস করার জন্য ঐ কম্পিউটারগুলোতে প্রাইভেট আই.পি ব্যবহার করে উক্ত প্রাইভেট আই.পিগুলোকে একটি পাবলিক আই.পি এর মাধ্যমে NAT করে দেওয়া হয়। মাইক্রোটিক রাউটারের এর ক্ষেত্রে একে Src-NAT (সোর্স ন্যাট) বলা হয়ে থাকে এবং এটি কনফিগার করা খুবই সহজ কাজ।

আমরা যারা ছোট কর্পোরেট কোম্পানীতে আছি এবং আমাদের একটি ওয়েব সার্ভারের জন্য আই.এস.পি এর কাছ থেকে একটি বাড়তি পাবলিক আই.পি চাইতে চাইতে ক্লান্ত ও হতাশ হয়ে গেছি, তাদের জন্য রয়েছে আরো একটি চমৎকার সমাধান। আর সেটি হলো Dst-NAT (ডেষ্টিনেশন ন্যাট)। এটি কনফিগার করাও আহামরি কিছু নয়।

আজ আমি একটু আলাদা ধরণের NAT কনসেপ্ট নিয়ে বিস্তারিত আলোচনা করবো এবং তা হলো Hairpin NAT (হেয়ারপিন হলো মেয়েদের চুলের কাঁটা)। প্রথমেই বলে রাখছি, একটি নব্য আবিষ্কৃত কোন কিছু নয়। অনেকেই হয়তোবা এর সাথে পরিচিত আছেন এবং জেনে হোক বা না জেনে হোক অল্প-বিস্তর কনফিগারও করেছেন। আমার এই টিউটোরিয়ালের মূল উদ্দেশ্য হলো, NAT তথা Dst-NAT ও Hairpin NAT কে একটু ভালভাবে বুঝা এবং NAT এর সময় প্যাকেট এ্যানক্যাপসুলেশন সম্পর্কে কিছুটা ধারণা দেওয়া। তো শুরু করা যাক.....

চিত্রে প্রদত্ত টপোলজি অনুযায়ী, আমাদের মাইক্রোটিক রাউটারের WAN আই.পি হলো 50.0.0.2/30 এবং স্বাভাবিকভাবেই এর Gateway হবে 50.0.0.1 । অন্যদিকে মাইক্রোটিক রাউটারের ল্যান আই.পি হলো 10.0.0.1/24 এবং ল্যান এর কম্পিউটারসমূহের আই.পি হবে 10.0.0.2-254 । প্রথমে ল্যান এর কম্পিউটারসমূহে ইন্টারনেট এ্যাক্সেস দেওয়ার জন্য আমাদেরকে প্রয়োজনীয় আই.পি এ্যাড্রেস, ডিফল্ট রাউট ও সোর্স ন্যাট কনফিগার করতে হবে।

/ip address 
	add address=50.0.0.2/30 interface=ether1
	add address=10.0.0.1/24 interface=ether2
	
/ip route
	add dst-address=0.0.0.0/0 gateway=50.0.0.1

/ip firewall nat
	add chain=srcnat src-address=10.0.0.0/24 action=src-nat to-addresses=50.0.0.2

উপরোক্ত কনফিগারেশনের পর আমাদের ল্যান এর কম্পিউটারসমূহ থেকে আমরা ইন্টারনেট এ্যাক্সেস করতে পারবো।

এখন ধরি, আমাদের ল্যান এ একটি ওয়েব সার্ভার রয়েছে যার আই.পি হলো 10.0.0.10 এবং ওয়েব সার্ভিস পোর্ট হলো 8080 । আমরা ল্যান এর যেকোন কম্পিউটারের ওয়েব ব্রাউজার থেকে 10.0.0.10:8080 এই URL ব্যবহার করে ওয়েব সার্ভারটি এ্যাক্সেস করতে পারি। কিন্তু এই ওয়েব সার্ভারটি আমরা ইন্টারনেটের অন্যান্য লোকেশন থেকে এ্যাক্সেস করতে পারবো না, কারণ এটি বর্তমানে একটি প্রাইভেট আই.পি তে আছে। আমরা যদি এই প্রাইভেট আই.পি এর ওয়েব সার্ভারটি ইন্টারনেটের অন্যান্য লোকেশন থেকে এ্যাক্সেস করতে চাই তাহলে আমাদেরকে Port Forwarding অর্থাৎ Dst-NAT কনফিগার করতে হবে।

/ip firewall nat
	add chain=dstnat dst-address=50.0.0.2 protocol=tcp dst-port=8080\
	action=dst-nat to-addresses=10.0.0.10 to-ports=8080

Dst-NAT কনফিগার করার পর আমরা ইন্টারনেটের যেকোন লোকেশন থেকে 50.0.0.2:8080 এই URL টি ব্যবহার করে ওয়েব সার্ভারটি এ্যাক্সেস করতে পারবো। কিন্তু এখানে একটি সমস্যা হলো যে, আমাদের ল্যান এর কম্পিউটার থেকে 50.0.0.2:8080 এই URL টি ব্যবহার করে আমরা ওয়েব সার্ভারটি এ্যাক্সেস করতে পারবো না। ল্যান এর কম্পিউটার থেকে 10.0.0.10:8080 এই URL টি ব্যবহার করেই আমাদেরকে ওয়েব সার্ভারটি এ্যাক্সেস করতে হবে। এরকমটি হওয়ার কারণ কি এবং কিভাবে এই সমস্যা সমাধান করা যায়, এবার তা নিয়ে আমরা বিস্তারিত বুঝার চেষ্টা করবো।

প্রথমেই ইন্টারনেটের কোন হোষ্ট যেমনঃ 80.0.0.2 যখন ওয়েব সার্ভারটি এ্যাক্সেস করার জন্য 50.0.0.2:8080 এই URL ব্যবহার করে রিকোয়েষ্ট পাঠায় তখন কি হয় তা বুঝার চেষ্টা করি।

ধাপ-১: ইন্টারনেটের হোষ্ট 80.0.0.2 ওয়েব সার্ভারটি এ্যাক্সেস করার জন্য 50.0.0.2 আই.পি তে রিকোয়েষ্ট প্যাকেট পাঠায়। অর্থাৎ প্যাকেটের সোর্স আই.পি 80.0.0.2 এবং ডেষ্টিনেশন আই.পি 50.0.0.2 । (ইন্টারনেট হোষ্ট ধরে নেয় রিটার্ণ প্যাকেট যখন আসবে তখন তার সোর্স আই.পি হবে 50.0.0.2 এবং ডেষ্টিনেশন আই.পি হবে 80.0.0.2 অর্থাৎ Vice-Versa ।)

ধাপ-২: রিকোয়েষ্ট প্যাকেটটি যখন মাইক্রোটিক রাউটারের কাছে আসে তখন রাউটার Dst-NAT এর রুল অনুযায়ী প্যাকেটটিকে 10.0.0.10 এর কাছে ফরোয়ার্ড করে। এক্ষেত্রে প্যাকেটটির সোর্স আই.পি হয় 80.0.0.2 এবং ডেষ্টিনেশন আই.পি হয় 10.0.0.10 । একটি কথা বিশেষভাবে উল্লেখ্য যে, Src-NAT এর সময় রাউটার প্যাকেটের সোর্স আই.পি পরিবর্তন করে এবং Dst-NAT এর সময় রাউটার প্যাকেটের ডেষ্টিনেশন আই.পি পরিবর্তন করে। এখানে তাই রাউটার প্যাকেটের ডেষ্টিনেশন আই.পি পরিবর্তন করেছে।

ধাপ-৩: এবার সার্ভারের রিপ্লাই দেওয়ার পালা। সার্ভার যে রিকোয়েষ্ট প্যাকেট পেয়েছে তার সোর্স আই.পি ছিল 80.0.0.2 এবং ডেষ্টিনেশন আই.পি ছিল 10.0.0.10 । এখন সার্ভার যখন রিপ্লাই দিবে তখন রিপ্লাই প্যাকেটটির সোর্স আই.পি হবে 10.0.0.10 এবং ডেষ্টিনেশন আই.পি হবে 80.0.0.2 অর্থাৎ Vice-Versa ।

ধাপ-৪: রিপ্লাই প্যাকেটটি যখন রাউটারের কাছে পৌছাবে তখন রাউটার তার Src-NAT এর রুল অনুযায়ী প্যাকেটটির সোর্স আই.পি পরিবর্তন করে ইন্টারনেটে পাঠিয়ে দিবে। এক্ষেত্রে প্যাকটটির সোর্স আই.পি হবে 50.0.0.2 এবং ডেষ্টিনেশন আই.পি হবে 80.0.0.2 । যখন ইন্টারনেট হোষ্ট রিপ্লাই প্যাকেট পাবে তখন সে প্যাকেটটিকে রিসিভ করবে। অর্থাৎ, একটি সফল কমিউনিকেশনের সমাপ্তি।

কিন্তু যখন আমাদের ল্যান এর কোন কম্পিউটার যেমনঃ 10.0.0.2 ওয়েব সার্ভারটি এ্যাক্সেস করার জন্য 50.0.0.2:8080 এই URL ব্যবহার করে রিকোয়েষ্ট পাঠায় তখন কি হয় তা বুঝার চেষ্টা করি।

ধাপ-১: ল্যান এর হোষ্ট 10.0.0.2 ওয়েব সার্ভারটি এ্যাক্সেস করার জন্য 50.0.0.2 আই.পি তে রিকোয়েষ্ট প্যাকেট পাঠায়। অর্থাৎ সোর্স আই.পি 10.0.0.2 এবং ডেষ্টিনেশন আই.পি 50.0.0.2 । (ল্যান এর হোষ্ট ধরে নেয় রিটার্ণ প্যাকেট যখন আসবে তখন তার সোর্স আই.পি হবে 50.0.0.2 এবং ডেষ্টিনেশন আই.পি হবে 10.0.0.2 অর্থাৎ Vice-Versa ।)

ধাপ-২: রিকোয়েষ্ট প্যাকেটটি যখন মাইক্রোটিক রাউটারের কাছে আসে তখন রাউটার Dst-NAT এর রুল অনুযায়ী প্যাকেটটিকে 10.0.0.10 এর কাছে ফরোয়ার্ড করে। এক্ষেত্রে প্যাকেটটির সোর্স আই.পি হয় 10.0.0.2 এবং ডেষ্টিনেশন আই.পি হয় 10.0.0.10 । এখানে আবারও উল্লেখ্য যে, Src-NAT এর সময় রাউটার প্যাকেটের সোর্স আই.পি পরিবর্তন করে এবং Dst-NAT এর সময় রাউটার প্যাকেটের ডেষ্টিনেশন আই.পি পরিবর্তন করে। এখানে তাই রাউটার প্যাকেটের ডেষ্টিনেশন আই.পি পরিবর্তন করেছে।

ধাপ-৩: এবার সার্ভারের রিপ্লাই দেওয়ার পালা। সার্ভার যে রিকোয়েষ্ট প্যাকেট পেয়েছে তার সোর্স আই.পি ছিল 10.0.0.2 এবং ডেষ্টিনেশন আই.পি ছিল 10.0.0.10 । সার্ভার যখন রিপ্লাই দিবে তখন রিপ্লাই প্যাকেটটির সোর্স আই.পি হবে 10.0.0.10 এবং ডেষ্টিনেশন আই.পি হবে 10.0.0.2 অর্থাৎ Vice-Versa । এখন যেহেতু প্যাকেটটির সোর্স ও ডেষ্টিনেশন উভয় আই.পি একই সাবনেটের তাই সার্ভার রিপ্লাই প্যাকেটটিকে রাউটারের কাছে না পাঠিয়ে সরাসরি ল্যান এর হোষ্ট 10.0.0.2 এর কাছে পাঠাবে (অর্থাৎ লোকাল ডেলিভারী)। সবশেষে ল্যান এর হোষ্ট যখন রিপ্লাই প্যাকেটটি পাবে (যার সোর্স আই.পি 10.0.0.10 এবং ডেষ্টিনেশন 10.0.0.2) তখন সে প্যাকেটটিকে ডিসকার্ড করবে, কারণ এটি তার প্রত্যাশিত প্যাকেট নয়, তার প্রত্যাশিত প্যাকেটের সোর্স আই.পি হতে হবে 50.0.0.2 ।

এই সমস্যা থেকে পরিত্রানের জন্য আমাদেরকে একটি অতিরিক্ত Src-NAT রুল যোগ করতে হবে। যাতে করে ধাপ-২ এ প্যাকেটের ডেষ্টিনেশন আই.পি পরিবর্তনের সাথে সাথে সোর্স আই.পিও পরিবর্তন হয় এবং ধাপ-৩ এ রিপ্লাই প্যাকেটটি যেন লোকাল ডেলিভারী না হয়ে রাউটারের কাছে ফেরত আসে।

/ip firewall nat
	add chain=srcnat src-address=10.0.0.0/24 dst-address=10.0.0.10 protocol=tcp\
	dst-port=8080 action=src-nat to-addresses=10.0.0.1 place-before=0

উপরোক্ত নতুন Src-NAT রুলে বলা হয়েছে, রাউটার যখন 10.0.0.0/24 ব্লক এর কোন হোষ্ট থেকে 50.0.0.2:8080 আই.পি এবং পোর্টের জন্য কোন রিকোয়েষ্ট প্যাকেট পাবে তখন রাউটার সেই রিকোয়েষ্ট প্যাকেটটিকে অন্য কোন দিকে ফরোয়ার্ড করার সময় সোর্স আই.পি পরিবর্তন করে 10.0.0.1 করে দিবে। এখন প্রশ্ন হলো, রাউটার এই রিকোয়েষ্ট প্যাকেটটিকে অন্য কোন দিকে বা কার কাছে ফরোয়ার্ড করবে? সেটি বলা আছে আমাদের আগের Dst-NAT রুলস এ । অর্থাৎ, এসময় প্রথমে আগের Dst-NAT রুল এক্সিকিউট হওয়ার পরপরই এই নতুন Src-NAT রুলটি এক্সিকিউট হবে। এবং এই নতুন Src-NAT রুলটিকে অবশ্যই আমাদের আগের Src-NAT রুলের উপরে রাখতে হবে, এজন্যই এখানে place-before=0 ব্যবহার করা হয়েছে।

উপরোক্ত Src-NAT রুল যোগ করার পর আমরা সমগ্র প্রসেসটি আবারও প্রথম থেকে বুঝার চেষ্টার করি।

ধাপ-১: ল্যান এর হোষ্ট 10.0.0.2 ওয়েব সার্ভারটি এ্যাক্সেস করার জন্য 50.0.0.2 আই.পি তে রিকোয়েষ্ট প্যাকেট পাঠায়। অর্থাৎ সোর্স আই.পি 10.0.0.2 এবং ডেষ্টিনেশন আই.পি 50.0.0.2 । (ল্যান এর হোষ্ট ধরে নেয় রিটার্ণ প্যাকেট যখন আসবে তখন তার সোর্স আই.পি হবে 50.0.0.2 এবং ডেষ্টিনেশন আই.পি হবে 10.0.0.2 অর্থাৎ Vice-Versa ।)

ধাপ-২: রিকোয়েষ্ট প্যাকেটটি যখন মাইক্রোটিক রাউটারের কাছে আসে তখন রাউটার Dst-NAT এর রুল অনুযায়ী প্যাকেটটিকে 10.0.0.10 এর কাছে ফরোয়ার্ড করার করার সময় নতুন Src-NAT এর রুল অনুযায়ী প্যাকেটের সোর্স আই.পিও পরিবর্তন করে। এক্ষেত্রে প্যাকেটটির সোর্স আই.পি হয় 10.0.0.1 এবং ডেষ্টিনেশন আই.পি হয় 10.0.0.10 ।

ধাপ-৩: এবার সার্ভারের রিপ্লাই দেওয়ার পালা। সার্ভার যে রিকোয়েষ্ট প্যাকেট পেয়েছে তার সোর্স আই.পি ছিল 10.0.0.1 এবং ডেষ্টিনেশন আই.পি ছিল 10.0.0.10 । এখন সার্ভার যখন রিপ্লাই দিবে তখন রিপ্লাই প্যাকেটটির সোর্স আই.পি হবে 10.0.0.10 এবং ডেষ্টিনেশন আই.পি হবে 10.0.0.1 অর্থাৎ Vice-Versa । এক্ষেত্রে রিপ্লাই প্যাকেটটি আর লোকাল ডেলিভারী হবে না।

ধাপ-৪: রিপ্লাই প্যাকেটটি যখন রাউটারের কাছে পৌছাবে তখন রাউটার তার NAT Translation Table অনুযায়ী প্যাকেটটিকে অরিজিনাল সোর্স 10.0.0.2 এর কাছে পাঠাবে। এক্ষেত্রে প্যাকটটির সোর্স আই.পি হবে 50.0.0.2 এবং ডেষ্টিনেশন আই.পি হবে 10.0.0.2 । যখন ল্যান হোষ্ট রিপ্লাই প্যাকেট পাবে তখন সে প্যাকেটটিকে রিসিভ করবে। অর্থাৎ, একটি সফল কমিউনিকেশনের সমাপ্তি।

এই NAT এর ক্ষেত্রে রিকোয়েষ্ট প্যাকেট রাউটারের যে ইন্টারফেস দিয়ে ঢুকে তা ঠিক একই ইন্টারফেস দিয়ে বের হয়, যা দেখতে অনেকটা মেয়েদের চুলের কাঁটার মতো। তাই একে Hairpin NAT বলা হয়।

উপরিউক্ত আলোচনায় আমি Dst-NAT এবং Hairpin NAT সম্পর্কে খুব সহজভাবে ব্যাখ্যা করার চেষ্টা করেছি। আশা করি আপনাদের ভাল লাগবে।


   








এই টিউটোরিয়াল সাইটের যেকোন টিউটোরিয়ালে যেকোন ধরণের ভূল-ভ্রান্তি যদি আপনাদের দৃষ্টিগোচর হয় তাহলে দয়া করে আমাকে জানাবেন, আমি ভূল সংশোধন করে নিব। এই টিউটোরিয়াল সাইটটি যেহেতু আমি একক প্রচেষ্ঠায় পরিচালনা করছি, তাই ভূল-ভ্রান্তি হতে পারে। এজন্য আপনাদের সহায়তা কামনা করছি। যেকোন কিছু নোটিশ করার জন্য আমাকে ই-মেইল করতে পারেন। আমার ই-মেইল আই.ডি হলো mail.naserbd@yahoo.com । এছাড়া আমাদের ফেসবুক গ্রুপ পেজেও পোষ্ট করতে পারেন। আমাদের ফেসবুক গ্রুপ পেজের লিংকটি হলো mn-LAB

আপনাদের সহযোগীতার জন্য সবাইকে অগ্রীম ধন্যবাদ।