ASA hairpin: ইন্টারনেট এক্সিট নাকি সাইট-টু-সাইট VPN লেগ?
ক্লায়েন্ট পুল ইন্টারনেটের দিকে বা সাইট VPN-এ যেতে পারে। NAT লেখার আগেই ঠিক করুন কোন লেগ দরকার, তারপর রুট, সিলেক্টর ও রিপ্লাই পাথ যাচাই করুন।
একই ASA-র পেছনের দুই রিমোট-অ্যাক্সেস ব্যবহারকারী একই আউটসাইড ইন্টারফেস দিয়ে ট্রাফিক পাঠাতে পারেন এবং সম্পূর্ণ ভিন্ন আচরণ পান। একজন পাবলিক ওয়েবসাইটে যাচ্ছে, তাই প্যাকেটটির সোর্স ট্রান্সলেশন ও ইন্টারনেট রুট দরকার। অন্যজন সাইট-টু-সাইট টানেলের পেছনের সার্ভারে যাচ্ছে, যে টানেলও ওই ইন্টারফেসে শেষ হয়, তাই প্যাকেটটির পরিচয়, মিলে যাওয়া টানেল সিলেক্টর এবং ক্লায়েন্ট পুলে ফেরার পাথ দরকার। একই-ইন্টারফেস অনুমতি দুই ক্ষেত্রেই পূর্বশর্ত এবং কোনোটিরই সমাধান নয়।
দুই লেগ, এক ইন্টারফেস
NAT নিয়ম লেখার আগেই ঠিক করুন কোন লেগ তৈরি করছেন, কারণ নিয়মগুলো পরস্পরের বদলি নয়। লেগ A হলো ক্লায়েন্ট থেকে ইন্টারনেট: পুল ঠিকানা ঢোকে, অনূদিত পাবলিক ঠিকানা বেরোয়, একই ইন্টারফেস দিয়ে ফিরে আসে। লেগ B হলো ক্লায়েন্ট থেকে অন্য IPsec পিয়ারের ওপারের একটি প্রাইভেট প্রিফিক্সে: পুল ঠিকানা অক্ষত থাকে, পুনরায় এনক্রিপ্ট হয় এবং এমন পিয়ারের কাছে পৌঁছায় যে পুলকে কীভাবে উত্তর দিতে হবে তা জানে।
দুটোরই প্রথমে দরকার একই-ইন্টারফেস অনুমতি। এটি ছাড়া ASA যে ইন্টারফেসে প্যাকেট এসেছে সেখান দিয়েই সেটি ফরোয়ার্ড করতে অস্বীকার করে, আর ব্যর্থতাটি পলিসি সমস্যার বদলে রাউটিং সমস্যার মতো দেখায়:
same-security-traffic permit intra-interface
এই এক লাইনই একটি ফরোয়ার্ডিং ব্যবস্থার অনুমতি দেয়, যেমন ASA NAT রেফারেন্স একই-ইন্টারফেস পাথের জন্য বর্ণনা করে। এটি কোনো ক্লায়েন্ট রুট যোগ করে না, রিসোর্স অনুমোদন করে না, ঠিকানা অনুবাদ করে না বা IPsec সিলেক্টর নিয়ে দর-কষাকষি করে না, তাই এর পরে আরও তিন বা চারটি জিনিস যোগ করার আশা রাখুন এবং এর গ্রহণযোগ্যতাকে অগ্রগতি হিসেবে পড়বেন না।
লেগ A: ক্লায়েন্ট ইন্টারনেট চায়
ইন্টারনেট এক্সিটের জন্য প্যাকেট ডিভাইস ছাড়ার আগেই পুল ঠিকানাকে প্রাইভেট থাকা বন্ধ করতে হবে। সাধারণ PAT ডিজাইনে নিয়মটি পুলকে আউটসাইড ইন্টারফেসের ঠিকানায় অনুবাদ করে, আর ফেরার স্টেট ক্লায়েন্টমুখী ফ্লো পুনরুদ্ধার করে:
object network VPN_POOL
subnet 10.80.0.0 255.255.255.0
nat (outside,outside) after-auto source dynamic VPN_POOL interface route-lookup
তারপর নিশ্চিত করুন ক্লায়েন্ট সত্যিই ASA-কে ওই ট্রাফিক বহন করতে বলেছে। স্প্লিট-টানেল বাদ দেওয়া পাবলিক গন্তব্যটিকে ফোনের নিজের সংযোগ দিয়ে পাঠায়, যা ASA-তে পৌঁছায়ই না, আর কখনো না পাঠানো প্যাকেট কোনো NAT নিয়ম ঠিক করতে পারে না। গ্রুপ পলিসির স্প্লিট-টানেল তালিকা আপনার পরীক্ষার গন্তব্যের সঙ্গে মিলিয়ে দেখুন।
লেগের বাকিটা সাধারণ: আউটসাইড ইন্টারফেস থেকে ব্যবহারযোগ্য ডিফল্ট বা নির্দিষ্ট রুট, ফ্লো অনুমোদনকারী অ্যাক্সেস পলিসি, এবং আপনি যে রিজলভার পলিসি বেছেছেন অনুযায়ী DNS পরিচালনা। এখানে route-lookup নিচের মতো একই কারণে যোগ করুন, যেহেতু প্রবেশ ও প্রস্থান ইন্টারফেস অভিন্ন।
লেগ B: ক্লায়েন্ট একটি প্রাইভেট সাইট চায়
এই লেগ বেশি জায়গায় ব্যর্থ হয়, তাই ক্রম অনুসারে লিখুন। প্রথমে ক্লায়েন্ট রুট: গন্তব্য প্রিফিক্স স্প্লিট-টানেল তালিকায় থাকতে হবে, নইলে ক্লায়েন্ট এটি টানেলে বসাবে না। দ্বিতীয়ত টানেল সিলেক্টর: সাইট-টু-সাইট ক্রিপ্টো ACL-কে পুল ঠিকানা থেকে রিমোট প্রিফিক্স পর্যন্ত কভার করতে হবে, শুধু লোকাল LAN থেকে রিমোট প্রিফিক্স নয়। তৃতীয়ত পরিচয়, যাতে পুল ঠিকানা পথে ইন্টারনেট PAT-তে অনূদিত না হয়।
nat (outside,outside) source static VPN_POOL VPN_POOL
destination static SITE_PREFIX SITE_PREFIX route-lookup
দূরের দিকটাই মানুষ পরীক্ষা করতে ভোলে। পিয়ারের পুলে ফেরার রুট এবং তা অন্তর্ভুক্ত করা একটি সিলেক্টর দরকার, আর এর নিজের পলিসিকে যে সোর্স ঠিকানাগুলো সে দেখবে সেগুলোর অনুমতি দিতে হবে. সাইটটি যদি বদলে অনূদিত দৃশ্য দিয়ে ব্যবহার করা হয়, তবে তা বৈধ ডিজাইন, কিন্তু তখন দুই পিয়ার, দুই সিলেক্টর ও দুই রুট টেবিলকেই অনূদিত ঠিকানাগুলো নিয়ে একমত হতে হবে।
নিয়মের ক্রমও দেখুন। পরিচয় নিয়মের উপরে থাকা বিস্তৃত PAT নিয়ম প্রাইভেট বিনিময়টিকে অনুবাদ করে ফেলবে পরিচয় নিয়ম মূল্যায়িত হওয়ার আগেই, আর লক্ষণ হবে NAT ত্রুটি নয় বরং মিলে যাওয়া SA ছাড়া একটি সাইট টানেল।
যে পরীক্ষা আপনাকে বলে আপনি কোন লেগ তৈরি করেছেন
কনফিগারেশন পড়ে আশা করার বদলে ASA-র নিজের পাথ মূল্যায়ন ব্যবহার করুন। packet-tracer input outside tcp 10.80.0.25 40000 203.0.113.10 443 detailed একটি ফ্লোর জন্য NAT সিদ্ধান্ত, রুট ও ACL ফলাফল দেখায়; প্রাইভেট গন্তব্য দিয়ে তা পুনরাবৃত্তি করুন। যদি NAT পর্যায় প্রাইভেট-থেকে-প্রাইভেট ফ্লো পুনর্লিখন করে, তবে আপনি এমন প্যাকেটের জন্য লেগ A তৈরি করেছেন যার লেগ B দরকার ছিল।
আরও দুটি কমান্ড ফাঁকটি বন্ধ করে। show nat detail packet-tracer যে নিয়মের ক্রম অনুসরণ করেছে তা প্রিন্ট করে, এবং show crypto ipsec sa আপনি যে জোড়া আশা করছেন তার জন্য সিলেক্টর আছে কিনা দেখায়। অনুপস্থিত SA হলো সিলেক্টর বা পিয়ার কনফিগারেশনের বিষয়, NAT নিয়ম যা সারাতে পারে এমন কিছু নয়।
প্রতিটি লেগ তার পরিবেশন করা ট্রাফিক দিয়ে যাচাই করুন
লেগ A গ্রহণ করুন ক্লায়েন্টের সাধারণ পাবলিক অনুরোধ দিয়ে, আর লেগ B গ্রহণ করুন সত্যিই বিদ্যমান একটি প্রাইভেট রিসোর্সে অনুরোধ দিয়ে। তারপর প্রতিটি অস্বীকৃত রিসোর্স দিয়ে পুনরাবৃত্তি করুন, কারণ “অনুমোদিত” আর “অ্যাক্সেস পলিসি দ্বারা অনুমোদিত” একই প্রমাণ নয়, আর হাব থেকে উৎপন্ন ping ক্লায়েন্ট পাথগুলোর কোনোটিই পরীক্ষা করে না।
টিকিটে দুটি পরীক্ষার রেকর্ড আলাদা রাখুন: সোর্স ঠিকানা, গন্তব্য, মিলে যাওয়া NAT নিয়ম এবং ফলাফল। পরের প্রতিবেদনে যখন বলা হয় “VPN ভেঙে গেছে”, ওই জোড়া এক মিনিটের মধ্যেই আপনাকে বলে দেয় কোন লেগ পিছিয়েছে, আর উত্তর সাধারণত একটি রুট বা সিলেক্টর, সবাই যেটিকে আগে সন্দেহ করে সেই একই-ইন্টারফেস লাইন নয়।