ক্লাউড NAT ডায়নামিক পোর্ট অ্যালোকেশন ব্যবহার করা

১. সংক্ষিপ্ত বিবরণ

ডাইনামিক পোর্ট অ্যালোকেশন (ডিপিএ) হলো ক্লাউড ন্যাট-এর একটি নতুন ফিচার। ডিপিএ সক্রিয় থাকলে, ক্লাউড ন্যাট ইনস্ট্যান্সগুলোর প্রয়োজন অনুযায়ী তাদের জন্য পোর্ট বরাদ্দ গতিশীলভাবে বাড়ায় বা কমায়। ডিপিএ-কে সর্বনিম্ন এবং সর্বোচ্চ পোর্ট সীমা দিয়ে কনফিগার করা হয়, যাতে এটি কখনও সর্বনিম্ন সীমার নিচে পোর্ট কমায় না বা সর্বোচ্চ সীমার উপরে বাড়ায় না। এর ফলে, ন্যাট গেটওয়ের পেছনের কিছু ইনস্ট্যান্স ক্লাউড ন্যাট-এর পেছনের সমস্ত ইনস্ট্যান্সকে অতিরিক্ত পোর্ট বরাদ্দ না করেই তাদের সংযোগ সংখ্যা গতিশীলভাবে বাড়াতে পারে।

DPA ছাড়া, Cloud NAT-এর পেছনের সমস্ত ইনস্ট্যান্সকে ব্যবহার নির্বিশেষে minPortsPerVm প্যারামিটার দ্বারা নির্ধারিত একই সংখ্যক পোর্ট বরাদ্দ করা হয়।

আরও তথ্যের জন্য অনুগ্রহ করে NAT DPA সম্পর্কিত ডকুমেন্টেশন বিভাগটি পর্যালোচনা করুন।

আপনি যা শিখবেন

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

আপনার যা যা লাগবে

  • গুগল কম্পিউট ইঞ্জিন সম্পর্কে প্রাথমিক জ্ঞান
  • নেটওয়ার্কিং এবং TCP/IP সম্পর্কে প্রাথমিক জ্ঞান
  • ইউনিক্স/লিনাক্স কমান্ড লাইনের প্রাথমিক জ্ঞান
  • গুগল ক্লাউডের নেটওয়ার্কিং বিষয়ক কোনো ট্যুর, যেমন ‘ নেটওয়ার্কিং ইন গুগল ক্লাউড ল্যাব’, সম্পন্ন করে রাখলে তা সহায়ক হয়।
  • 'আলফা অ্যাক্সেস' সক্রিয় করা একটি গুগল ক্লাউড প্রজেক্ট।
  • ক্লাউড NAT-এর প্রাথমিক ধারণা।

২. গুগল ক্লাউড কনসোল এবং ক্লাউড শেল ব্যবহার করা

এই ল্যাব জুড়ে GCP-এর সাথে যোগাযোগের জন্য আমরা গুগল ক্লাউড কনসোল এবং ক্লাউড শেল উভয়ই ব্যবহার করব।

গুগল ক্লাউড কনসোল

ক্লাউড কনসোলটি https://console.cloud.google.com ঠিকানায় পাওয়া যাবে।

75eef5f6fd6d7e41.png

স্ব-গতিতে পরিবেশ সেটআপ

  1. Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না, এবং আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
  • সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে প্রজেক্ট আইডি অবশ্যই অনন্য হতে হবে এবং এটি অপরিবর্তনীয় (একবার সেট করার পর পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর দরকার নেই। বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এবং এটি সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়), তাই যদি এটি আপনার পছন্দ না হয়, তবে এলোমেলোভাবে অন্য একটি তৈরি করুন, অথবা, আপনি নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এরপর প্রজেক্ট তৈরি হয়ে গেলে এটি "স্থির" হয়ে যায়।
  • তৃতীয় আরেকটি ভ্যালু আছে, যা হলো প্রজেক্ট নম্বর এবং কিছু এপিআই এটি ব্যবহার করে। এই তিনটি ভ্যালু সম্পর্কে আরও জানতে ডকুমেন্টেশন দেখুন।
  1. এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হওয়ার কথা নয়, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর যাতে কোনো বিলিং না হয়, সেজন্য রিসোর্সগুলো বন্ধ করতে কোডল্যাবের শেষে দেওয়া যেকোনো "ক্লিন-আপ" নির্দেশাবলী অনুসরণ করুন। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

ক্লাউড শেল শুরু করুন

যদিও গুগল ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালনা করা যায়, এই কোডল্যাবে আপনি গুগল ক্লাউড শেল ব্যবহার করবেন, যা ক্লাউডে চালিত একটি কমান্ড লাইন পরিবেশ।

GCP কনসোল থেকে উপরের ডানদিকের টুলবারে থাকা ক্লাউড শেল আইকনে ক্লিক করুন:

bce75f34b2c53987.png

পরিবেশটি প্রস্তুত করতে এবং এর সাথে সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে। এটি শেষ হলে, আপনি এইরকম কিছু দেখতে পাবেন:

f6ef2b5f13479f3a.png

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

৩. ল্যাব সেটআপ

এই ল্যাবের জন্য, আপনি একটি প্রজেক্ট ব্যবহার করবেন এবং প্রতিটিতে একটি সাবনেট সহ দুটি VPC তৈরি করবেন। আপনি এক্সটার্নাল আইপি অ্যাড্রেস রিজার্ভ করবেন এবং তারপর একটি ক্লাউড ন্যাট গেটওয়ে (ক্লাউড রাউটার সহ), দুটি প্রোডিউসার ইনস্ট্যান্স এবং দুটি কনজিউমার ইনস্ট্যান্স তৈরি ও কনফিগার করবেন। ডিফল্ট ক্লাউড ন্যাটের আচরণ যাচাই করার পর, আপনি ডাইনামিক পোর্ট অ্যালোকেশন (DPA) সক্রিয় করবেন এবং এর আচরণ যাচাই করবেন। সবশেষে, আপনি ন্যাট রুলস কনফিগার করবেন এবং ডিপিএ ও ন্যাট রুলসের মধ্যকার মিথস্ক্রিয়া পর্যবেক্ষণ করবেন।

নেটওয়ার্কিং আর্কিটেকচারের সংক্ষিপ্ত বিবরণ:

a21caa6c333909d8.png

৪. বাহ্যিক আইপি ঠিকানা সংরক্ষণ করুন

এই ল্যাবে ব্যবহারের জন্য সমস্ত এক্সটার্নাল আইপি অ্যাড্রেস রিজার্ভ করে রাখা যাক। এটি আপনাকে কনজিউমার এবং প্রোডিউসার উভয় ভিপিসি-তেই সমস্ত প্রাসঙ্গিক ন্যাট (NAT) এবং ফায়ারওয়াল রুল লিখতে সাহায্য করবে।

ক্লাউড শেল থেকে:

gcloud compute addresses  create nat-address-1 nat-address-2 \
 producer-address-1 producer-address-2 --region us-east4

আউটপুট:

Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-1].
Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-2].
Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-1].
Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-2].

এনভায়রনমেন্ট ভেরিয়েবল হিসেবে সংরক্ষিত আইপি অ্যাড্রেসগুলো পূরণ করুন।

export natip1=`gcloud compute addresses list --filter name:nat-address-1 --format="get(address)"`
export natip2=`gcloud compute addresses list --filter name:nat-address-2 --format="get(address)"`
export producerip1=`gcloud compute addresses list --filter name:producer-address-1 --format="get(address)"`
export producerip2=`gcloud compute addresses list --filter name:producer-address-2 --format="get(address)"`

কোনো আউটপুট প্রত্যাশিত নয়, তবে অ্যাড্রেসগুলো সঠিকভাবে পূরণ হয়েছে কিনা তা নিশ্চিত করার জন্য, চলুন সমস্ত এনভায়রনমেন্ট ভেরিয়েবলের মানগুলো আউটপুট করি।

env | egrep '^(nat|producer)ip[1-3]'

আউটপুট:

producerip1=<Actual Producer IP 1>
producerip2=<Actual Producer IP 2>
natip1=<NAT IP 1>
natip2=<NAT IP 2>

৫. প্রোডিউসার ভিপিসি এবং ইনস্ট্যান্স সেটআপ।

আমরা এখন প্রডিউসার রিসোর্সগুলো তৈরি করব। প্রডিউসার ভিপিসিতে চলমান ইনস্ট্যান্সগুলো 'প্রডিউসার-অ্যাড্রেস-১' এবং 'প্রডিউসার-অ্যাড্রেস-২' নামক দুটি পাবলিক আইপি ব্যবহার করে ইন্টারনেট-মুখী পরিষেবা প্রদান করবে।

প্রথমে VPC তৈরি করা যাক। ক্লাউড শেল থেকে:

gcloud compute networks create producer-vpc --subnet-mode custom

আউটপুট:

Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/networks/producer-vpc].
NAME      SUBNET_MODE  BGP_ROUTING_MODE  IPV4_RANGE  GATEWAY_IPV4
producer-vpc  CUSTOM       REGIONAL

Instances on this network will not be reachable until firewall rules
are created. As an example, you can allow all internal traffic between
instances as well as SSH, RDP, and ICMP by running:

$ gcloud compute firewall-rules create <FIREWALL_NAME> --network producer-vpc --allow tcp,udp,icmp --source-ranges <IP_RANGE>
$ gcloud compute firewall-rules create <FIREWALL_NAME> --network producer-vpc --allow tcp:22,tcp:3389,icmp

এরপর, us-east4-এ সাবনেটটি তৈরি করা যাক। ক্লাউড শেল থেকে:

gcloud compute networks subnets create prod-net-e4 \
   --network producer-vpc --range 10.0.0.0/24 --region us-east4

আউটপুট:

Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/prod-net-e4].
NAME         REGION    NETWORK       RANGE        STACK_TYPE  IPV6_ACCESS_TYPE  IPV6_CIDR_RANGE  EXTERNAL_IPV6_CIDR_RANGE
prod-net-e4  us-east4  producer-vpc  10.0.0.0/24  IPV4_ONLY

এরপরে, NAT IP অ্যাড্রেসগুলোকে পোর্ট 8080-এ প্রডিউসার ইনস্ট্যান্সগুলোতে পৌঁছানোর অনুমতি দেওয়ার জন্য VPC ফায়ারওয়াল নিয়ম তৈরি করতে হবে।

প্রথম নিয়মটির জন্য, ক্লাউড শেল থেকে:

gcloud compute firewall-rules create producer-allow-80 \
  --network producer-vpc --allow tcp:80 \
  --source-ranges $natip1,$natip2

আউটপুট:

Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/firewalls/producer-allow-80].
Creating firewall...done.
NAME                 NETWORK       DIRECTION  PRIORITY  ALLOW     DENY  DISABLED
producer-allow-80    producer-vpc  INGRESS    1000      tcp:80          False

পরবর্তী ধাপ হলো দুটি প্রডিউসার ইনস্ট্যান্স তৈরি করা।

প্রডিউসার ইনস্ট্যান্সগুলোতে একটি সাধারণ এনজিনএক্স প্রক্সি ডেপ্লয়মেন্ট চালানো হবে।

প্রয়োজনীয় সকল সফ্টওয়্যার দিয়ে ইনস্ট্যান্সগুলো দ্রুত প্রস্তুত করার জন্য, আমরা একটি স্টার্ট-আপ স্ক্রিপ্ট দিয়ে ইনস্ট্যান্সগুলো তৈরি করব যা ডেবিয়ান এপিটি প্যাকেজ ম্যানেজার ব্যবহার করে এনজিনএক্স (nginx) ইনস্টল করবে।

NAT রুল লেখার সুবিধার্থে, আমরা প্রতিটি ইনস্ট্যান্সকে একটি ভিন্ন সংরক্ষিত আইপি অ্যাড্রেস প্রদান করব।

প্রথম ইনস্ট্যান্সটি তৈরি করুন। ক্লাউড শেল থেকে:

gcloud compute instances create producer-instance-1 \
--zone=us-east4-a --machine-type=e2-medium \
--network-interface=address=producer-address-1,network-tier=PREMIUM,subnet=prod-net-e4 \
--metadata startup-script="#! /bin/bash
sudo apt update
sudo apt install -y nginx
mkdir /var/www/html/nginx/
cat <<EOF > /var/www/html/nginx/index.html
<html><body><h1>This is producer instance 1</h1>
</body></html>
EOF"

আউটপুট:

Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/zones/us-east4-a/instances/producer-instance-1].
NAME                 ZONE        MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
producer-instance-1  us-east4-a  e2-medium                  10.0.0.2     <Producer IP1>  RUNNING

তারপর দ্বিতীয় ইনস্ট্যান্সটি তৈরি করুন। ক্লাউড শেল থেকে:

gcloud compute instances create producer-instance-2 \
--zone=us-east4-a --machine-type=e2-medium \
--network-interface=address=producer-address-2,network-tier=PREMIUM,subnet=prod-net-e4 \
--metadata startup-script="#! /bin/bash
sudo apt update
sudo apt install -y nginx
mkdir /var/www/html/nginx/
cat <<EOF > /var/www/html/nginx/index.html
<html><body><h1>This is producer instance 2</h1>
</body></html>
EOF"

আউটপুট:

Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/zones/us-east4-a/instances/producer-instance-2].
NAME                 ZONE        MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
producer-instance-2  us-east4-a  e2-medium                  10.0.0.3     <Producer IP2>  RUNNING

৬. কনজিউমার ভিপিসি, ক্লাউড ন্যাট এবং ইনস্ট্যান্স সেটআপ করুন

এখন যেহেতু আপনি প্রডিউসার সার্ভিসটি তৈরি করে ফেলেছেন, তাই এখন কনজিউমার ভিপিসি এবং এর ক্লাউড ন্যাট গেটওয়ে তৈরি করার পালা।

VPC এবং সাবনেট তৈরি করার পর, আমরা TCP সোর্স IP রেঞ্জগুলোর জন্য IAP অনুমোদনের উদ্দেশ্যে একটি সাধারণ ইনগ্রেস ফায়ারওয়াল রুল যোগ করব। এর ফলে আমরা gcloud ব্যবহার করে সরাসরি কনজিউমার ইনস্ট্যান্সগুলোতে SSH করতে পারব।

এরপর আমরা ম্যানুয়াল অ্যালোকেশন মোডে একটি সাধারণ ক্লাউড ন্যাট গেটওয়ে তৈরি করব এবং এর সাথে "nat-address-1" নামক সংরক্ষিত অ্যাড্রেসটি যুক্ত করব। কোডল্যাবের পরবর্তী অংশগুলোতে, আমরা ডাইনামিক পোর্ট অ্যালোকেশন চালু করার জন্য গেটওয়ের কনফিগারেশন আপডেট করব এবং পরে কাস্টম রুল যোগ করব।

প্রথমে VPC তৈরি করা যাক। ক্লাউড শেল থেকে:

gcloud compute networks create consumer-vpc --subnet-mode custom

আউটপুট:

Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/networks/consumer-vpc].
NAME          SUBNET_MODE  BGP_ROUTING_MODE  IPV4_RANGE  GATEWAY_IPV4
consumer-vpc  CUSTOM       REGIONAL

Instances on this network will not be reachable until firewall rules
are created. As an example, you can allow all internal traffic between
instances as well as SSH, RDP, and ICMP by running:

$ gcloud compute firewall-rules create <FIREWALL_NAME> --network consumer-vpc --allow tcp,udp,icmp --source-ranges <IP_RANGE>
$ gcloud compute firewall-rules create <FIREWALL_NAME> --network consumer-vpc --allow tcp:22,tcp:3389,icmp

এরপর, us-east4-এ একটি সাবনেট তৈরি করা যাক। ক্লাউড শেল থেকে:

gcloud compute networks subnets create cons-net-e4 \
   --network consumer-vpc --range 10.0.0.0/24 --region us-east4

আউটপুট:

Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/cons-net-e4].
NAME         REGION    NETWORK       RANGE        STACK_TYPE  IPV6_ACCESS_TYPE  IPV6_CIDR_RANGE  EXTERNAL_IPV6_CIDR_RANGE
cons-net-e4  us-east4  consumer-vpc  10.0.0.0/24  IPV4_ONLY

এরপরে, পোর্ট ২২-এ কনজিউমার ইনস্ট্যান্সগুলোতে IAP রেঞ্জ অ্যাড্রেসগুলোকে পৌঁছানোর অনুমতি দেওয়ার জন্য একটি VPC ফায়ারওয়াল নিয়ম তৈরি করা যাক।

প্রথম ফায়ারওয়াল নিয়মের জন্য, ক্লাউড শেল থেকে নিম্নলিখিতটি চালান:

gcloud compute firewall-rules create consumer-allow-iap \
  --network consumer-vpc --allow tcp:22 \
  --source-ranges 35.235.240.0/20

আউটপুট:

Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/firewalls/consumer-allow-iap].
Creating firewall...done.
NAME                 NETWORK       DIRECTION  PRIORITY  ALLOW     DENY  DISABLED
consumer-allow-iap  consumer-vpc  INGRESS    1000      tcp:22        False

NAT গেটওয়ে তৈরি করার আগে, আমাদের প্রথমে একটি ক্লাউড রাউটার ইনস্ট্যান্স তৈরি করতে হবে (আমরা একটি প্রাইভেট ASN নম্বর ব্যবহার করি, কিন্তু এই ল্যাবের কার্যক্রমের জন্য এটি অপ্রাসঙ্গিক)। ক্লাউড শেল থেকে:

gcloud compute routers create consumer-cr \
--region=us-east4 --network=consumer-vpc \
 --asn=65501

আউটপুট:

Creating router [consumer-cr]...done.
NAME         REGION       NETWORK
consumer-cr  us-east4  consumer-vpc

এরপর NAT গেটওয়ে ইনস্ট্যান্সটি তৈরি করুন। ক্লাউড শেল থেকে:

gcloud compute routers nats create consumer-nat-gw \
    --router=consumer-cr \
    --router-region=us-east4 \
    --nat-all-subnet-ip-ranges \
    --nat-external-ip-pool=nat-address-1

আউটপুট:

Creating NAT [consumer-nat-gw] in router [consumer-cr]...done.

উল্লেখ্য যে, ডিফল্টরূপে, ক্লাউড NAT গেটওয়েটি minPortsPerVm ৬৪-তে সেট করে তৈরি করা হয়।

কনজিউমার টেস্ট ইনস্ট্যান্সগুলো তৈরি করুন। আমরা এখানে সংরক্ষিত প্রডিউসার আইপিগুলো পূরণ করি যাতে পরবর্তীতে ইনস্ট্যান্সের মধ্যে সেগুলোকে উল্লেখ করা যায়। ক্লাউড শেল থেকে:

gcloud compute instances create consumer-instance-1 --zone=us-east4-a \
--machine-type=e2-medium --network-interface=subnet=cons-net-e4,no-address \
--metadata=producer-service-ip1=$producerip1,producer-service-ip2=$producerip2

gcloud compute instances create consumer-instance-2 --zone=us-east4-a \
--machine-type=e2-medium --network-interface=subnet=cons-net-e4,no-address \
--metadata=producer-service-ip1=$producerip1,producer-service-ip2=$producerip2

আউটপুট:

Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/zones/us-east4-a/instances/consumer-instance-1].
NAME                ZONE        MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP  STATUS
consumer-instance-1  us-east4-a  e2-medium                  10.0.0.2                  RUNNING

Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/zones/us-east4-a/instances/consumer-instance-2].
NAME                ZONE        MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP  STATUS
consumer-instance-2  us-east4-a  e2-medium                  10.0.0.3                  RUNNING

৭. ডিফল্ট ক্লাউড NAT আচরণ যাচাই করুন

এই পর্যায়ে, কনজিউমার ইনস্ট্যান্সগুলো ডিফল্ট ক্লাউড ন্যাট আচরণ ব্যবহার করে, যা সমস্ত বাহ্যিক ঠিকানার সাথে যোগাযোগের জন্য একই সংরক্ষিত আইপি "nat-address-1" ব্যবহার করে। ক্লাউড ন্যাটে এখনও ডিপিএ সক্রিয় করা হয়নি।

নিম্নলিখিত কমান্ডটি চালিয়ে যাচাই করে নেওয়া যাক, ক্লাউড ন্যাট আমাদের কনজিউমার ইনস্ট্যান্সগুলোর জন্য কোন কোন পোর্ট বরাদ্দ করেছে।

gcloud  compute routers get-nat-mapping-info consumer-cr --region=us-east4

নমুনা আউটপুট

---
instanceName: consumer-instance-1
interfaceNatMappings:
- natIpPortRanges:
  - <NAT Consumer IP1>:1024-1055
  numTotalDrainNatPorts: 0
  numTotalNatPorts: 32
  sourceAliasIpRange: ''
  sourceVirtualIp: 10.0.0.2
- natIpPortRanges:
  - <NAT Consumer IP1>:32768-32799
  numTotalDrainNatPorts: 0
  numTotalNatPorts: 32
  sourceAliasIpRange: ''
  sourceVirtualIp: 10.0.0.2
---
instanceName: consumer-instance-2
interfaceNatMappings:
- natIpPortRanges:
  - <NAT Address IP1>:1056-1087
  numTotalDrainNatPorts: 0
  numTotalNatPorts: 32
  sourceAliasIpRange: ''
  sourceVirtualIp: 10.0.0.3
- natIpPortRanges:
  - <NAT Address IP1>:32800-32831
  numTotalDrainNatPorts: 0
  numTotalNatPorts: 32
  sourceAliasIpRange: ''
  sourceVirtualIp: 10.0.0.3

উপরের আউটপুট থেকে যেমন দেখা যাচ্ছে, ক্লাউড ন্যাট একই এক্সটার্নাল আইপি nat-address-1 থেকে প্রতিটি ইনস্ট্যান্সের জন্য ৬৪টি পোর্ট বরাদ্দ করেছে।

ডিপিএ চালু করার আগে চলুন যাচাই করে নিই যে আমরা সমান্তরালভাবে কতগুলো সংযোগ খুলতে পারি।

প্রথম কনজিউমার ইনস্ট্যান্সে SSH করুন। ক্লাউড শেল থেকে:

gcloud compute ssh consumer-instance-1 --zone=us-east4-a

আপনি এখন ইনস্ট্যান্স শেলে আছেন।

নমুনা আউটপুট (সংক্ষিপ্ততার জন্য সম্পূর্ণ আউটপুট সংক্ষিপ্ত করা হয়েছে)

External IP address was not found; defaulting to using IAP tunneling.
...
...
<username>@consumer-instance-1:~$

কনজিউমার ইনস্ট্যান্সের ভেতর থেকে, প্রথমে উভয় প্রডিউসার আইপি সংগ্রহ করে সেগুলোকে এনভায়রনমেন্ট ভেরিয়েবল হিসেবে যুক্ত করে নেওয়া যাক।

export producerip1=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip1" -H "Metadata-Flavor: Google"`

export producerip2=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip2" -H "Metadata-Flavor: Google"`

এরপর, আমরা সফলভাবে উভয় প্রডিউসার ইনস্ট্যান্সে পৌঁছাতে পারছি কিনা তা নিশ্চিত করতে curl ব্যবহার করে দেখুন।

<username>@consumer-instance-1:~$ curl http://$producerip1/nginx/
<html><body><h1>This is producer instance 1</h1>
</body></html>
<username>@consumer-instance-1:~$ curl http://$producerip2/nginx/
<html><body><h1>This is producer instance 2</h1>
</body></html>

এখন, একটি লুপের মাধ্যমে `curl` চালিয়ে প্রডিউসার ইনস্ট্যান্সগুলোর একটিতে অনেকগুলো সমান্তরাল সংযোগ তৈরি করার চেষ্টা করা যাক। মনে রাখবেন যে, ক্লাউড ন্যাট (Cloud NAT) ২ মিনিটের জন্য বন্ধ সকেট পুনরায় ব্যবহার করার অনুমতি দেয় না। সুতরাং, যতক্ষণ আমরা ২ মিনিটের মধ্যে সমস্ত সংযোগের প্রচেষ্টাগুলো লুপের মাধ্যমে সম্পন্ন করতে পারব, ততক্ষণ আমরা এই উপায়ে সমান্তরাল সংযোগ অনুকরণ করতে সক্ষম হব।

ইনস্ট্যান্স SSH সেশনে নিম্নলিখিত কমান্ডটি চালান।

while true; do for i in {1..64}; do curl -s -o /dev/null --connect-timeout 5 http://$producerip1/nginx/; if [ $? -ne 0 ] ; then echo -e "\nConnection # $i failed" ; else echo -en "\rConnection # $i successful"; fi; done; echo -e "\nLoop Done, Sleeping for 150s"; sleep 150; done

আপনি আশা করবেন যে সফলভাবে ৬৪টি সমান্তরাল সংযোগ খোলা যাবে এবং স্ক্রিপ্টটি নিম্নলিখিত আউটপুট দেবে।

Connection # 64 successful

Loop Done, Sleeping for 150s
Connection # 64 successful

Loop Done, Sleeping for 150s

আমরা যে ৬৪টির বেশি সমান্তরাল সংযোগ স্থাপন করতে পারছি না, তা দেখার জন্য প্রথমে ২ মিনিট অপেক্ষা করুন যাতে সমস্ত পুরোনো সকেট খালি হয়ে যায়। তারপর একই এক-লাইনের কমান্ডটি নিচের মতো করে পরিবর্তন করুন এবং এটি পুনরায় চালান।

while true; do for i in {1..70}; do curl -s -o /dev/null --connect-timeout 5 http://$producerip1/nginx/; if [ $? -ne 0 ] ; then echo -e "\nConnection # $i failed" ; else echo -en "\rConnection # $i successful"; fi; done; echo -e "\nLoop Done, Sleeping for 150s"; sleep 150; done

এখন আপনি নিম্নলিখিত আউটপুট আশা করতে পারেন।

Connection # 64 successful
Connection # 65 failed
Connection # 66 failed
Connection # 67 failed
Connection # 68 failed
Connection # 69 failed
Connection # 70 failed

Loop Done, Sleeping for 150s

এর থেকে বোঝা যায় যে, প্রথম ৬৪টি সংযোগ সফল হলেও পোর্ট উপলব্ধ না থাকার কারণে বাকি ৬টি সংযোগ ব্যর্থ হয়েছে।

তাহলে চলুন এ ব্যাপারে কিছু একটা করা যাক, SSH শেল থেকে বেরিয়ে আসি এবং পরবর্তী অংশে DPA চালু করি।

৮. ডিপিএ সক্রিয় করুন এবং এর আচরণ যাচাই করুন।

নিম্নলিখিত gcloud কমান্ডটি চালান, যা DPA সক্রিয় করে, প্রতিটি VM-এর জন্য সর্বনিম্ন পোর্ট বরাদ্দ ৬৪-এ এবং সর্বোচ্চ পোর্ট বরাদ্দ ১০২৪-এ সেট করে।

gcloud alpha compute routers nats update consumer-nat-gw --router=consumer-cr \
--region=us-east4 --min-ports-per-vm=64 --max-ports-per-vm=1024 \
--enable-dynamic-port-allocation

যার আউটপুট নিম্নলিখিত

Updating nat [consumer-nat-gw] in router [consumer-cr]...done.

এখন get-nat-mapping-info পুনরায় চালিয়ে নিশ্চিত হওয়া যাক যে উভয় ইনস্ট্যান্সেই এখনও কেবল ৬৪টি পোর্ট বরাদ্দ রয়েছে।

gcloud  compute routers get-nat-mapping-info consumer-cr --region=us-east4

নমুনা আউটপুট (সংক্ষিপ্ততার জন্য সংক্ষেপিত)

---
instanceName: consumer-instance-1
...
  - <NAT Consumer IP1>:1024-1055
  numTotalNatPorts: 32
...
- natIpPortRanges:
  - <NAT Consumer IP1>:32768-32799
  numTotalNatPorts: 32
...
---
instanceName: consumer-instance-2
...
  - <NAT Address IP1>:1056-1087
  numTotalNatPorts: 32
...
  - <NAT Address IP1>:32800-32831
  numTotalNatPorts: 32
...

পোর্ট বরাদ্দের ক্ষেত্রে তেমন কোনো পরিবর্তন হয়নি, যেহেতু ইনস্ট্যান্সটি এখনও সক্রিয়ভাবে কোনো পোর্ট ব্যবহার করছে না।

চলুন ইনস্ট্যান্সটিতে SSH দিয়ে আবার লগইন করি:

gcloud compute ssh consumer-instance-1 --zone=us-east4-a

প্রডিউসার আইপি এনভায়রনমেন্ট ভেরিয়েবলগুলো পুনরায় এক্সপোর্ট করুন।

export producerip1=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip1" -H "Metadata-Flavor: Google"`

export producerip2=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip2" -H "Metadata-Flavor: Google"`

এবং সমান্তরাল সংযোগ অনুকরণ করতে আগের লুপটি পুনরায় চালান:

while true; do for i in {1..70}; do curl -s -o /dev/null --connect-timeout 5 http://$producerip1/nginx/; if [ $? -ne 0 ] ; then echo -e "\nConnection # $i failed" ; else echo -en "\rConnection # $i successful"; fi; done; echo -e "\nLoop Done, Sleeping for 150s"; sleep 150; done

এখন আমরা নিম্নলিখিত আউটপুট দেখতে পাব।

Connection # 64 successful
Connection # 65 failed

Connection # 66 failed
Connection # 70 successful
Loop Done, Sleeping for 150s

তাহলে এখানে কী ঘটল? পোর্টের ব্যবহার বাড়লে ক্লাউড ন্যাট পোর্ট বরাদ্দ বাড়িয়ে দেয়, কিন্তু নেটওয়ার্কিং লেয়ার জুড়ে এটি প্রোগ্রাম হতে কিছুটা সময় লাগে। একারণেই বাকি সংযোগ প্রচেষ্টাগুলো সফলভাবে সম্পন্ন হওয়ার আগে আমরা ১-৩টি সংযোগ টাইমআউট দেখতে পাই।

আমরা curl-এর জন্য একটি কঠোর টাইমআউট (৫ সেকেন্ড) নির্দিষ্ট করেছি, কিন্তু DPA পোর্ট বরাদ্দ বাড়ানোর সময়েও এর চেয়ে বেশি টাইমআউটযুক্ত অ্যাপ্লিকেশনগুলো সফলভাবে সংযোগ সম্পন্ন করতে পারবে।

এই ক্রমবর্ধমান আচরণটি আরও স্পষ্টভাবে দেখা যায় যখন আমরা লুপটি ১০২৪ বার সংযোগের চেষ্টার জন্য এইভাবে চালাই।

while true; do for i in {1..1024}; do curl -s -o /dev/null --connect-timeout 5 http://$producerip1/nginx/; if [ $? -ne 0 ] ; then echo -e "\nConnection # $i failed" ; else echo -en "\rConnection # $i successful"; fi; done; echo -e "\nLoop Done, Sleeping for 150s"; sleep 150; done

আমরা এখন নিম্নলিখিত আউটপুট দেখতে আশা করছি।

Connection # 64 successful
Connection # 65 failed

Connection # 66 failed
Connection # 129 successful
Connection # 130 failed

Connection # 131 failed
Connection # 258 successful
Connection # 259 failed

Connection # 260 failed
Connection # 515 successful
Connection # 516 failed

Connection # 1024 successful
Loop Done, Sleeping for 150s

যেহেতু ক্লাউড ন্যাট ২-এর ঘাত অনুসারে পোর্ট বরাদ্দ করে, অর্থাৎ প্রতিটি ধাপে বরাদ্দ দ্বিগুণ করে, সেহেতু আমরা ৬৪ থেকে ১০২৪-এর মধ্যে ২-এর ঘাতগুলোর আশেপাশে সংযোগের সময়সীমা শেষ হওয়ার ঘটনাগুলো বিশেষভাবে দেখতে পাই।

যেহেতু আমরা maxPortsPerVM ১০২৪-এ সেট করেছি, তাই আমরা ১০২৪-এর বেশি সংযোগ স্থাপন করতে পারব বলে আশা করি না। পুরনো পোর্টগুলো রিসেট করার জন্য ২ মিনিট অপেক্ষা করার পর, ১০২৪-এর চেয়ে বেশি সংখ্যক পোর্ট দিয়ে curl লুপটি পুনরায় চালিয়ে আমরা বিষয়টি পরীক্ষা করতে পারি।

while true; do for i in {1..1035}; do curl -s -o /dev/null --connect-timeout 5 http://$producerip1/nginx/; if [ $? -ne 0 ] ; then echo -e "\nConnection # $i failed" ; else echo -en "\rConnection # $i successful"; fi; done; echo -e "\nLoop Done, Sleeping for 150s"; sleep 150; done

এবং প্রত্যাশা অনুযায়ী, আউটপুটে দেখা যাচ্ছে যে ১০২৪-এর পরের সংযোগগুলো অকার্যকর হতে শুরু করেছে।

<truncated output>
...
Connection # 1028 successful
Connection # 1029 failed
Connection # 1030 failed
Connection # 1031 failed
Connection # 1032 failed
Connection # 1033 failed
Connection # 1034 failed
Connection # 1035 failed
...
Loop Done, Sleeping for 150s

maxPortsPerVM 1024-এ সেট করার মাধ্যমে, আমরা ক্লাউড NAT-কে নির্দেশ দিয়েছি যেন এটি প্রতি VM-এ 1024-এর বেশি পোর্ট বরাদ্দ না বাড়ায়।

যদি আমরা SSH সেশন থেকে বেরিয়ে এসে যথেষ্ট দ্রুত get-nat-mapping-info আবার চালাই, তাহলে আমরা বরাদ্দ করা অতিরিক্ত পোর্টগুলো দেখতে পাব।

gcloud  compute routers get-nat-mapping-info consumer-cr --region=us-east4

এবং নিম্নলিখিত আউটপুটটি পর্যবেক্ষণ করুন।

---
instanceName: consumer-instance-1
interfaceNatMappings:
- natIpPortRanges:
  - <NAT Address IP1>:1024-1055
  - <NAT Address IP1>1088-1119
  -<NAT Address IP1>:1152-1215
  - <NAT Address IP1>:1280-1407
  - <NAT Address IP1>:1536-1791
  numTotalDrainNatPorts: 0
  numTotalNatPorts: 512
  sourceAliasIpRange: ''
  sourceVirtualIp: 10.0.0.2
- natIpPortRanges:
  - <NAT Address IP1>:32768-32799
  - <NAT Address IP1>:32832-32863
  - <NAT Address IP1>:32896-32959
  - <NAT Address IP1>:33024-33151
  - <NAT Address IP1>:33536-33791
  numTotalDrainNatPorts: 0
  numTotalNatPorts: 512
  sourceAliasIpRange: ''
  sourceVirtualIp: 10.0.0.2
---
instanceName: consumer-instance-2
interfaceNatMappings:
- natIpPortRanges:
  - <NAT Address IP1>:1056-1087
  numTotalDrainNatPorts: 0
  numTotalNatPorts: 32
  sourceAliasIpRange: ''
  sourceVirtualIp: 10.0.0.3
- natIpPortRanges:
  - <NAT Address IP1>:32800-32831
  numTotalDrainNatPorts: 0
  numTotalNatPorts: 32
  sourceAliasIpRange: ''
  sourceVirtualIp: 10.0.0.3

লক্ষ্য করুন consumer-instance-1 জন্য ১০২৪টি পোর্ট বরাদ্দ করা হয়েছে, কিন্তু consumer-instance-2 জন্য মাত্র ৬৪টি পোর্ট বরাদ্দ করা হয়েছে। ডিপিএ আসার আগে এটি সহজে সম্ভব ছিল না এবং এটিই ক্লাউড ন্যাট-এর জন্য ডিপিএ-এর শক্তিকে স্পষ্টভাবে তুলে ধরে।

get-nat-mapping-info কমান্ডটি পুনরায় চালানোর আগে আপনি যদি ২ মিনিট অপেক্ষা করেন, তাহলে লক্ষ্য করবেন যে consumer-instance-1 তার বরাদ্দকৃত সর্বনিম্ন মান অর্থাৎ মাত্র ৬৪টি পোর্টে ফিরে এসেছে। এটি কেবল পোর্ট বরাদ্দ বাড়ানোর ক্ষেত্রেই DPA-এর সক্ষমতা প্রদর্শন করে না, বরং একই NAT গেটওয়ের পেছনের অন্যান্য ইনস্ট্যান্সের সম্ভাব্য ব্যবহারের জন্য অব্যবহৃত অবস্থায় পোর্টগুলো মুক্ত করে দেওয়ার সক্ষমতাও তুলে ধরে।

৯. ডিপিএ দিয়ে ক্লাউড এনএটি রুলস পরীক্ষা করুন

আমরা সম্প্রতি ক্লাউড NAT-এর জন্য NAT রুলস কার্যকারিতাও চালু করেছি, যা গ্রাহকদের নির্দিষ্ট বাহ্যিক গন্তব্যের জন্য বিশেষ NAT IP ব্যবহার করে নিয়ম লেখার সুযোগ দেয়। আরও তথ্যের জন্য, অনুগ্রহ করে NAT রুলস ডকুমেন্টেশন পৃষ্ঠাটি দেখুন।

এই অনুশীলনীতে, আমরা ডিপিএ (DPA) এবং ন্যাট (NAT) রুলের মধ্যকার পারস্পরিক সম্পর্ক পর্যবেক্ষণ করব। প্রথমে producer-address-2 ) অ্যাক্সেস করার সময় nat-address-2 -2) ব্যবহার করার জন্য একটি ন্যাট রুল নির্ধারণ করা যাক।

নিম্নলিখিত gcloud কমান্ডটি চালান, যা ব্যবহার করে NAT নিয়মটি তৈরি করে।

gcloud alpha compute routers nats rules create 100 \
 --match='destination.ip == "'$producerip2'"' \
 --source-nat-active-ips=nat-address-2 --nat=consumer-nat-gw \
 --router=consumer-cr --router-region=us-east4

আপনি নিম্নলিখিত আউটপুট আশা করতে পারেন।

Updating nat [consumer-nat-gw] in router [consumer-cr]...done.

এখন নতুন NAT নিয়মটির প্রভাব দেখতে get-nat-mapping-info আবার চালানো যাক।

gcloud alpha compute routers get-nat-mapping-info consumer-cr --region=us-east4

যার আউটপুট নিম্নলিখিত হওয়া উচিত

---
instanceName: consumer-instance-1
interfaceNatMappings:
- natIpPortRanges:
  - <NAT Address IP1>:1024-1055
  numTotalDrainNatPorts: 0
  numTotalNatPorts: 32
  ruleMappings:
  - natIpPortRanges:
    - <NAT Address IP2>:1024-1055
    numTotalDrainNatPorts: 0
    numTotalNatPorts: 32
    ruleNumber: 100
  sourceAliasIpRange: ''
  sourceVirtualIp: 10.0.0.2
- natIpPortRanges:
  - <NAT Address IP1>:32768-32799
  numTotalDrainNatPorts: 0
  numTotalNatPorts: 32
  ruleMappings:
  - natIpPortRanges:
    - <NAT Address IP2>:32768-32799
    numTotalDrainNatPorts: 0
    numTotalNatPorts: 32
    ruleNumber: 100
  sourceAliasIpRange: ''
  sourceVirtualIp: 10.0.0.2

লক্ষ্য করুন যে, এখন ruleMappings হায়ারার্কির অধীনে nat-address-2 এর জন্য বিশেষভাবে অতিরিক্ত পোর্ট বরাদ্দ করা হয়েছে (সেগুলোও ৬৪ পোর্টে, যা নির্দিষ্ট সর্বনিম্ন মান)।

তাহলে কী হবে যদি কোনো ইনস্ট্যান্স NAT নিয়ম দ্বারা নির্দিষ্ট গন্তব্যে অনেকগুলো সংযোগ খোলে? চলুন জেনে নেওয়া যাক।

চলুন ইনস্ট্যান্সটিতে SSH দিয়ে আবার লগইন করি:

gcloud compute ssh consumer-instance-1 --zone=us-east4-a

প্রডিউসার আইপি এনভায়রনমেন্ট ভেরিয়েবলগুলো পুনরায় এক্সপোর্ট করুন।

export producerip1=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip1" -H "Metadata-Flavor: Google"`

export producerip2=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip2" -H "Metadata-Flavor: Google"`

এবং এখন চলুন এবার producerip2 বিরুদ্ধে কার্ল লুপটি আবার চালাই।

while true; do for i in {1..1024}; do curl -s -o /dev/null --connect-timeout 5 http://$producerip2/nginx/; if [ $? -ne 0 ] ; then echo -e "\nConnection # $i failed" ; else echo -en "\rConnection # $i successful"; fi; done; echo -e "\nLoop Done, Sleeping for 150s"; sleep 150; done

আপনি নিম্নলিখিতের অনুরূপ একটি আউটপুট আশা করতে পারেন।

Connection # 64 successful
Connection # 65 failed

Connection # 66 failed
Connection # 129 successful
Connection # 130 failed

Connection # 131 failed
Connection # 258 successful
Connection # 259 failed

Connection # 260 failed
Connection # 515 successful
Connection # 516 failed

Connection # 1024 successful
Loop Done, Sleeping for 150s

মূলত আগের পরীক্ষাটিরই পুনরাবৃত্তি। চলুন ইনস্ট্যান্সটির SSH সেশন থেকে বেরিয়ে এসে আবার nat ম্যাপিংগুলো দেখি।

gcloud alpha compute routers get-nat-mapping-info consumer-cr --region=us-east4

যার আউটপুট নিম্নলিখিত হওয়া উচিত

---
instanceName: consumer-instance-1
interfaceNatMappings:
- natIpPortRanges:
  - <NAT Address IP1>:1024-1055
  numTotalDrainNatPorts: 0
  numTotalNatPorts: 32
  ruleMappings:
  - natIpPortRanges:
    - <NAT Address IP2>:1024-1055
    - <NAT Address IP2>:1088-1119
    - <NAT Address IP2>:1152-1215
    - <NAT Address IP2>:1280-1407
    - <NAT Address IP2>:1536-1791
    numTotalDrainNatPorts: 0
    numTotalNatPorts: 512
    ruleNumber: 100
  sourceAliasIpRange: ''
  sourceVirtualIp: 10.0.0.2
- natIpPortRanges:
  - <NAT Address IP1>:32768-32799
  numTotalDrainNatPorts: 0
  numTotalNatPorts: 32
  ruleMappings:
  - natIpPortRanges:
    - <NAT Address IP2>:32768-32799
    - <NAT Address IP2>:32832-32863
    - <NAT Address IP2>:32896-32959
    - <NAT Address IP2>:33024-33151
    - <NAT Address IP2>:33280-33535
    numTotalDrainNatPorts: 0
    numTotalNatPorts: 512
    ruleNumber: 100
  sourceAliasIpRange: ''
  sourceVirtualIp: 10.0.0.2
---
instanceName: consumer-instance-2
interfaceNatMappings:
- natIpPortRanges:
  - <NAT Address IP1>:1056-1087
  numTotalDrainNatPorts: 0
  numTotalNatPorts: 32
  ruleMappings:
  - natIpPortRanges:
    - <NAT Address IP2>:1056-1087
    numTotalDrainNatPorts: 0
    numTotalNatPorts: 32
    ruleNumber: 100
  sourceAliasIpRange: ''
  sourceVirtualIp: 10.0.0.3
- natIpPortRanges:
  - <NAT Address IP1>:32800-32831
  numTotalDrainNatPorts: 0
  numTotalNatPorts: 32
  ruleMappings:
  - natIpPortRanges:
    - <NAT Address IP2>:32800-32831
    numTotalDrainNatPorts: 0
    numTotalNatPorts: 32
    ruleNumber: 100
  sourceAliasIpRange: ''
  sourceVirtualIp: 10.0.0.3

---
instanceName: consumer-instance-1
interfaceNatMappings:
- natIpPortRanges:
  - <NAT Address IP1>:1024-1055
  numTotalDrainNatPorts: 0
  numTotalNatPorts: 32
  ruleMappings:
  - natIpPortRanges:
    - <NAT Address IP2>:1024-1055
    numTotalDrainNatPorts: 0
    numTotalNatPorts: 32
    ruleNumber: 100
  sourceAliasIpRange: ''
  sourceVirtualIp: 10.0.0.2
- natIpPortRanges:
  - <NAT Address IP1>:32768-32799
  numTotalDrainNatPorts: 0
  numTotalNatPorts: 32
  ruleMappings:
  - natIpPortRanges:
    - <NAT Address IP2>:32768-32799
    numTotalDrainNatPorts: 0
    numTotalNatPorts: 32
    ruleNumber: 100
  sourceAliasIpRange: ''
  sourceVirtualIp: 10.0.0.2

আপনি উপরে যেমন দেখতে পাচ্ছেন, consumer-instance-1 এর ডিফল্ট NAT IP ( nat-address-1 এর IP) এর জন্য এখনও মাত্র ৬৪টি পোর্ট বরাদ্দ করা আছে, কিন্তু NAT রুলের IP ( nat-address-2 এর IP) এর জন্য ১০২৪টি পোর্ট বরাদ্দ করা আছে। এই পুরো সময় জুড়ে consumer-instance-2 তার সমস্ত NAT IP-এর জন্য ডিফল্ট ৬৪টি পোর্ট বরাদ্দ বজায় রেখেছে।

অনুশীলন হিসেবে, আপনি বিপরীত পরিস্থিতিটি পরীক্ষা করে দেখতে পারেন। ক্লাউড ন্যাটকে সমস্ত অতিরিক্ত পোর্ট ডিঅ্যালোকেট করতে দিন, তারপর producerip1 বিপরীতে কার্ল লুপটি চালান এবং get-nat-mapping-info এর আউটপুটে এর প্রভাব পর্যবেক্ষণ করুন।

১০. পরিষ্কার করার পদক্ষেপ

পুনরাবৃত্ত চার্জ এড়াতে এই কোডল্যাবের সাথে যুক্ত সমস্ত রিসোর্স মুছে ফেলুন।

প্রথমে সমস্ত ইনস্ট্যান্স মুছে ফেলুন।

ক্লাউড শেল থেকে:

gcloud compute instances delete consumer-instance-1 consumer-instance-2 \
 producer-instance-1 producer-instance-2 \
 --zone us-east4-a --quiet

প্রত্যাশিত আউটপুট :

Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/consumer-instance-1].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/consumer-instance-2].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/producer-instance-1].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/producer-instance-2].

এরপর, ক্লাউড রাউটারটি ডিলিট করুন। ক্লাউড শেল থেকে:

gcloud compute routers delete consumer-cr \
 --region us-east4 --quiet

আপনি নিম্নলিখিত আউটপুট আশা করতে পারেন:

Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/routers/consumer-cr].

সমস্ত বাহ্যিক আইপি অ্যাড্রেস মুক্ত করুন। ক্লাউড শেল থেকে:

gcloud compute addresses delete nat-address-1 \
 nat-address-2 producer-address-1 \
 producer-address-2 --region us-east4 --quiet

আপনি নিম্নলিখিত আউটপুট আশা করতে পারেন:

Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-1].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-2].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-3].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-1].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-2].

VPC ফায়ারওয়াল নিয়মগুলি মুছে ফেলুন। ক্লাউড শেল থেকে:

gcloud compute firewall-rules delete consumer-allow-iap \
 producer-allow-80 --quiet

আপনি নিম্নলিখিত আউটপুট আশা করতে পারেন:

Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/firewalls/consumer-allow-iap].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/firewalls/producer-allow-80].

সাবনেটগুলি মুছে ফেলুন। ক্লাউড শেল থেকে:

gcloud compute networks subnets delete cons-net-e4 \
 prod-net-e4 --region=us-east4 --quiet

আপনি নিম্নলিখিত আউটপুট আশা করতে পারেন:

Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/cons-net-e4].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/prod-net-e4].

অবশেষে, চলুন VPC-গুলো ডিলিট করে দিই। ক্লাউড শেল থেকে:

gcloud compute networks delete consumer-vpc \
 producer-vpc --quiet

আপনি নিম্নলিখিত আউটপুট আশা করতে পারেন:

Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/networks/consumer-vpc].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/networks/producer-vpc].

১১. অভিনন্দন!

আপনি ক্লাউড ন্যাট ডিপিএ ল্যাব সম্পন্ন করেছেন!

আপনি যা কভার করেছেন

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

পরবর্তী পদক্ষেপ

© গুগল, ইনকর্পোরেটেড অথবা এর অধিভুক্ত সংস্থাসমূহ। সর্বস্বত্ব সংরক্ষিত। বিতরণ করবেন না।