Cloud NAT NAT के नियमों का इस्तेमाल करना

1. खास जानकारी

Cloud NAT एक बेहतरीन टूल है: इसकी मदद से, Compute Engine और Google Kubernetes Engine (GKE) के वर्कलोड, इंटरनेट संसाधनों को बड़े और सुरक्षित तरीके से ऐक्सेस कर सकते हैं. ऐसा करने से, इन संसाधनों पर चल रहे वर्कलोड को बाहरी आईपी की मदद से, बाहरी आईपी की मदद से ऐक्सेस किए बिना भी इन्हें ऐक्सेस नहीं किया जा सकता.

Cloud NAT में प्रॉक्सी-लेस डिज़ाइन है, जो NAT को सीधे एंड्रोमेडा एसडीएन लेयर में लागू करता है. ऐसा करने से, आपके वर्कलोड पर कोई असर नहीं पड़ता है और यह कई वीएम, रीजन, और VPC के साथ आसानी से जुड़ जाता है.

NAT नियम, क्लाउड NAT का एक एक्सटेंशन हैं. Cloud NAT में NAT रूल इस्तेमाल करने की सुविधा, आपको ऐक्सेस के नियम बनाने की सुविधा देती है. इससे यह तय होता है कि इंटरनेट से कनेक्ट होने के लिए, Cloud NAT का इस्तेमाल कैसे किया जाएगा. फ़िलहाल, NAT के नियमों के तहत, डेस्टिनेशन के पते के आधार पर सोर्स NAT का पता चुना जा सकता है.

NAT के नियमों के बिना, Cloud NAT चालू रहने वाली VM, सभी इंटरनेट पतों तक पहुंचने के लिए NAT आईपी पतों के उसी सेट का इस्तेमाल करती है.

कभी-कभी, खास डेस्टिनेशन के लिए अलग-अलग सोर्स आईपी पतों का इस्तेमाल करने के लिए, Cloud NAT को एनएटी के इस्तेमाल का उदाहरण कॉल करता है. NAT नियम, मैच और उससे जुड़ी कार्रवाई को तय करता है. एनएटी के नियम तय करने के बाद, पैकेट को एनएटी के हर नियम से मैच किया जाता है. अगर किसी नियम का मिलान होता है, तो उस मिलान से जुड़ी कार्रवाई होती है.

ज़्यादा जानकारी के लिए, कृपया NAT के नियमों से जुड़ा दस्तावेज़ वाला सेक्शन देखें.

आपको इनके बारे में जानकारी मिलेगी

  • NAT नियमों की तैयारी के लिए, Cloud NAT गेटवे सेट अप करने का तरीका.
  • कॉमन एक्सप्रेशन लैंग्वेज (सीईएल) का इस्तेमाल करके, एनएटी के नियम डिज़ाइन करने का तरीका.
  • NAT नियम बनाने और उन्हें NAT गेटवे से जोड़ने का तरीका.
  • किसी इंस्टेंस से, NAT के नियमों की जांच करने का तरीका.
  • NAT गेटवे के नियमों को अपडेट कैसे करें.
  • NAT के नियमों को मिटाने और Cloud NAT के डिफ़ॉल्ट तरीके को वापस लाने का तरीका.

आपको इनकी ज़रूरत होगी

  • Google Compute Engine की बुनियादी जानकारी
  • बुनियादी नेटवर्किंग और टीसीपी/आईपी की जानकारी
  • Unix/Linux कमांड लाइन के बारे में बुनियादी जानकारी
  • GCP में नेटवर्किंग के टूर को पूरा करने से मदद मिलती है, जैसे कि 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 पर जाएं.

75eef5f6fd6d7e41.png

अपने हिसाब से एनवायरमेंट सेटअप करना

  1. Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको नया खाता बनाना होगा.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट के लिए आपका निजी आइडेंटिफ़ायर है. अगर इसके नाम रखने के तरीके अपनाए जाते हैं, तो अपनी पसंद का कोई भी ऐप्लिकेशन इस्तेमाल किया जा सकता है. साथ ही, इसे किसी भी समय अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होना चाहिए. साथ ही, इसे बदला नहीं जा सकता. एक बार सेट करने के बाद, इसे बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है; आम तौर पर, आपको उसके होने की कोई परवाह नहीं होती. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना पड़ता है और आम तौर पर इसकी पहचान PROJECT_ID के रूप में की जाती है. इसलिए, अगर आपको यह पसंद नहीं आता है, तो कोई भी कोड जनरेट करें. इसके अलावा, खुद का भी कोड बनाकर देखा जा सकता है कि वह उपलब्ध है या नहीं. फिर यह "फ़्रोज़न" होता है प्रोजेक्ट बनने के बाद.
  1. इसके बाद, आपको Google Cloud के संसाधनों का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी.

इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. "साफ़ करना" सेक्शन में दिए गए निर्देशों का पालन करना न भूलें सेक्शन में, संसाधनों को बंद करने का तरीका बताया गया है. इससे इस ट्यूटोरियल के अलावा बिलिंग की सुविधा नहीं मिलेगी. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.

Cloud Shell शुरू करना

Google Cloud को आपके लैपटॉप से, कहीं से भी ऑपरेट किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जा रहा है. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.

GCP कंसोल में, सबसे ऊपर दाईं ओर मौजूद टूलबार पर क्लाउड शेल आइकॉन पर क्लिक करें:

bce75f34b2c53987.png

प्रावधान करने और एनवायरमेंट से कनेक्ट होने में कुछ ही समय लगेगा. उसके पूरा हो जाने पर, आपको कुछ ऐसा दिखाई देगा:

f6ef2b5f13479f3a.png

इस वर्चुअल मशीन में ऐसे सभी डेवलपमेंट टूल मौजूद हैं जिनकी आपको ज़रूरत पड़ेगी. यह पांच जीबी की स्थायी होम डायरेक्ट्री उपलब्ध कराता है और Google Cloud पर चलता है. यह नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रक्रिया को बेहतर बनाता है. इस लैब में आपका सारा काम बस एक ब्राउज़र से किया जा सकता है.

3. लैब का सेटअप

इस लैब के लिए, आपको एक प्रोजेक्ट का इस्तेमाल करना होगा और हर एक में सबनेट के साथ दो VPC बनाने होंगे. आपको एक्सटर्नल आईपी पते को सुरक्षित रखना होगा. इसके बाद, Cloud NAT गेटवे (Cloud राऊटर के साथ) और प्रोड्यूसर के तौर पर एक कंज़्यूमर इंस्टेंस बनाना और उसे कॉन्फ़िगर करना होगा. Cloud NAT के डिफ़ॉल्ट व्यवहार की पुष्टि करने के बाद, आपको Cloud NAT के कस्टम नियम बनाने और उनके काम करने के तरीके की पुष्टि करनी होगी.

नेटवर्किंग आर्किटेक्चर की खास जानकारी:

815147de3de0bd19.png

4. बाहरी आईपी पते रिज़र्व करें

आइए इस लैब में उपयोग किए जाने वाले सभी बाहरी IP पतों को सुरक्षित रखें. इससे आपको उपभोक्ता और निर्माता दोनों के VPC में, NAT और फ़ायरवॉल के ज़रूरी नियम लिखने में मदद मिलेगी.

Cloud Shell से:

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>

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 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 आईपी पतों को पोर्ट 8080 पर प्रोड्यूसर के इंस्टेंस तक पहुंचने की अनुमति देने के लिए, VPC फ़ायरवॉल के नियम बनाते हैं.

पहले नियम के लिए, Cloud Shell से:

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

अगला चरण दो प्रोड्यूसर इंस्टेंस बनाना है.

प्रोड्यूसर इंस्टेंस, Docker Hub पर उपलब्ध डॉकर कंटेनर में आईपी इको सेवा चलाएंगे. सोर्स कोड, सेवा देने वाले व्यक्ति के GitHub रेपो में उपलब्ध है.

सभी ज़रूरी सॉफ़्टवेयर के साथ इंस्टेंस का प्रावधान तुरंत करने के लिए, हम Compute Engine पर कंटेनर डिप्लॉयमेंट की सुविधा का इस्तेमाल करेंगे.

NAT नियम लिखने में सक्षम होने के लिए, हम हर इंस्टेंस को एक अलग आरक्षित आईपी पते के साथ प्रावधान करेंगे.

पहला इंस्टेंस बनाएं. Cloud Shell से:

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

इसके बाद, दूसरा इंस्टेंस बनाएं. Cloud Shell से:

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

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 producer-vpc --allow tcp:22,tcp:3389,icmp

इसके बाद, us-east4 में सबनेट बनाते हैं. Cloud Shell से:

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

अब हम 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 Shell से:

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

7. Cloud NAT के डिफ़ॉल्ट व्यवहार की पुष्टि करें

इस समय, उपभोक्ता इंस्टेंस, Cloud NAT के डिफ़ॉल्ट तरीके का इस्तेमाल करता है. इसमें उसी आईपी "nat-address-1" का इस्तेमाल किया जाता है जिसे रिज़र्व किया गया है सभी बाहरी पतों से संपर्क करने के लिए.

Cloud NAT में NAT के नियमों वाली नई सुविधा इस्तेमाल करने से पहले, आइए इस व्यवहार की पुष्टि करते हैं.

एसएसएच का इस्तेमाल, उपभोक्ता के इंस्टेंस में किया जाता है. Cloud Shell से:

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"`

इसके बाद, दोनों प्रोड्यूसर को कर्ल करने की कोशिश करें और सोर्स आईपी पते को देखें.

<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" की वैल्यू के बराबर है.

इसी तरह, किसी बाहरी आईपी रिफ़्लेक्टर सेवा के कर्ल में भी वही आईपी दिखना चाहिए, उदाहरण के लिए:

<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

फ़िलहाल, इंस्टेंस के एसएसएच सेशन से बाहर निकलें. NAT नियम कॉन्फ़िगर करने के बाद, हम एसएसएच वापस भेज देंगे.

8. Cloud NAT नियम बनाएं

NAT नियम, कॉमन एक्सप्रेशन लैंग्वेज सिंटैक्स का इस्तेमाल करके लिखे जाते हैं. नियम एक्सप्रेशन की भाषा के बारे में ज़्यादा जानकारी के लिए, नियम एक्सप्रेशन की भाषा देखें.

साथ ही, gcloud के लिए कमांड का इस्तेमाल करके, मौजूदा NAT गेटवे में NAT नियम जोड़ा जा सकता है. हम Cloud NAT के नियम बनाने के लिए, दोनों विकल्प एक्सप्लोर करेंगे.

सबसे पहले, NAT नियम वाली YAML फ़ाइल बनाते हैं.

Cloud Shell से:

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 गेटवे को अपडेट करते हैं. Cloud Shell से:

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.

पुष्टि करें कि नियम कॉन्फ़िगर हो गया है. Cloud Shell से:

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 के लिए निर्देशों का इस्तेमाल करके, यही नियम फिर से बनाते हैं. सबसे पहले, मौजूदा नियम मिटाएं. Cloud Shell से:

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 कमांड का इस्तेमाल करके नियम को फिर से बनाएं. Cloud Shell से:

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 फ़ॉर्मैट का स्विच जोड़ेंगे.

Cloud Shell से:

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" के रूप में दिखाए जाते हैं. इसे देखने के लिए, Cloud Shell से इस कमांड को चलाएं:

$ 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

9. Cloud NAT के नियमों से जुड़े नियमों की पुष्टि करना

इसके बाद, उपभोक्ता के इंस्टेंस को प्रोड्यूसर-पता-2 से संपर्क करने के लिए, बनाए गए Cloud NAT नियम का इस्तेमाल करना चाहिए, ताकि nat-address-2 का इस्तेमाल किया जा सके.

चलिए, इस व्यवहार की पुष्टि करते हैं. एसएसएच का इस्तेमाल, उपभोक्ता के इंस्टेंस में किया जाता है. Cloud Shell से:

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"`

इसके बाद, दोनों प्रोड्यूसर को कर्ल करने की कोशिश करें और सोर्स आईपी पते को देखें.

<username>@consumer-instance:~$ curl http://$producerip1:8080
34.136.8.83
<username>@consumer-instance:~$ curl http://$producerip2:8080
34.70.137.35

अब आपको दोनों एंडपॉइंट के लिए अलग-अलग आईपी पता दिखेगा. पहला आईपी पता और डिफ़ॉल्ट पता एक ही होना चाहिए. दूसरा आईपी पता "nat-address-2" के बराबर होना चाहिए नई एनएटी (NAT) के नियमों के बाद हुआ होगा.

किसी भी बाहरी आईपी रिफ़्लेक्टर सेवा के कर्ल में अब भी वही आईपी दिखना चाहिए जो डिफ़ॉल्ट व्यवहार का है, उदाहरण के लिए:

<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

फ़िलहाल, इंस्टेंस के एसएसएच सेशन से बाहर निकलें. हम पता ड्रेनिंग की जांच करने के लिए, एसएसएच वापस करेंगे.

10. अपडेट करें और Cloud NAT के नियम मिटाएं

Cloud NAT के मौजूदा नियमों को अपडेट किया जा सकता है. उदाहरण के लिए, नए आईपी पते जोड़े जा सकते हैं और मौजूदा नियमों से जुड़े मौजूदा आईपी पतों का इस्तेमाल किया जा सकता है.

NAT नियम फ़ाइल को नीचे बताए गए तरीके से अपडेट करते हैं

Cloud Shell से:

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-3 का इस्तेमाल करके नए कनेक्शन बनाते समय, nat-address-2 का इस्तेमाल करने वाले मौजूदा कनेक्शन को ग्रेसफ़ुल तरीके से खत्म करने की अनुमति मिलनी चाहिए.

इसके बाद, इस नियम फ़ाइल का इस्तेमाल करके अपने मौजूदा NAT गेटवे को अपडेट करते हैं. Cloud Shell से:

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.

पुष्टि करें कि नियम कॉन्फ़िगर हो गया है. Cloud Shell से:

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 आईपी का इस्तेमाल करते हैं, हम इसे आपकी ज़िम्मेदारी के तौर पर इस्तेमाल करते हैं.

आखिर में, अपने Cloud NAT गेटवे से NAT नियमों को मिटाने और डिफ़ॉल्ट ऐक्शन पर वापस जाने के लिए. इस तरह का gcloud कमांड इस्तेमाल किया जा सकता है. Cloud Shell से:

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 गेटवे का वर्णन करें कमांड का उपयोग करें

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 का सेक्शन देखें. यह बताते हुए कि एनएटी का कोई नियम कॉन्फ़िगर नहीं किया गया है.

11. क्लीनअप के चरण

बार-बार लगने वाले शुल्कों से बचने के लिए, आपको इस कोडलैब के साथ जुड़े सभी संसाधनों को मिटा देना चाहिए.

पहले सभी इंस्टेंस मिटाएं.

Cloud Shell से:

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].

इसके बाद, क्लाउड राऊटर मिटाएं. 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 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 फ़ायरवॉल के नियम मिटाएं. Cloud Shell से:

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].

सबनेट मिटाएं. Cloud Shell से:

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 को मिटा देते हैं. 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].

12. बधाई हो!

आपने Cloud NAT नियम लैब पूरा कर लिया है!

आपने क्या कवर किया

  • NAT नियमों की तैयारी के लिए, Cloud NAT गेटवे सेट अप करने का तरीका.
  • कॉमन एक्सप्रेशन लैंग्वेज (सीईएल) का इस्तेमाल करके, एनएटी के नियम डिज़ाइन करने का तरीका.
  • NAT नियम बनाने और उन्हें NAT गेटवे से जोड़ने का तरीका.
  • किसी इंस्टेंस से, NAT के नियमों की जांच करने का तरीका.
  • NAT गेटवे के नियमों को अपडेट कैसे करें.
  • NAT के नियमों को मिटाने और Cloud NAT के डिफ़ॉल्ट तरीके को वापस लाने का तरीका.

अगले चरण

  • NAT के ज़्यादा जटिल नियम बनाकर प्रयोग करें, जैसे कि यह उदाहरण
  • एनएटी (NAT) आईपी पते तेज़ी से खर्च हो रहे हैं और कनेक्शन के असर पर नज़र रखें.
  • Google Cloud Platform पर नेटवर्किंग के बारे में ज़्यादा जानें

©Google, Inc. या इसके सहयोगी. सभी अधिकार सुरक्षित हैं. डिस्ट्रिब्यूट न करें.