১. সংক্ষিপ্ত বিবরণ
ক্লাউড ন্যাট একটি শক্তিশালী টুল: এর সাহায্যে কম্পিউট ইঞ্জিন এবং গুগল কুবারনেটিস ইঞ্জিন (GKE) ওয়ার্কলোডগুলো এক্সটার্নাল আইপি ব্যবহার করে বাইরের অ্যাক্সেসের কাছে নিজেদের উন্মুক্ত না করেই, পরিমাপযোগ্য ও সুরক্ষিতভাবে ইন্টারনেট রিসোর্স অ্যাক্সেস করতে পারে।
ক্লাউড NAT একটি প্রক্সি-বিহীন ডিজাইন ব্যবহার করে, যা সরাসরি Andromeda SDN লেয়ারে NAT প্রয়োগ করে। ফলে, এটি আপনার ওয়ার্কলোডের পারফরম্যান্সে কোনো প্রভাব ফেলে না এবং অনায়াসে অনেকগুলো VM, রিজিয়ন ও VPC পর্যন্ত স্কেল করতে পারে।
NAT Rules হলো Cloud NAT-এর একটি বর্ধিত অংশ। Cloud NAT-এর এই NAT Rules ফিচারটি আপনাকে এমন অ্যাক্সেস রুল তৈরি করার সুযোগ দেয়, যা নির্ধারণ করে যে ইন্টারনেটে সংযোগ স্থাপনের জন্য Cloud NAT কীভাবে ব্যবহৃত হবে। বর্তমানে, NAT Rules ডেস্টিনেশন অ্যাড্রেসের উপর ভিত্তি করে সোর্স NAT অ্যাড্রেস নির্বাচন সমর্থন করে।
NAT রুলস ছাড়া, ক্লাউড NAT সক্রিয় থাকা একটি VM সমস্ত ইন্টারনেট অ্যাড্রেসে পৌঁছানোর জন্য একই সেট NAT IP অ্যাড্রেস ব্যবহার করে।
কখনও কখনও, কোনো NAT ব্যবহারের ক্ষেত্রে নির্দিষ্ট গন্তব্যের জন্য ক্লাউড NAT-কে ভিন্ন ভিন্ন সোর্স আইপি অ্যাড্রেস ব্যবহার করতে হয়। একটি NAT রুল একটি ম্যাচ এবং তার সাথে সম্পর্কিত একটি অ্যাকশন নির্ধারণ করে। একবার আপনি NAT রুলগুলো নির্দিষ্ট করে দিলে, প্যাকেটটিকে প্রতিটি NAT রুলের সাথে মেলানো হয়। যদি কোনো রুল মিলে যায়, তাহলে সেই মিলের সাথে সম্পর্কিত অ্যাকশনটি সংঘটিত হয়।
NAT নিয়মাবলী সম্পর্কে আরও তথ্যের জন্য অনুগ্রহ করে ডকুমেন্টেশন বিভাগটি পর্যালোচনা করুন।
আপনি যা শিখবেন
- NAT নিয়মের প্রস্তুতির জন্য কীভাবে একটি ক্লাউড NAT গেটওয়ে সেট আপ করবেন।
- কমন এক্সপ্রেশন ল্যাঙ্গুয়েজ (CEL) ব্যবহার করে কীভাবে NAT রুল ডিজাইন করতে হয়।
- কীভাবে NAT রুল তৈরি করবেন এবং সেগুলোকে NAT গেটওয়ের সাথে সংযুক্ত করবেন।
- একটি ইনস্ট্যান্স থেকে কীভাবে NAT নিয়মগুলি পরীক্ষা করবেন
- একটি NAT গেটওয়ের নিয়মাবলী কীভাবে আপডেট করবেন।
- কীভাবে NAT নিয়মগুলি মুছে ফেলবেন এবং ক্লাউড NAT-এর ডিফল্ট আচরণে ফিরে যাবেন
আপনার যা যা লাগবে
- গুগল কম্পিউট ইঞ্জিন সম্পর্কে প্রাথমিক জ্ঞান
- নেটওয়ার্কিং এবং TCP/IP সম্পর্কে প্রাথমিক জ্ঞান
- ইউনিক্স/লিনাক্স কমান্ড লাইনের প্রাথমিক জ্ঞান
- GCP-তে নেটওয়ার্কিং বিষয়ক কোনো কোর্স, যেমন ‘নেটওয়ার্কিং ইন গুগল ক্লাউড ল্যাব’, সম্পন্ন করে রাখলে তা সহায়ক হয়।
- ক্লাউড NAT-এর প্রাথমিক ধারণা।
২. গুগল ক্লাউড কনসোল এবং ক্লাউড শেল ব্যবহার করা
এই ল্যাব জুড়ে GCP-এর সাথে যোগাযোগের জন্য আমরা গুগল ক্লাউড কনসোল এবং ক্লাউড শেল উভয়ই ব্যবহার করব।
গুগল ক্লাউড কনসোল
ক্লাউড কনসোলটি https://console.cloud.google.com ঠিকানায় পাওয়া যাবে।

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



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

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

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

৪. বাহ্যিক আইপি ঠিকানা সংরক্ষণ করুন
এই ল্যাবে ব্যবহারের জন্য সমস্ত এক্সটার্নাল আইপি অ্যাড্রেস রিজার্ভ করে রাখা যাক। এটি আপনাকে কনজিউমার এবং প্রোডিউসার উভয় ভিপিসি-তেই সমস্ত প্রাসঙ্গিক ন্যাট (NAT) এবং ফায়ারওয়াল রুল লিখতে সাহায্য করবে।
ক্লাউড শেল থেকে:
gcloud compute addresses create nat-address-1 nat-address-2 nat-address-3 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/nat-address-3]. 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 natip3=`gcloud compute addresses list --filter name:nat-address-3 --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> natip3=<NAT IP 3>
৫. প্রোডিউসার ভিপিসি এবং ইনস্ট্যান্স সেটআপ।
আমরা এখন প্রডিউসার রিসোর্সগুলো তৈরি করব। প্রডিউসার ভিপিসিতে চলমান ইনস্ট্যান্সগুলো 'প্রডিউসার-অ্যাড্রেস-১' এবং 'প্রডিউসার-অ্যাড্রেস-২' নামক দুটি পাবলিক আইপি ব্যবহার করে ইন্টারনেট-মুখী পরিষেবা প্রদান করবে।
প্রথমে 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 producer-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/producer-e4]. NAME REGION NETWORK RANGE producer-e4 us-east4 producer-vpc 10.0.0.0/24
এরপরে, NAT IP অ্যাড্রেসগুলোকে পোর্ট 8080-এ প্রডিউসার ইনস্ট্যান্সগুলোতে পৌঁছানোর অনুমতি দেওয়ার জন্য VPC ফায়ারওয়াল নিয়ম তৈরি করতে হবে।
প্রথম নিয়মটির জন্য, ক্লাউড শেল থেকে:
gcloud compute firewall-rules create producer-allow-8080 \ --network producer-vpc --allow tcp:8080 \ --source-ranges $natip1,$natip2,$natip3
আউটপুট:
Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/firewalls/producer-allow-8080]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED producer-allow-8080 producer-vpc INGRESS 1000 tcp:8080 False
পরবর্তী ধাপ হলো দুটি প্রডিউসার ইনস্ট্যান্স তৈরি করা।
প্রডিউসার ইনস্ট্যান্সগুলো ডকার হাবে উপলব্ধ একটি ডকার কন্টেইনারে একটি আইপি ইকো সার্ভিস চালাবে (সোর্স কোডটি সার্ভিসটির লেখকের গিটহাব রিপোজিটরিতে পাওয়া যাবে)।
ইনস্ট্যান্সগুলোতে দ্রুত প্রয়োজনীয় সকল সফটওয়্যার সরবরাহ করার জন্য, আমরা কম্পিউট ইঞ্জিন ফিচারের কন্টেইনার ডেপ্লয়মেন্ট ব্যবহার করব।
NAT রুল লেখার সুবিধার্থে, আমরা প্রতিটি ইনস্ট্যান্সকে একটি ভিন্ন সংরক্ষিত আইপি অ্যাড্রেস প্রদান করব।
প্রথম ইনস্ট্যান্সটি তৈরি করুন। ক্লাউড শেল থেকে:
gcloud compute instances create-with-container producer-instance-1 \ --zone=us-east4-a --machine-type=e2-medium \ --network-interface=address=producer-address-1,network-tier=PREMIUM,subnet=producer-e4 \ --container-image=mpolden/echoip --container-restart-policy=always
আউটপুট:
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 IP 1> RUNNING
তারপর দ্বিতীয় ইনস্ট্যান্সটি তৈরি করুন। ক্লাউড শেল থেকে:
gcloud compute instances create-with-container producer-instance-2 \ --zone=us-east4-a --machine-type=e2-medium \ --network-interface=address=producer-address-2,network-tier=PREMIUM,subnet=producer-e4 \ --container-image=mpolden/echoip --container-restart-policy=always
আউটপুট:
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 IP 2> RUNNING
৬. কনজিউমার ভিপিসি, ক্লাউড ন্যাট এবং ইনস্ট্যান্স সেটআপ করুন
এখন যেহেতু আপনি প্রডিউসার সার্ভিসটি তৈরি করে ফেলেছেন, তাই এখন কনজিউমার ভিপিসি এবং এর ক্লাউড ন্যাট গেটওয়ে তৈরি করার পালা।
VPC এবং সাবনেট তৈরি করার পর, আমরা TCP সোর্স IP রেঞ্জগুলোর জন্য IAP অনুমোদনের উদ্দেশ্যে একটি সাধারণ ইনগ্রেস ফায়ারওয়াল রুল যোগ করব। এর ফলে আমরা gcloud ব্যবহার করে সরাসরি কনজিউমার ইনস্ট্যান্সগুলোতে SSH করতে পারব।
এরপর আমরা ম্যানুয়াল অ্যালোকেশন মোডে একটি সাধারণ ক্লাউড NAT গেটওয়ে তৈরি করব এবং এর সাথে '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 producer-vpc --allow tcp:22,tcp:3389,icmp
এরপর, us-east4-এ একটি সাবনেট তৈরি করা যাক। ক্লাউড শেল থেকে:
gcloud compute networks subnets create consumer-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/consumer-e4]. NAME REGION NETWORK RANGE consumer-e4 us-east4 consumer-vpc 10.0.0.0/24
এরপরে, পোর্ট ২২-এ কনজিউমার ইনস্ট্যান্সগুলোতে 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.
কনজিউমার টেস্ট ইনস্ট্যান্সটি তৈরি করুন। আমরা এখানে সংরক্ষিত প্রডিউসার আইপিগুলো পূরণ করি যাতে পরবর্তীতে ইনস্ট্যান্সের মধ্যে সেগুলোকে উল্লেখ করা যায়। ক্লাউড শেল থেকে:
gcloud compute instances create consumer-instance --zone=us-east4-a \ --machine-type=e2-medium --network-interface=subnet=consumer-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]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS consumer-instance us-east4-a e2-medium 10.0.0.2 RUNNING
৭. ডিফল্ট ক্লাউড NAT আচরণ যাচাই করুন
এই পর্যায়ে, কনজিউমার ইনস্ট্যান্সটি ডিফল্ট ক্লাউড NAT আচরণ ব্যবহার করে, যা সমস্ত বাহ্যিক ঠিকানার সাথে যোগাযোগের জন্য একই সংরক্ষিত IP "nat-address-1" ব্যবহার করে।
ক্লাউড NAT-এর নতুন NAT Rules ফিচারটি ব্যবহার করার আগে চলুন প্রথমে এই আচরণটি যাচাই করে নিই।
কনজিউমার ইনস্ট্যান্সে SSH করুন। ক্লাউড শেল থেকে:
gcloud compute ssh consumer-instance --zone=us-east4-a
আপনি এখন ইনস্ট্যান্স শেলে আছেন।
নমুনা আউটপুট (সংক্ষিপ্ততার জন্য সম্পূর্ণ আউটপুট সংক্ষিপ্ত করা হয়েছে)
No zone specified. Using zone [us-east4-a] for instance: [consumer-instance]. External IP address was not found; defaulting to using IAP tunneling. ... ... <username>@consumer-instance:~$
কনজিউমার ইনস্ট্যান্সের ভেতর থেকে, প্রথমে উভয় প্রডিউসার আইপি সংগ্রহ করে সেগুলোকে এনভায়রনমেন্ট ভেরিয়েবল হিসেবে যুক্ত করে নেওয়া যাক।
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:~$ curl http://$producerip1:8080 34.136.8.83 <username>@consumer-instance:~$ curl http://$producerip2:8080 34.136.8.83
আপনি উভয় এন্ডপয়েন্টের জন্য একই আইপি অ্যাড্রেস ফেরত পেতে দেখবেন, যা এক্সটার্নাল রিজার্ভড আইপি "nat-address-1"-এর মানের সমান।
একইভাবে, যেকোনো বাহ্যিক আইপি রিফ্লেক্টর সার্ভিসে কার্ল (curl) করলে একই আইপি দেখা যাবে, উদাহরণস্বরূপ:
<username>@consumer-instance:~$ curl http://ifconfig.co 34.136.8.83 <username>@consumer-instance:~$ curl http://ifconfig.me 34.136.8.83 <username>@consumer-instance:~$ curl http://ip.fyr.io 34.136.8.83
আপাতত ইনস্ট্যান্সটির SSH সেশন থেকে বেরিয়ে যান, NAT রুলস কনফিগার করার পর আমরা আবার SSH করব।
৮. ক্লাউড NAT নিয়ম তৈরি করুন
NAT নিয়মগুলো কমন এক্সপ্রেশন ল্যাঙ্গুয়েজ সিনট্যাক্স ব্যবহার করে লেখা হয়। নিয়ম এক্সপ্রেশন ল্যাঙ্গুয়েজ সম্পর্কে আরও তথ্যের জন্য, নিয়ম এক্সপ্রেশন ল্যাঙ্গুয়েজ দেখুন।
আপনি gcloud কমান্ড ব্যবহার করে একটি বিদ্যমান NAT গেটওয়েতেও NAT রুল যোগ করতে পারেন। আমরা ক্লাউড NAT রুল তৈরি করার উভয় উপায়ই খতিয়ে দেখব।
প্রথমে একটি NAT রুল YAML ফাইল তৈরি করা যাক।
ক্লাউড শেল থেকে:
export projectid=`gcloud config get-value project`
cat <<EOF >natrulesfile.txt
rules:
- ruleNumber: 100
match: destination.ip == '$producerip2'
action:
sourceNatActiveIps:
- /projects/$projectid/regions/us-east4/addresses/nat-address-2
EOF
তাহলে চলুন এই রুল ফাইলটি ব্যবহার করে আমাদের বিদ্যমান NAT গেটওয়ে আপডেট করি। ক্লাউড শেল থেকে:
gcloud alpha compute routers nats update consumer-nat-gw \
--router=consumer-cr \
--rules=natrulesfile.txt \
--router-region=us-east4
আপনি নিম্নলিখিত আউটপুট আশা করতে পারেন:
Updating nat [consumer-nat-gw] in router [consumer-cr]...done.
নিয়মটি সফলভাবে কনফিগার করা হয়েছে কিনা তা যাচাই করুন। ক্লাউড শেল থেকে:
gcloud alpha compute routers nats rules list \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4
আপনি নিম্নলিখিত আউটপুট আশা করতে পারেন:
RULE_NUMBER MATCH 100 destination.ip == '35.192.142.134'
চলুন শুধু gcloud কমান্ড ব্যবহার করে একই নিয়মটি পুনরায় তৈরি করার চেষ্টা করি। প্রথমে বিদ্যমান নিয়মটি মুছে ফেলুন। ক্লাউড শেল থেকে:
gcloud alpha compute routers nats rules delete 100 \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --quiet
আপনি নিম্নলিখিত আউটপুট আশা করতে পারেন:
Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]
তারপর এই gcloud কমান্ডটি ব্যবহার করে নিয়মটি পুনরায় তৈরি করুন। ক্লাউড শেল থেকে:
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
আপনি নিম্নলিখিত আউটপুট আশা করতে পারেন:
Creating Rule [100] in NAT [consumer-nat-gw]...done.
নিয়মটি সফলভাবে তৈরি হয়েছে কিনা তা যাচাই করতে, আগের কমান্ডটি আবার চালান। এবার আমরা নিয়মটির সম্পূর্ণ বিবরণ দেখার জন্য YAML ফরম্যাটিং সুইচটি যোগ করব।
ক্লাউড শেল থেকে:
gcloud alpha compute routers nats rules list\ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --format=yaml
আপনি নিম্নলিখিত আউটপুট আশা করতে পারেন:
--- action: sourceNatActiveIps: - https://www.googleapis.com/compute/alpha/projects/<Project-ID>/regions/us-east4/addresses/nat-address-2 match: destination.ip == <actual IP for producer-IP 2> ruleNumber: 100
অবশেষে, লক্ষ্য করুন যে এখন "nat-address1" এবং "nat-address-2" উভয় এক্সটার্নাল অ্যাড্রেসই "IN_USE" হিসেবে দেখাচ্ছে। তা দেখতে, ক্লাউড শেল থেকে এই কমান্ডটি চালান:
$ gcloud compute addresses list
আপনি নিম্নলিখিত আউটপুটটি আশা করতে পারেন (প্রকৃত আইপি ঠিকানাগুলি আপনার সংরক্ষিত ঠিকানাগুলির সাথে মিলতে হবে):
NAME ADDRESS/RANGE TYPE PURPOSE NETWORK REGION SUBNET STATUS nat-address-1 34.136.8.83 EXTERNAL us-east4 IN_USE nat-address-2 34.70.137.35 EXTERNAL us-east4 IN_USE nat-address-3 34.135.103.88 EXTERNAL us-east4 RESERVED producer-address-1 34.66.0.105 EXTERNAL us-east4 IN_USE producer-address-2 35.192.142.134 EXTERNAL us-east4 IN_USE
৯. ক্লাউড NAT নিয়মের আচরণ যাচাই করুন
এই পর্যায়ে, কনজিউমার ইনস্ট্যান্সটির উচিত তৈরি করা ক্লাউড ন্যাট রুলটি ব্যবহার করে nat-address-2-এর মাধ্যমে producer-address-2-এর সাথে যোগাযোগ করা।
চলুন এই আচরণটি যাচাই করা যাক। কনজিউমার ইনস্ট্যান্সে SSH করুন। ক্লাউড শেল থেকে:
gcloud compute ssh consumer-instance --zone=us-east4-a
আপনি এখন ইনস্ট্যান্স শেলে আছেন।
নমুনা আউটপুট (সংক্ষিপ্ততার জন্য সম্পূর্ণ আউটপুট সংক্ষিপ্ত করা হয়েছে)
No zone specified. Using zone [us-east4-a] for instance: [consumer-instance]. External IP address was not found; defaulting to using IAP tunneling. ... ... <username>@consumer-instance:~$
কনজিউমার ইনস্ট্যান্সের ভেতর থেকে, প্রথমে উভয় প্রডিউসার আইপি সংগ্রহ করে সেগুলোকে এনভায়রনমেন্ট ভেরিয়েবল হিসেবে যুক্ত করে নেওয়া যাক।
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:~$ curl http://$producerip1:8080 34.136.8.83 <username>@consumer-instance:~$ curl http://$producerip2:8080 34.70.137.35
এখন আপনি উভয় এন্ডপয়েন্টের জন্য একটি ভিন্ন আইপি অ্যাড্রেস দেখতে পাবেন, প্রথম আইপি অ্যাড্রেসটি ডিফল্ট আচরণের মতোই থাকবে। নতুন NAT নিয়মটি যুক্ত করার পর দ্বিতীয় আইপি অ্যাড্রেসটি "nat-address-2"-এর সমান হবে।
যেকোনো এক্সটার্নাল আইপি রিফ্লেক্টর সার্ভিসে কার্ল (curl) করলে ডিফল্ট আচরণের মতোই একই আইপি দেখানো উচিত, উদাহরণস্বরূপ:
<username>@consumer-instance:~$ curl http://ifconfig.co 34.136.8.83 <username>@consumer-instance:~$ curl http://ifconfig.me 34.136.8.83 <username>@consumer-instance:~$ curl http://ip.fyr.io 34.136.8.83
আপাতত ইনস্ট্যান্সটির SSH সেশন থেকে বেরিয়ে যান, আমরা অ্যাড্রেস ড্রেনিং পরীক্ষা করার জন্য আবার SSH করব।
১০. ক্লাউড NAT নিয়মগুলি আপডেট এবং ডিলিট করুন
আপনি বিদ্যমান ক্লাউড ন্যাট (Cloud NAT) নিয়মগুলো আপডেট করতে পারেন। উদাহরণস্বরূপ, আপনি নতুন আইপি অ্যাড্রেস যুক্ত করতে এবং বিদ্যমান নিয়মগুলোর সাথে যুক্ত আইপি অ্যাড্রেসগুলো বাতিল করতে পারেন।
চলুন NAT Rules ফাইলটি নিম্নরূপভাবে আপডেট করি।
ক্লাউড শেল থেকে:
export projectid=`gcloud config get-value project`
cat <<EOF >natrulesfile.txt
rules:
- ruleNumber: 100
match: destination.ip == '$producerip2'
action:
sourceNatDrainIps:
- /projects/$projectid/regions/us-east4/addresses/nat-address-2
sourceNatActiveIps:
- /projects/$projectid/regions/us-east4/addresses/nat-address-3
EOF
এই নতুন ফাইলটি এখন 'nat-address-2'-কে একটি নিষ্ক্রিয় অবস্থায় রাখে এবং 'nat-address-3'-কে সক্রিয় অবস্থায় যুক্ত করে। এর ফলে nat-address-2 ব্যবহারকারী বিদ্যমান সংযোগগুলো স্বাভাবিকভাবে বন্ধ হয়ে যাবে এবং নতুন সংযোগগুলো শুধুমাত্র nat-address-3 ব্যবহার করে তৈরি হবে।
তাহলে চলুন এই রুল ফাইলটি ব্যবহার করে আমাদের বিদ্যমান NAT গেটওয়ে আপডেট করি। ক্লাউড শেল থেকে:
gcloud alpha compute routers nats update consumer-nat-gw \
--router=consumer-cr \
--rules=natrulesfile.txt \
--router-region=us-east4
আপনি নিম্নলিখিত আউটপুট আশা করতে পারেন:
Updating nat [consumer-nat-gw] in router [consumer-cr]...done.
নিয়মটি সফলভাবে কনফিগার করা হয়েছে কিনা তা যাচাই করুন। ক্লাউড শেল থেকে:
gcloud alpha compute routers nats rules list \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --format=yaml
আপনি নিম্নলিখিত আউটপুট আশা করতে পারেন:
--- action: sourceNatActiveIps: - https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-3 sourceNatDrainIps: - https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-2 match: destination.ip == '35.192.142.134' ruleNumber: 100
লক্ষ্য করুন, কীভাবে "nat-address-2"-কে এখন একটি ড্রেইনড অবস্থায় রাখা হয়েছে। কনজিউমার VPC থেকে আসা নতুন সংযোগগুলো এখন সঠিক NAT IP ব্যবহার করছে কি না, তা যাচাই করার দায়িত্ব আমরা আপনার উপর ছেড়ে দিচ্ছি।
অবশেষে, আপনার ক্লাউড NAT গেটওয়ে থেকে NAT নিয়মগুলি মুছে ফেলতে এবং ডিফল্ট আচরণে ফিরে যেতে, আপনি নিম্নলিখিত gcloud কমান্ডটি ব্যবহার করতে পারেন। ক্লাউড শেল থেকে:
gcloud alpha compute routers nats rules delete 100 \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --quiet
আপনি নিম্নলিখিত আউটপুট আশা করতে পারেন:
Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]
আর কোনো NAT রুল নেই তা যাচাই করতে, চলুন NAT gateway describe কমান্ডটি ব্যবহার করি।
gcloud alpha compute routers nats describe consumer-nat-gw \ --router=consumer-cr --router-region=us-east4
আপনি নিম্নলিখিত আউটপুট আশা করতে পারেন:
enableEndpointIndependentMapping: false name: consumer-nat-gw natIpAllocateOption: MANUAL_ONLY natIps: - https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-1 sourceSubnetworkIpRangesToNat: ALL_SUBNETWORKS_ALL_IP_RANGES
লক্ষ্য করুন, আউটপুট YAML-এ কোনো 'rules:' সেকশন নেই। যা নির্দেশ করে যে কোনো NAT রুল কনফিগার করা হয়নি।
১১. পরিষ্কার করার পদক্ষেপ
পুনরাবৃত্ত চার্জ এড়াতে এই কোডল্যাবের সাথে যুক্ত সমস্ত রিসোর্স মুছে ফেলুন।
প্রথমে সমস্ত ইনস্ট্যান্স মুছে ফেলুন।
ক্লাউড শেল থেকে:
gcloud compute instances delete consumer-instance \ 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]. 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 nat-address-3 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-8080 --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-8080].
সাবনেটগুলি মুছে ফেলুন। ক্লাউড শেল থেকে:
gcloud compute networks subnets delete consumer-e4 \ producer-e4 --region=us-east4 --quiet
আপনি নিম্নলিখিত আউটপুট আশা করতে পারেন:
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/consumer-e4]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/producer-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 নিয়মের প্রস্তুতির জন্য কীভাবে একটি ক্লাউড NAT গেটওয়ে সেট আপ করবেন।
- কমন এক্সপ্রেশন ল্যাঙ্গুয়েজ (CEL) ব্যবহার করে কীভাবে NAT রুল ডিজাইন করতে হয়।
- কীভাবে NAT রুল তৈরি করবেন এবং সেগুলোকে NAT গেটওয়ের সাথে সংযুক্ত করবেন।
- একটি ইনস্ট্যান্স থেকে কীভাবে NAT নিয়মগুলি পরীক্ষা করবেন
- একটি NAT গেটওয়ের নিয়মাবলী কীভাবে আপডেট করবেন।
- কীভাবে NAT নিয়মগুলি মুছে ফেলবেন এবং ক্লাউড NAT-এর ডিফল্ট আচরণে ফিরে যাবেন
পরবর্তী পদক্ষেপ
- এই উদাহরণের মতো আরও জটিল NAT নিয়ম তৈরি করে পরীক্ষা করুন।
- NAT IP অ্যাড্রেস নিষ্কাশন করার বিষয়টি খতিয়ে দেখুন এবং সংযোগের উপর এর প্রভাব পর্যবেক্ষণ করুন।
- গুগল ক্লাউড প্ল্যাটফর্মে নেটওয়ার্কিং সম্পর্কে আরও জানুন
© গুগল, ইনকর্পোরেটেড অথবা এর অধিভুক্ত সংস্থাসমূহ। সর্বস্বত্ব সংরক্ষিত। বিতরণ করবেন না।