1. खास जानकारी
डाइनैमिक पोर्ट ऐलोकेशन (डीपीए), Cloud NAT में एक नई सुविधा है. डीपीए की सुविधा चालू होने पर Cloud NAT, ज़रूरत के हिसाब से इंस्टेंस के लिए पोर्ट ऐलोकेशन को डाइनैमिक तौर पर घटाता-बढ़ाता है. डीपीए को पोर्ट करने की कम से कम और ज़्यादा से ज़्यादा सीमाओं के साथ कॉन्फ़िगर किया जाता है, ताकि यह पोर्ट को कभी भी सबसे कम संख्या से कम या उससे ज़्यादा न बढ़ा सके. इसकी मदद से, NAT गेटवे के पीछे मौजूद कुछ इंस्टेंस, डाइनैमिक तरीके से अपने कनेक्शन की संख्या को बढ़ा पाते हैं. इसके लिए, Cloud NAT के लिए सभी इंस्टेंस के लिए ज़्यादा पोर्ट तय करने की ज़रूरत नहीं होती.
डीपीए के बिना, Cloud NAT के लिए बने सभी इंस्टेंस को समान संख्या में पोर्ट असाइन किए जाते हैं, भले ही उनका इस्तेमाल किसी भी तरह से किया गया हो. ऐसा minPortsPerVm
पैरामीटर के मुताबिक किया जाता है.
ज़्यादा जानकारी के लिए, कृपया एनएटी डीपीए के बारे में दस्तावेज़ वाला सेक्शन देखें.
आपको इनके बारे में जानकारी मिलेगी
- डीपीए की तैयारी करने के लिए Cloud NAT गेटवे सेट अप करने का तरीका.
- डीपीए के बिना पोर्ट ऐलोकेशन की जांच करने का तरीका.
- एनएटी गेटवे के लिए डीपीए को चालू और कॉन्फ़िगर करने का तरीका.
- पैरलल इग्रेस कनेक्शन चलाकर डीपीए के असर का पता लगाने का तरीका.
- डीपीए की सुविधा वाले NAT गेटवे में, NAT के नियम जोड़ने का तरीका.
- एक से ज़्यादा डेस्टिनेशन के लिए इग्रेस डेटा ट्रैफ़िक चलाकर, नियमों के साथ डीपीए के व्यवहार को देखने का तरीका.
आपको इनकी ज़रूरत होगी
- Google Compute Engine की बुनियादी जानकारी
- बुनियादी नेटवर्किंग और टीसीपी/आईपी की जानकारी
- Unix/Linux कमांड लाइन के बारे में बुनियादी जानकारी
- Google Cloud में नेटवर्किंग के टूर, जैसे कि Google Cloud में नेटवर्किंग लैब के टूर को पूरा करने से हमें मदद मिलती है.
- 'ऐल्फ़ा ऐक्सेस' वाला Google Cloud प्रोजेक्ट चालू किया गया.
- Cloud NAT की बुनियादी बातों को समझना.
2. Google Cloud Console और Cloud Shell का इस्तेमाल करना
GCP के साथ इंटरैक्ट करने के लिए, हम इस पूरी लैब में Google Cloud Console और Cloud Shell, दोनों का इस्तेमाल करेंगे.
Google Cloud कंसोल
Cloud Console पर जाने के लिए, https://console.cloud.google.com पर जाएं.
अपने हिसाब से एनवायरमेंट सेटअप करना
- Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको नया खाता बनाना होगा.
- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों का डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. साथ ही, आप इसे किसी भी समय अपडेट कर सकते हैं.
- प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होना चाहिए. साथ ही, आईडी को बदला नहीं जा सकता. सेट अप के बाद इसे बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है; आम तौर पर, आपको उसके होने की कोई परवाह नहीं होती. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना पड़ता है और आम तौर पर इसकी पहचान
PROJECT_ID
के रूप में की जाती है. इसलिए, अगर आपको यह पसंद नहीं आता है, तो कोई भी कोड जनरेट करें. इसके अलावा, खुद का भी कोड बनाकर देखा जा सकता है कि वह उपलब्ध है या नहीं. फिर यह "फ़्रोज़न" होता है प्रोजेक्ट बनने के बाद. - तीसरी वैल्यू, प्रोजेक्ट नंबर है, जिसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
- इसके बाद, आपको क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा किसी अन्य प्लैटफ़ॉर्म पर बिलिंग न करने के लिए, संसाधनों को बंद करने के लिए, "साफ़-सफ़ाई" का पालन करें कोडलैब के आखिर में दिए गए निर्देश देखें. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.
Cloud Shell शुरू करना
Google Cloud को आपके लैपटॉप से, कहीं से भी ऑपरेट किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जा रहा है. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.
GCP कंसोल में, सबसे ऊपर दाईं ओर मौजूद टूलबार पर क्लाउड शेल आइकॉन पर क्लिक करें:
प्रावधान करने और एनवायरमेंट से कनेक्ट होने में कुछ ही समय लगेगा. उसके पूरा हो जाने पर, आपको कुछ ऐसा दिखाई देगा:
इस वर्चुअल मशीन में ऐसे सभी डेवलपमेंट टूल मौजूद हैं जिनकी आपको ज़रूरत पड़ेगी. यह पांच जीबी की स्थायी होम डायरेक्ट्री उपलब्ध कराता है और Google Cloud पर चलता है. यह नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रक्रिया को बेहतर बनाता है. इस लैब में आपका सारा काम बस एक ब्राउज़र से किया जा सकता है.
3. लैब का सेटअप
इस लैब के लिए, आपको एक प्रोजेक्ट का इस्तेमाल करना होगा और हर एक में सबनेट के साथ दो VPC बनाने होंगे. आपको बाहरी आईपी पते को सुरक्षित रखना होगा. इसके बाद, Cloud NAT गेटवे (Cloud राऊटर के साथ) और दो प्रोड्यूसर इंस्टेंस बनाकर उन्हें कॉन्फ़िगर करना होगा. Cloud NAT के डिफ़ॉल्ट तरीके की पुष्टि करने के बाद, डाइनैमिक पोर्ट ऐलोकेशन को चालू किया जा सकेगा और इसके काम करने के तरीके की पुष्टि की जा सकेगी. आखिर में, आपको एनएटी के नियमों को कॉन्फ़िगर करना होगा और डीपीए और एनएटी के नियमों के बीच इंटरैक्शन पर नज़र रखनी होगी.
नेटवर्किंग आर्किटेक्चर की खास जानकारी:
4. बाहरी आईपी पते रिज़र्व करें
आइए इस लैब में उपयोग किए जाने वाले सभी बाहरी IP पतों को सुरक्षित रखें. इससे आपको उपभोक्ता और निर्माता दोनों के VPC में, NAT और फ़ायरवॉल के ज़रूरी नियम लिखने में मदद मिलेगी.
Cloud Shell से:
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>
5. प्रोड्यूसर के VPC और इंस्टेंस का सेटअप.
अब हम प्रोड्यूसर के लिए संसाधन बनाएंगे. प्रोड्यूसर VPC में चल रहे इंस्टेंस, दो सार्वजनिक आईपी "प्रोड्यूसर-पता-1" का इस्तेमाल करके इंटरनेट पर सेवा देने वाली सेवा देंगे और "प्रोड्यूसर का पता-2" को अपनाएं.
आइए, सबसे पहले VPC बनाते हैं. Cloud Shell से:
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 में सबनेट बनाते हैं. Cloud Shell से:
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 आईपी पतों को पोर्ट 8080 पर प्रोड्यूसर के इंस्टेंस तक पहुंचने की अनुमति देने के लिए, VPC फ़ायरवॉल के नियम बनाते हैं.
पहले नियम के लिए, Cloud Shell से:
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 प्रॉक्सी डिप्लॉयमेंट को चलाएंगे.
सभी ज़रूरी सॉफ़्टवेयर के लिए, इंस्टेंस का प्रावधान तुरंत करने के लिए, हम एक स्टार्ट-अप स्क्रिप्ट के साथ इंस्टेंस बनाएंगे. यह स्क्रिप्ट, Debian APT पैकेज मैनेजर का इस्तेमाल करके, nginx को इंस्टॉल करेगी.
NAT नियम लिखने में सक्षम होने के लिए, हम हर इंस्टेंस को एक अलग आरक्षित आईपी पते के साथ प्रावधान करेंगे.
पहला इंस्टेंस बनाएं. Cloud Shell से:
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
इसके बाद, दूसरा इंस्टेंस बनाएं. Cloud Shell से:
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
6. कंज़्यूमर VPC, Cloud NAT, और इंस्टेंस सेटअप करें
आपने प्रोड्यूसर सेवा बना ली है, इसलिए अब उपभोक्ता VPC और इसका Cloud NAT गेटवे बनाएं.
VPC और सबनेट बनाने के बाद, हम आसान इन्ग्रेस फ़ायरवॉल के नियम जोड़ेंगे, ताकि आईएपी को टीसीपी सोर्स की आईपी रेंज के लिए अनुमति दी जा सके. इससे हम, gcloud का इस्तेमाल करके सीधे तौर पर ग्राहकों के लिए एसएसएच का इस्तेमाल कर पाएंगे.
इसके बाद, हम मैन्युअल ऐलोकेशन मोड और रिज़र्व किए गए पते "nat-address-1" में एक आसान Cloud NAT गेटवे बनाएंगे से जुड़ी हुई हैं. कोडलैब के बाद के हिस्सों में, हम गेटवे के कॉन्फ़िगरेशन को अपडेट करेंगे, ताकि डाइनैमिक पोर्ट ऐलोकेशन को चालू किया जा सके और बाद में कस्टम नियम जोड़ा जा सके.
आइए, सबसे पहले VPC बनाते हैं. Cloud Shell से:
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 में सबनेट बनाते हैं. Cloud Shell से:
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
अब हम VPC फ़ायरवॉल के नियम बनाते हैं, ताकि IAP रेंज के पतों को पोर्ट 22 पर उपभोक्ताओं के इंस्टेंस तक पहुंचने में मदद मिल सके.
फ़ायरवॉल के पहले नियम के लिए, Cloud Shell से इन्हें चलाएं:
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 नंबर का उपयोग करते हैं, लेकिन इस लैब की गतिविधियों के लिए यह प्रासंगिक नहीं है). Cloud Shell से:
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 गेटवे इंस्टेंस बनाएं. Cloud Shell से:
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.
ध्यान दें कि डिफ़ॉल्ट रूप से, Cloud NAT गेटवे minPortsPerVm
को 64 पर सेट करके बनाया जाता है
उपभोक्ता टेस्ट के इंस्टेंस बनाएं. हम रिज़र्व किए गए प्रोड्यूसर आईपी को यहां अपने-आप भरते हैं, ताकि बाद में इंस्टेंस में उनका इस्तेमाल किया जा सके. Cloud Shell से:
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
7. Cloud NAT के डिफ़ॉल्ट व्यवहार की पुष्टि करें
इस समय, उपभोक्ता के इंस्टेंस, Cloud NAT के डिफ़ॉल्ट तरीके का इस्तेमाल करते हैं. इसमें एक ही रिज़र्व आईपी "nat-address-1" का इस्तेमाल किया जाता है सभी बाहरी पतों से संपर्क करने के लिए. Cloud NAT में अभी तक डीपीए चालू नहीं है.
नीचे दिए गए निर्देश की मदद से, आइए पुष्टि करें कि Cloud NAT ने हमारे उपभोक्ताओं के इंस्टेंस असाइन किए हैं या नहीं
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
जैसा कि ऊपर दिए गए आउटपुट में देखा जा सकता है कि Cloud NAT ने एक ही एक्सटर्नल आईपी nat-address-1
से हर इंस्टेंस को 64 पोर्ट दिए हैं
डीपीए को चालू करने से पहले यह देखते हैं कि हम साथ-साथ कितने कनेक्शन खोल सकते हैं.
एसएसएच का इस्तेमाल, ग्राहक के पहले इंस्टेंस में किया गया. Cloud Shell से:
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"`
इसके बाद, दोनों प्रोड्यूसर को कर्ल करने की कोशिश करें, ताकि हम उन तक सही तरीके से पहुंच सकें.
<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>
अब आइए, लूप के ज़रिए कर्ल चलाकर किसी एक प्रोड्यूसर के इंस्टेंस के साथ कई पैरलल कनेक्शन बनाते हैं. स्मरण करें कि Cloud NAT 2 मिनट के लिए बंद सॉकेट का फिर से इस्तेमाल करने की अनुमति नहीं देता है. इसलिए, अगर हम दो मिनट के अंदर सभी कनेक्शन की कोशिशों को लूप में ले जाते हैं, तो हम इस तरह पैरलल कनेक्शन को सिम्युलेट कर सकते हैं.
इंस्टेंस एसएसएच सेशन में यहां दिया गया कमांड चलाएं
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
आप 64 समानांतर कनेक्शन में सफल होने की उम्मीद करेंगे और स्क्रिप्ट को नीचे दिए गए
Connection # 64 successful Loop Done, Sleeping for 150s Connection # 64 successful Loop Done, Sleeping for 150s
यह देखने के लिए कि हम 64 समानांतर कनेक्शन से आगे नहीं जा सकते, सभी पुराने सॉकेट को साफ़ करने की अनुमति देने के लिए सबसे पहले 2 मिनट इंतज़ार करें. इसके बाद, उसी एक लाइनर में बदलाव करके इसे फिर से चलाएं
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
इससे पता चलता है कि पहले 64 कनेक्शन सफल रहे, लेकिन बाकी के छह कनेक्शन, पोर्ट उपलब्ध न होने की वजह से पूरे नहीं हो सके.
हमें इसके बारे में कुछ करना होगा. इसके बाद, एसएसएच शेल से बाहर निकलें और नीचे दिए गए हिस्से में डीपीए चालू करें.
8. डीपीए चालू करें और इसके काम करने के तरीके की पुष्टि करें
यहां दिए गए gcloud कमांड चलाएं, जिससे डीपीए चालू होता है. साथ ही, यह हर वीएम के लिए पोर्ट ऐलोकेशन को कम से कम 64 और ज़्यादा से ज़्यादा पोर्ट ऐलोकेशन को 1024 पर सेट करता है.
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
को फिर से चलाकर यह पुष्टि करें कि दोनों इंस्टेंस में अब भी सिर्फ़ 64 पोर्ट असाइन किए गए हैं
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 ...
पोर्ट ऐलोकेशन के मामले में ज़्यादा बदलाव नहीं हुआ है, क्योंकि इंस्टेंस अभी तक किसी पोर्ट का इस्तेमाल नहीं कर रहा है.
आइए, एसएसएच से मिले उदाहरण की बात करें:
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
यहां क्या हुआ? Cloud NAT, पोर्ट के इस्तेमाल में बढ़ोतरी होने पर पोर्ट ऐलोकेशन को प्राथमिकता देता है. हालांकि, पूरी नेटवर्किंग लेयर के हिसाब से इसे प्रोग्राम करने में कुछ समय लगता है. इसलिए, कनेक्शन की बाकी सभी कोशिशें पूरी करने से पहले, हमें एक से तीन टाइम आउट दिखते हैं.
हमने कर्ल के लिए एक एग्रेसिव टाइम आउट (पांच सेकंड) तय किया है, लेकिन डीपीए के पोर्ट ऐलोकेशन को बढ़ाने के दौरान, ज़्यादा टाइम आउट वाले ऐप्लिकेशन के पास कनेक्शन पूरा करने में मदद होनी चाहिए.
जब हम इस तरह की 1024 कनेक्शन कोशिशों के लिए लूप चलाते हैं, तब रैंप अप के इस व्यवहार को ज़्यादा साफ़ तौर पर देखा जा सकता है
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
Cloud NAT, पोर्ट को 2 की पावर में बांटता है, इसलिए हर चरण में बजट को दोगुना कर दिया जाता है. इस वजह से, हमें पता चलता है कि कनेक्शन टाइम आउट को 64 से 1024 के बीच की 2 पावर के लिए हाइलाइट किया गया है.
हमने maxPortsPerVM
को 1024 पर सेट कर दिया है. इसलिए, यह उम्मीद नहीं है कि हम 1024 से ज़्यादा कनेक्शन कर पाएंगे. पुराने पोर्ट को रीसेट करने के लिए 2 मिनट इंतज़ार करने के बाद, हम 1024 से ज़्यादा संख्या के साथ कर्ल लूप को फिर से चलाकर इसकी जांच कर सकते हैं.
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
उम्मीद के मुताबिक, आउटपुट में 1024 के बाद वाले कनेक्शन के फ़ेल होने की शुरुआत होती है
<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 पर सेट करके, हमने Cloud NAT को यह निर्देश दिया है कि वह हर वीएम के लिए 1024 के बाद के पोर्ट ऐलोकेशन को स्केल न करे.
एसएसएच सेशन से बाहर निकलने और 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
में 1024 पोर्ट कैसे असाइन किए गए हैं, लेकिन consumer-instance-2
को सिर्फ़ 64 पोर्ट असाइन किए गए हैं. डीपीए के पहले ऐसा करना आसान नहीं था. साथ ही, यह असल में क्लाउड एनएटी के लिए डीपीए की क्षमता को हाइलाइट करता है.
अगर get-nat-mapping-info
कमांड को फिर से चलाने से पहले दो मिनट इंतज़ार करते हैं, तो आपको दिखेगा कि consumer-instance-1
, 64 पोर्ट के अपने कम से कम मान पर वापस आ गया है. यह इलस्ट्रेशन न सिर्फ़ पोर्ट एलोकेशन को बढ़ाने की डीपीए की क्षमता को दिखाता है, बल्कि उसी एनएटी गेटवे के पीछे के अन्य इंस्टेंस की मदद से, इस्तेमाल न होने पर उन्हें रिलीज़ भी कर देता है.
9. डीपीए की मदद से Cloud NAT के नियमों की जांच करना
हमने हाल ही में, Cloud NAT के लिए एनएटी के नियमों की सुविधा भी रिलीज़ की है. इससे ग्राहकों को ऐसे नियम लिखने की सुविधा मिलती है जो कुछ बाहरी डेस्टिनेशन के लिए, खास NAT आईपी का इस्तेमाल करते हैं. ज़्यादा जानकारी के लिए, कृपया एनएटी के नियमों का दस्तावेज़ पेज देखें.
इस प्रैक्टिस में हमने देखा कि डीपीए और एनएटी के नियमों के बीच क्या असर पड़ रहा है. चलिए, producer-address-2
को ऐक्सेस करते समय nat-address-2
का इस्तेमाल करने के लिए, सबसे पहले NAT नियम तय करते हैं.
नीचे दिया गया 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
के लिए अतिरिक्त पोर्ट हैं. पोर्ट की वैल्यू 64 है, जिसके बारे में कम से कम बताया गया है.
अगर कोई इंस्टेंस, NAT नियम के मुताबिक तय किए गए डेस्टिनेशन से कई कनेक्शन खोलता है, तो क्या होगा? Let's find out.
आइए, एसएसएच से मिले उदाहरण की बात करें:
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
असल में, यह पिछले टेस्ट का डुप्लीकेट वर्शन होता है. इंस्टेंस के एसएसएच सेशन से बाहर निकलें और नैट मैपिंग देखें.
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 आईपी ( nat-address-1
के लिए आईपी) में अब भी सिर्फ़ 64 पोर्ट हैं, लेकिन NAT नियम के आईपी (nat-address-2
के लिए IP) में 1024 पोर्ट हैं. इस दौरान, consumer-instance-2
ने सभी एनएटी (NAT) आईपी के लिए, डिफ़ॉल्ट तौर पर 64 पोर्ट का बंटवारा किया.
कसरत के तौर पर, रिवर्स केस की जांच की जा सकती है. Cloud NAT को सभी अतिरिक्त पोर्ट हटाने दें. इसके बाद, producerip1
पर कर्ल लूप चलाएं और get-nat-mapping-info
के आउटपुट पर पड़ने वाले असर के बारे में जानें
10. क्लीनअप के चरण
बार-बार लगने वाले शुल्कों से बचने के लिए, आपको इस कोडलैब के साथ जुड़े सभी संसाधनों को मिटा देना चाहिए.
पहले सभी इंस्टेंस मिटाएं.
Cloud Shell से:
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].
इसके बाद, क्लाउड राऊटर मिटाएं. Cloud Shell से:
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].
सभी एक्सटर्नल आईपी पते रिलीज़ करें. Cloud Shell से:
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 फ़ायरवॉल के नियम मिटाएं. Cloud Shell से:
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].
सबनेट मिटाएं. Cloud Shell से:
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 को मिटा देते हैं. Cloud Shell से:
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].
11. बधाई हो!
आपने Cloud NAT डीपीए लैब पूरा कर लिया है!
आपने क्या कवर किया
- डीपीए की तैयारी करने के लिए Cloud NAT गेटवे सेट अप करने का तरीका.
- डीपीए के बिना पोर्ट ऐलोकेशन की जांच करने का तरीका.
- एनएटी गेटवे के लिए डीपीए को चालू और कॉन्फ़िगर करने का तरीका.
- पैरलल इग्रेस कनेक्शन चलाकर डीपीए के असर का पता लगाने का तरीका.
- डीपीए की सुविधा वाले NAT गेटवे में, NAT के नियम जोड़ने का तरीका.
- एक से ज़्यादा डेस्टिनेशन के लिए इग्रेस डेटा ट्रैफ़िक चलाकर, नियमों के साथ डीपीए के व्यवहार को देखने का तरीका.
अगले चरण
- डाइनैमिक पोर्ट ऐलोकेशन का दस्तावेज़ पेज ब्राउज़ करें
- अपने ऐप्लिकेशन के साथ NAT टाइम आउट और पोर्ट ऐलोकेशन वैल्यू में बदलाव करके एक्सपेरिमेंट करें.
- Google Cloud Platform पर नेटवर्किंग के बारे में ज़्यादा जानें
©Google, Inc. या इसके सहयोगी. सभी अधिकार सुरक्षित हैं. डिस्ट्रिब्यूट न करें.