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

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

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

Cloud NAT में प्रॉक्सी का इस्तेमाल नहीं किया जाता है. इसमें NAT को सीधे तौर पर Andromeda SDN लेयर पर लागू किया जाता है. इसलिए, आपके वर्कलोड की परफ़ॉर्मेंस पर कोई असर नहीं पड़ता. साथ ही, यह कई वीएम, क्षेत्रों, और वीपीसी के हिसाब से आसानी से स्केल हो जाता है.

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

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

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

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

आपको क्या सीखने को मिलेगा

  • एनएटी नियमों के लिए, Cloud NAT गेटवे सेट अप करने का तरीका.
  • कॉमन एक्सप्रेशन लैंग्वेज (सीईएल) का इस्तेमाल करके, 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 Console

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 Console में, सबसे ऊपर दाईं ओर मौजूद टूलबार पर मौजूद Cloud Shell आइकॉन पर क्लिक करें:

bce75f34b2c53987.png

इसे चालू करने और एनवायरमेंट से कनेक्ट करने में सिर्फ़ कुछ सेकंड लगेंगे. यह प्रोसेस पूरी होने के बाद, आपको कुछ ऐसा दिखेगा:

f6ef2b5f13479f3a.png

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

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

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

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

815147de3de0bd19.png

4. एक्सटर्नल आईपी पते रिज़र्व करना

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

अब हम प्रोड्यूसर के संसाधनों के लिए संसाधन बनाएंगे. प्रोड्यूसर वीपीसी में चल रहे इंस्टेंस, इंटरनेट से कनेक्ट होने वाली सेवा को दो सार्वजनिक आईपी "producer-address-1" और "producer-address-2" का इस्तेमाल करके उपलब्ध कराएंगे.

सबसे पहले, वीपीसी बनाते हैं. 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 पर मौजूद प्रोड्यूसर इंस्टेंस तक पहुंच सकें.

पहले नियम के लिए, 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 repo में उपलब्ध है.

सभी ज़रूरी सॉफ़्टवेयर के साथ इंस्टेंस को तुरंत उपलब्ध कराने के लिए, हम 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. उपयोगकर्ता वीपीसी, Cloud NAT, और इंस्टेंस सेट अप करना

आपने प्रोड्यूसर सेवा बना ली है. अब आपको कंज्यूमर वीपीसी और उसका Cloud NAT गेटवे बनाना होगा.

वीपीसी और सबनेट बनाने के बाद, हम एक सामान्य इनग्रेस फ़ायरवॉल नियम जोड़ेंगे, ताकि टीसीपी सोर्स आईपी रेंज के लिए IAP की अनुमति दी जा सके. इससे हम gcloud का इस्तेमाल करके, सीधे तौर पर उपभोक्ता इंस्टेंस से SSH कर पाएंगे.

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

सबसे पहले, वीपीसी बनाते हैं. 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

इसके बाद, आइए हम पोर्ट 22 पर उपभोक्ता इंस्टेंस तक पहुंचने के लिए, IAP रेंज के पतों को अनुमति देने वाले वीपीसी फ़ायरवॉल नियम बनाते हैं.

पहले फ़ायरवॉल नियम के लिए, 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 गेटवे बनाने से पहले, हमें Cloud Router इंस्टेंस बनाना होगा. हम एक निजी एएसएन नंबर का इस्तेमाल करते हैं, लेकिन इस लैब की गतिविधियों के लिए यह ज़रूरी नहीं है. 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 नियमों की सुविधा का इस्तेमाल करने से पहले, आइए इस व्यवहार की पुष्टि करें.

उपभोक्ता इंस्टेंस में SSH करें. 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 नियम भी जोड़ा जा सकता है. हम क्लाउड एनएटी के नियम बनाने के लिए, दोनों विकल्पों के बारे में जानेंगे.

सबसे पहले, 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 के नियमों के काम करने के तरीके की पुष्टि करना

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

आइए, इस व्यवहार की पुष्टि करते हैं. उपभोक्ता इंस्टेंस में SSH करें. 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 नियम जोड़ने के बाद, दूसरा आईपी पता "nat-address-2" के बराबर होना चाहिए.

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

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

अब इस नियम फ़ाइल का इस्तेमाल करके, अपने मौजूदा 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" को अब ड्रेन की गई स्थिति में रखा गया है. हम आपको यह पुष्टि करने का काम सौंपते हैं कि उपभोक्ता वीपीसी से नए कनेक्शन, अब सही 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 में "rules:" सेक्शन नहीं है. इससे पता चलता है कि कोई भी NAT नियम कॉन्फ़िगर नहीं किया गया है.

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 Router को मिटाएं. 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].

आखिर में, वीपीसी मिटाते हैं. 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 नियमों से जुड़ा यह लैब पूरा कर लिया है!

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

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

अगले चरण

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

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