কেন Azure পয়েন্ট-টু-সাইট VPN আপনার পাবলিক IP পরিবর্তন করে না
একটি পয়েন্ট-টু-সাইট টানেল কেবল ভার্চুয়াল নেটওয়ার্কের রুট বহন করে, তাই জোরপূর্বক টানেলিং ও ফায়ারওয়াল SNAT ইগ্রেসকে Azure-এ সরানোর আগে আপনার পাবলিক IP স্থানীয়ই থাকে।
আমি একটি Windows ল্যাপটপে Azure VPN ক্লায়েন্ট সংযুক্ত করি, একটি ঠিকানা-প্রতিধ্বনি পাতা খুলি এবং দেখি আমার হোম রাউটার যে পাবলিক ঠিকানা দিয়েছিল সেটিই। এদিকে 10.20.0.4-এ থাকা জাম্প বক্স সাড়া দেয় এবং একটি প্রাইভেট এন্ডপয়েন্ট নাম রিজলভ হয়, তাই টানেল ভাঙেনি। একটি পয়েন্ট-টু-সাইট গেটওয়ে ঠিক তার ডিফল্ট কনফিগারেশন যা বলে তাই করছে: প্রাইভেট প্রিফিক্সগুলো বহন করছে এবং বাকি সব স্থানীয় লিংকে রেখে দিচ্ছে। Azure-মালিকানাধীন ইগ্রেস ঠিকানা পাওয়া রাউটিং ডিজাইনের পরিবর্তন, কোনো মেরামত নয়।
গেটওয়ে ডিফল্টভাবে কী ঘোষণা করে
গেটওয়ে ভার্চুয়াল নেটওয়ার্কের ঠিকানা স্পেসের জন্য রুট পুশ করে, সঙ্গে পিয়ার্ড নেটওয়ার্ক যেখানে গেটওয়ে ট্রানজিট অনুমোদিত এবং সাইট-টু-সাইট সংযোগ বা BGP-তে শেখা অন-প্রিমাইজ প্রিফিক্স। সেই সেটে কোনো 0.0.0.0/0 নেই। আপনার অপারেটিং সিস্টেম তার ডিফল্ট রুট Wi-Fi বা Ethernet-এ রাখে, তাই পাবলিক API-এর দিকে যাওয়া প্যাকেট প্রথমেই টানেলে ঢোকে না।
ক্লায়েন্ট টানেলের ভেতরে যে ঠিকানা পায় তা পয়েন্ট-টু-সাইট পুল থেকে একটি প্রাইভেট লিজ। এটি VNet-এর রিসোর্সগুলোর কাছে ক্লায়েন্টকে চিহ্নিত করে; এটি ইন্টারনেটের দেখা কোনো ঠিকানা নয়, এবং কোনো SaaS API-তে আউটবাউন্ড অনুরোধের উৎস হিসেবেও কখনো দেখা যাবে না। সেই লিজকে ঘিরে গড়া অ্যালাউলিস্ট এন্ট্রি কাজ করতে পারে না, ভেন্ডর লগে এটি দেখা দেওয়ার জন্য যতক্ষণই অপেক্ষা করুন।
স্প্লিট টানেল ও ফোর্সড টানেলিং পাশাপাশি
| Split tunnel, the default | Forced tunneling | |
|---|---|---|
| Internet traffic exits through | local ISP or office router | firewall or appliance inside Azure |
| Source address the API sees | your home or office IP | the firewall public IP |
| Inspection and logging in Azure | none | policy rules plus flow logs |
| Ongoing cost | gateway only | gateway, firewall hours, data processing |
| What usually breaks | nothing on the egress path | DNS, on-premises routes, overlapping local ranges |
কেবল দ্বিতীয় সারিটি দূরবর্তী সেবার দেখা ঠিকানা বদলায়। সেই টেবিলের বাকি সবকিছুই খরচ ও পরিচালনার পৃষ্ঠ, যা আপনি মেনে নেন যখন ইগ্রেস Azure-এর ভেতরে পরিদর্শন বা অনুবাদ করতে হয়। কেউ যদি আপনাকে পাবলিক IP বদলাতে বলে, সে পুরো ডান কলামটাই চাইছে, ক্লায়েন্টে সামান্য টোকা নয়।
কিছু পুনর্নির্মাণের আগে নাম দেওয়ার যোগ্য একটি মধ্যবর্তী বিকল্প আছে। VNet-এর ভেতরে একটি প্রক্সি বা গেটওয়ে VM আপনাকে নিয়ন্ত্রিত উৎস ঠিকানা দেয় সেই অ্যাপ্লিকেশনগুলোর জন্য যাদের তার দিকে ঘোরানো যায়, ক্লায়েন্টের ডিফল্ট রুট না সরিয়েই। এতে সাধারণ ব্রাউজিং স্থানীয় থাকে এবং এমন পার্টনারকেও সন্তুষ্ট করে যার Azure থেকে কেবল একটি API কল আসা দরকার। এটি ব্যর্থ হয় যখন চাহিদাটি সত্যিই সব ট্রাফিক নিয়ে, কারণ প্রক্সি সেটিং উপেক্ষা করা যেকোনো কিছু তখনও স্থানীয়ভাবেই বেরিয়ে যায়।
টানেলকে ডিফল্ট রুট বহন করান
একটি ভার্চুয়াল নেটওয়ার্ক গেটওয়েতে ক্লায়েন্টের সব ইন্টারনেট ট্রাফিক টানেলে চালানোর সমর্থিত উপায় হলো পয়েন্ট-টু-সাইট কনফিগারেশনে কাস্টম রুট যোগ করা। দুই অর্ধাংশ পুরো IPv4 স্পেস ঢাকে, এবং প্রতিটিই স্থানীয় ডিফল্ট রুটের চেয়ে বেশি নির্দিষ্ট, তাই ক্লায়েন্ট কিছু না মুছেই সেগুলোকে প্রাধান্য দেয়:
Set-AzVirtualNetworkGateway -VirtualNetworkGateway GWOBJ -CustomRoute 0.0.0.0/1,128.0.0.0/1
এই লাইনটি কপি-পেস্টের জন্য সম্পূর্ণ নয়, কেবল উদাহরণ: আগে Get-AzVirtualNetworkGateway দিয়ে গেটওয়ে অবজেক্টটি আনুন এবং GWOBJ-এর জায়গায় বসান, আর চালানোর আগে নিশ্চিত করুন SKU ও ডিপ্লয়মেন্ট মডেল কাস্টম রুট গ্রহণ করে। একই প্রিফিক্সগুলো পোর্টালে পয়েন্ট-টু-সাইট কনফিগারেশন পাতায় দেখা যায়, এবং আপনি যদি ইতিমধ্যে গেটওয়েকে স্ক্রিপ্ট না করেন তবে সেগুলো সেট করার নিরাপদ জায়গা ওটাই।
ওই প্রিফিক্সগুলো বদলালে ক্লায়েন্ট প্যাকেজ অকার্যকর হয়ে যায়। VPN ক্লায়েন্ট প্যাকেজ আবার ডাউনলোড করে পুনরায় ইনস্টল করুন, কারণ রুটগুলো প্রোফাইলের ভেতরেই চলে। পুরোনো প্রোফাইল নিয়ে আবার সংযুক্ত হওয়া ক্লায়েন্ট পুরোনো রুট সেটই ধরে রাখে, আর যে পরিবর্তন তার কাছে পৌঁছায়নি তা ডিবাগ করতে আপনি একটি ঘণ্টা হারাতে পারেন।
সুরক্ষিত ভার্চুয়াল WAN হাবে সমতুল্য হলো পয়েন্ট-টু-সাইট গেটওয়ের সঙ্গে যুক্ত হাব রুট টেবিলে একটি ডিফল্ট রুট, আর ট্রাফিক নেয় হাবের ভেতরের Azure Firewall। ফায়ারওয়াল ইন্টারনেটগামী সংযোগগুলোকে নিজের পাবলিক IP ঠিকানায় অনুবাদ করে, এবং সেই অনুবাদ থেকেই নতুন ইগ্রেস ঠিকানা আসে। যখন একটি ফায়ারওয়ালের একাধিক পাবলিক IP থাকে, সেগুলোর যেকোনোটি উৎস হিসেবে দেখা দিতে পারে, তাই অ্যালাউলিস্টে সবগুলোই থাকতে হবে।
উপরের দুই ডিজাইনই IPv4। দুটি /1 প্রিফিক্স IPv6-এর জন্য কিছুই করে না, আর পয়েন্ট-টু-সাইট IPv6 সমর্থন এতই সংকীর্ণ যে সমতা প্রতিশ্রুতি দেওয়ার আগে সংমিশ্রণটি পরীক্ষা করা উচিত।
আগে রুট দেখুন, তারপর এক্সিট
প্যাকেজ পুনরায় ইনস্টল ও পুনঃসংযোগের পর নিশ্চিত করুন ক্লায়েন্ট সত্যিই অর্ধাংশ দুটি ইনস্টল করেছে। Windows-এ Get-NetRoute -DestinationPrefix 0.0.0.0/1 এবং 128.0.0.0/1-এর জন্য একই কোয়েরি টানেল ইন্টারফেসের নাম দেখানো উচিত, আর route print আপনার মূল ডিফল্টের পাশে দুটোই দেখায়। Linux-এ ip route show-কে দুটি প্রিফিক্স তালিকাভুক্ত করতে হবে; না করলে প্রোফাইল সেগুলো কখনোই বহন করেনি।
তারপর ক্লায়েন্ট থেকে পাবলিক ঠিকানা আবার দেখুন এবং একই সংযোগের জন্য ফায়ারওয়াল লগ পড়ুন। উৎস হওয়া উচিত অনূদিত পোর্টসহ ফায়ারওয়ালের পাবলিক IP। দুটি রুট থাকা সত্ত্বেও যে ক্লায়েন্ট স্থানীয়ভাবেই বেরোয় তার মানে প্যাকেটগুলো Azure-এ পৌঁছেছে কিন্তু অন্য পথে বেরিয়েছে: গেটওয়ে সাবনেটে ব্যবহারকারী-নির্ধারিত রুট, এমন ফায়ারওয়াল যা নিজেই অন-প্রিমাইজে জোরপূর্বক টানেল করা, বা এমন পলিসি যা অনুবাদের আগেই ফ্লো ফেলে দেয়।
একই সেশনে একটি প্রাইভেট গন্তব্য আবার পরীক্ষা করুন। পরিবর্তনের পর যে জাম্প হোস্ট সাড়া দেওয়া বন্ধ করে সেটিই সাধারণ সংকেত যে নতুন প্রিফিক্সগুলো কিছু সরিয়ে দিয়েছে: হয় আগে ঘোষিত আরও সংকীর্ণ অন-প্রিমাইজ রুট, নয়তো নাম রিজল্যুশন যা এখন আপনার প্রাইভেট জোনের জন্য ফরওয়ার্ডারহীন রিজলভারে যায়।
কখন স্প্লিট টানেলকে অক্ষত রাখবেন
লক্ষ্য যদি কেবল একটি প্রাইভেট API, প্রাইভেট এন্ডপয়েন্ট বা অভ্যন্তরীণ অ্যাডমিন পাতায় পৌঁছানো হয়, তবে ডিফল্ট আচরণ কম খরচের ও কম শব্দের। ফোর্সড টানেলিং ফায়ারওয়াল ঘণ্টা ও ডেটা-প্রসেসিং খরচ, দীর্ঘতর পথ এবং প্রতিটি ক্লায়েন্ট ফ্লো ব্যর্থ হতে পারে এমন আরও একটি জায়গা যোগ করে। এটি আপনার যত্নের একক গন্তব্যের চেয়ে অনেক বেশি ট্রাফিকও ধরে।
এটির দিকে হাত বাড়ান যখন চাহিদাটি ইগ্রেসের পরিভাষায় বলা হয়: একটি পার্টনারকে নির্দিষ্ট Azure ঠিকানা দেখতে হবে, নিরাপত্তা সংযোগগুলো লগ ও পরিদর্শন করতে চায়, বা ডেটা একটি নিয়ন্ত্রিত বিন্দু দিয়ে বেরোতে হবে। তখনও ডিজাইন প্রত্যেক ব্যবহারকারীকে একটি ভাগ করা এক্সিট দেয়, তাই ব্যবহারকারীপ্রতি জবাবদিহি উৎস ঠিকানা থেকে নয়, অ্যাপ্লিকেশনের পরিচয় থেকে আসতে হবে।
পরিবর্তন বন্ধ করার আগে চারটি বিষয় নিশ্চিত করুন: ইনস্টল করা ক্লায়েন্ট প্যাকেজটি নতুন, দুটি /1 রুট টানেল ইন্টারফেসে আছে, একটি প্রাইভেট গন্তব্য এখনও সাড়া দেয়, এবং দূরবর্তী সেবার লগ ফায়ারওয়াল ঠিকানা দেখায়।