Azure-এ তিনটি আলাদা বস্তুকে গেটওয়ে ঠিকানা বলা হয়। প্রাইভেট ঠিকানা GatewaySubnet থেকে বরাদ্দ হয়। পাবলিক ঠিকানা আলাদা একটি পাবলিক IP রিসোর্স, যার দিকে গেটওয়ের IP কনফিগারেশন ইঙ্গিত করে। সাবস্ক্রিপশন ও ক্লাউড পরিবেশ হলো সেই কনটেক্সট, যা দিয়ে আপনার শেল যেকোনোটি খুঁজে পায়। একটি বদলালে অন্য দুটি নিজের জায়গায় থাকে, তাই ঠিকানা নিয়ে কাজ প্রায়ই অর্ধপথে থেমে যায়।

আমি এই পরিবর্তনগুলো চার ধাপে করি: বস্তুগুলোর ইনভেন্টরি, পাবলিক IP পুরোনো গেটওয়েতেই যাবে না গেটওয়ে নতুন করে তৈরি হবে তা ঠিক করা, পুরোনো ঠিকানা হাতে থাকতেই পরিবর্তন প্রয়োগ,তারপর কিছু মুছে ফেলার আগে দুই প্রান্ত থেকে প্রতিটি টানেল যাচাই। যে ধাপটি মানুষ এড়িয়ে যায় সেটি ইনভেন্টরি।

আপনি আসলে তিনটি বস্তুর কোনটি বদলাচ্ছেন

পোর্টাল খোলার আগে বস্তুটির নাম বলুন। একটি VPN গেটওয়ে তার প্রাইভেট ঠিকানা নেয় এমন একটি সাবনেট থেকে যার নাম হুবহু GatewaySubnet হতে হবে, এবং Azure সেই প্রিফিক্স থেকেই তা বরাদ্দ করে; এটি পিন করার কোনো সাধারণ ফিল্ড নেই। ঠিকানাটি স্থির দেখায় কেবল কারণ সাবনেট স্থির। সাবনেট নতুন ঠিকানা দিন বা গেটওয়ে নতুন করে বানান, ঠিকানা তাদের সঙ্গে সরে যাবে।

পাবলিক ঠিকানা সম্পাদনাযোগ্য, কিন্তু SKU নিয়ম ঠিক করে সম্পাদনাটি বৈধ কি না। Basic গেটওয়ে Basic ডাইনামিক পাবলিক IP-র সঙ্গে জোড়া লাগে, VpnGw SKU-তে Standard স্ট্যাটিক দরকার, আর জোন-রিডান্ড্যান্ট গেটওয়েতে একই জোনযুক্ত Standard পাবলিক IP দরকার। ভুল SKU টানেল পড়ার আগেই প্রত্যাখ্যাত হয়।

ObjectWhere it livesWhat a change forces
Private addressGatewaySubnet prefix, assigned at deploymentSubnet resize or rebuild, then routes, NSGs and peer review
Public addressPublic IP resource referenced by the IP configurationGateway reprovision, peer and allowlist edits, new client profiles
Subscription contextYour PowerShell or CLI sessionNothing in Azure, and it clears most not-found errors

কিছু নড়ার আগেই ইনভেন্টরি

আগে সাবস্ক্রিপশন প্রমাণ করুন, কারণ তা ছাড়া বাকি ইনভেন্টরি মূল্যহীন। গেটওয়ে, তার IP কনফিগারেশন এবং তার উপর শেষ হওয়া প্রতিটি সংযোগ লিখে রাখুন, এবং আউটপুট পরিবর্তনের রেকর্ডের পাশে রাখুন।

Get-AzContext | Select-Object Subscription, Tenant, Environment
Get-AzVirtualNetworkGateway -ResourceGroupName rg-hub -Name gw-hub |
  Select-Object Name, Sku, EnableActiveActive, IpConfigurations
Get-AzVirtualNetworkGatewayConnection -ResourceGroupName rg-hub |
  Select-Object Name, ConnectionStatus, ConnectionType

রিসোর্স ID নামের চেয়ে বেশি জরুরি। একটি সংযোগ গেটওয়ে ও একটি লোকাল নেটওয়ার্ক গেটওয়ের রেফারেন্স ধরে রাখে, এবং সেই IDগুলো স্ক্রিপ্ট, সতর্কতা ও কেউ মনে না রাখা পলিসি অ্যাসাইনমেন্টে দেখা যায়। Azure-এর বাইরে কী আছে তাও তালিকাভুক্ত করুন: ঠিকানায় যাওয়া DNS নাম, পার্টনারের অনুমতি তালিকা, পুরোনো IP আটকে রাখা শাখা ফায়ারওয়াল।

চলমান গেটওয়েতে পাবলিক IP বদলানো

প্রথমে প্রতিস্থাপন ঠিকানাটি একই অঞ্চলে এবং গেটওয়ের সঙ্গে মেলা জোন সেট নিয়ে তৈরি করুন, আর পুরোনো রিসোর্স জায়গায় থাকতে দিন। তারপর IP কনফিগারেশন নতুন করে গড়ে এক কলে আপডেট পাঠান। সেই কল পুরো কনফিগারেশন সংগ্রহ বদলে দেয়, তাই অ্যাক্টিভ-অ্যাক্টিভ গেটওয়ের দুই কনফিগারেশনই দরকার, নইলে একটি টানেল থাকে আর অন্যটি হারায়।

$gw = Get-AzVirtualNetworkGateway -ResourceGroupName rg-hub -Name gw-hub
$pip = New-AzPublicIpAddress -Name pip-gw-hub-2 -ResourceGroupName rg-hub `
  -Location westeurope -AllocationMethod Static -Sku Standard
$conf = New-AzVirtualNetworkGatewayIpConfig -Name gwipconfig1 `
  -SubnetId $gw.IpConfigurations[0].Subnet.Id -PublicIpAddressId $pip.Id
Set-AzVirtualNetworkGateway -VirtualNetworkGateway $gw -IpConfigurations $conf

গেটওয়ে নতুন করে প্রস্তুত হওয়ার সময় টানেল পড়ে। দূর প্রান্তের দিকটায় সময়সূচি দরকার: পার্টনার ফায়ারওয়াল কেউ সম্পাদনা না করা পর্যন্ত পুরোনো ঠিকানা দিতে থাকে, আর যে সংযোগের দূর প্রান্ত আগের IP প্রত্যাশা করে সেটি Azure যতই সুস্থ দেখাক ততক্ষণ বন্ধ থাকে। উইন্ডোর আগে DNS TTL কমান।

পয়েন্ট-টু-সাইট ক্লায়েন্টের নতুন প্রোফাইল দরকার, কারণ ডাউনলোড করা প্যাকেজ এন্ডপয়েন্ট বহন করে। গেটওয়ের সামনে কাস্টম DNS নাম থাকলে পুনর্বিতরণ লাগে না: নাম রাখুন, রেকর্ড বদলান।

গেটওয়েকে অন্য সাবস্ক্রিপশনে সরানো

রিসোর্স স্থানান্তর একটি সেট সরায়, আর একা গেটওয়ে তার সবচেয়ে অকেজো সদস্য। ভার্চুয়াল নেটওয়ার্ক, পাবলিক IP রিসোর্স, লোকাল নেটওয়ার্ক গেটওয়ে ও সংযোগ একসঙ্গে যায়, কারণ প্রত্যেকে অন্যের রেফারেন্স ধরে। লক্ষ্য সাবস্ক্রিপশন একই টেন্যান্টে থাকতে হবে, সেখানে Microsoft.Network নিবন্ধিত থাকতে হবে, এবং দুই দিকেই আপনার লেখার অনুমতি দরকার।

কিছু বদলানোর আগেই ভ্যালিডেশন চলে, তাই প্রত্যাখ্যাত স্থানান্তর রিসোর্স জায়গায় রেখে দেয়। তাই নতুন করে বানানোর আগে স্থানান্তর একবার চেষ্টার যোগ্য: সফল স্থানান্তর পাবলিক IP সঙ্গে নিয়ে যায়, ফলে পার্টনার ও অনুমতি তালিকা কাজ করতে থাকে, অথচ নতুন করে বানানো গেটওয়ে একই ঠিকানা ফেরায় খুব কম।

az resource move --destination-group rg-hub `
  --destination-subscription-id 00000000-0000-0000-0000-000000000000 `
  --ids /subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/rg-hub/providers/Microsoft.Network/virtualNetworkGateways/gw-hub

ভ্যালিডেশন ব্যর্থতা আবার চেষ্টা না করে পড়ুন। সাধারণ কারণ হলো পিছনে পড়ে থাকা নির্ভরতা, যে রিসোর্স ধরন সরানো যায় না, বা যেকোনো রিসোর্স গ্রুপে লক। স্থানান্তর অসম্ভব হলে লক্ষ্যে নতুন করে বানিয়ে কাটওভার করুন: টেস্ট সাবনেট থেকে রাউটিং ও প্রমাণীকরণ নিশ্চিত করুন, পুরোনো সংযোগ মুছবেন না বরং থামান, তারপর পরের উইন্ডোতে পুরোনো পথ সরান।

গেটওয়ে হারিয়ে গেছে মনে হলে কনটেক্সট দেখুন

নট-ফাউন্ড ত্রুটি সাধারণত স্কোপ ত্রুটি। কয়েকটি সাবস্ক্রিপশন থাকা অ্যাকাউন্ট একটি cmdlet-কে ভুলটির দিকে পাঠায়, আর বার্তা রিসোর্সকে দোষ দেয়। বদলে বস্তুটিকে তার পূর্ণ রিসোর্স ID দিয়ে খুঁজুন: ID নিজের সাবস্ক্রিপশন বহন করে, তাই তা সমাধান হলে কিছুই হারায়নি, আপনার ডিফল্ট কনটেক্সটই ভুল।

আরও দুটি অসঙ্গতি একইভাবে পড়া যায়। বাণিজ্যিক-ক্লাউড গেটওয়ে সরকারি বা চীন পরিবেশের দিকে করা সেশনে থাকে না, আর পুরোনো মডিউল সংস্করণ API যে রিসোর্স আকৃতি ইতিমধ্যে ফেরায় তা মিস করে। সাবস্ক্রিপশন পিন করুন, পরিবেশ মেলান, তারপর কেস খুলুন।

Set-AzContext -SubscriptionId 11111111-1111-1111-1111-111111111111
Get-AzResource -ResourceId /subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/rg-hub/providers/Microsoft.Network/virtualNetworkGateways/gw-hub

পরিষ্কার করার আগে দুই প্রান্ত থেকে যাচাই করুন

সংযুক্ত একটি অবস্থা, প্রমাণ নয়। প্রতি সংযোগে টানেল অবস্থা, ডাইনামিক রাউটিং চালালে BGP পিয়ার অবস্থা, এবং ওয়ার্কলোড সাবনেটে কার্যকর রুট দেখুন। তারপর টানেলের উপর নির্ভর করা একটি অ্যাপ্লিকেশন দিয়ে একটি সত্যিকারের অনুরোধ পাঠান। আপনার দরকারি প্রিফিক্স রুট টেবিলে না থাকলেও সংযোগ নিজেকে সংযুক্ত বলে জানাতে পারে।

Get-AzVirtualNetworkGatewayBGPPeerStatus -VirtualNetworkGatewayName gw-hub -ResourceGroupName rg-hub
Get-AzEffectiveRouteTable -NetworkInterfaceName nic-app -ResourceGroupName rg-app

ফলব্যাক উইন্ডো বন্ধ না হওয়া পর্যন্ত পুরোনো পাবলিক IP মুছে না ফেলে বিচ্ছিন্ন রাখুন, এবং পার্টনার ও ফায়ারওয়াল সম্পাদনাগুলো ক্রমে ফেরানো যায় এমনভাবে লিখে রাখুন।

  • কনটেক্সট গেটওয়ের মালিক সাবস্ক্রিপশনে পিন করা
  • পুরোনো পাবলিক IP রাখা, তার নির্ভরতাগুলো লেখা
  • প্রতিটি সংযোগ সবুজ এবং তার মধ্য দিয়ে একটি সত্যিকারের অনুরোধ
  • পয়েন্ট-টু-সাইট ব্যবহারকারীরা নতুন প্রোফাইলে সরানো
  • DNS রেকর্ড বদলানো এবং তার আগের মান লিপিবদ্ধ

সম্পর্কিত নিবন্ধ