सिर्फ़ IPv6 वाले वीएम इंस्टेंस बनाना और NAT64/DNS64 को चालू करना

1. परिचय

IPv6 पर माइग्रेट करने से जुड़ी मुख्य चुनौतियों में से एक, IPv4-ओनली एंडपॉइंट और नेटवर्क तक पहुंच बनाए रखना है. इस समस्या को हल करने के लिए, DNS64 (RFC6147 में बताया गया है) का इस्तेमाल किया जाता है. इससे क्लाइंट के लिए, A रिकॉर्ड को AAAA रिकॉर्ड में बदला जाता है. इसके बाद, इसे NAT64 (RFC6146 में बताया गया है) के साथ जोड़ा जाता है. इससे खास तौर पर फ़ॉर्मैट किए गए IPv6 पतों को IPv4 में बदला जाता है. इसमें IPv4 पते को खास IPv6 पते में एम्बेड किया जाता है. इस कोडलैब में, Google Cloud Platform (GCP) वर्चुअल प्राइवेट क्लाउड (VPC) पर, दोनों सुविधाओं को कॉन्फ़िगर करने के बारे में बताया गया है. GCP NAT64 और DNS64 को एक साथ कॉन्फ़िगर करने पर, IPv6-ओनली इंस्टेंस, इंटरनेट पर मौजूद IPv4-ओनली सर्वर से कम्यूनिकेट कर सकते हैं.

इस लैब में, आपको अलग-अलग तरह के IPv6 सबनेट और इंस्टेंस के साथ एक वीपीसी सेट अप करना होगा : IPv6-only GUA (ग्लोबल यूनिकास्ट पता), IPv6-only ULA (यूनीक लोकल पता), और ड्यूअल-स्टैक ULA. इसके बाद, आपको Google Cloud की मैनेज की गई DNS64 और NAT64 सेवाओं को कॉन्फ़िगर और टेस्ट करना होगा, ताकि उनसे सिर्फ़ IPv4 का इस्तेमाल करने वाली वेबसाइटों को ऐक्सेस किया जा सके.

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

  • सिर्फ़ IPv6 वाले सबनेट और इंस्टेंस बनाने का तरीका
  • किसी वीपीसी के लिए, Google Cloud की मैनेज की गई DNS64 सेवा को चालू करने का तरीका .
  • NAT64 के लिए कॉन्फ़िगर किया गया Google Cloud NAT गेटवे कैसे बनाएं .
  • सिर्फ़ IPv6 वाले इंस्टेंस से, सिर्फ़ IPv4 वाले डेस्टिनेशन तक DNS64 रिज़ॉल्यूशन की जांच कैसे करें.
  • सिंगल-स्टैक और ड्यूअल-स्टैक इंस्टेंस के बीच, DNS64 और NAT64 के काम करने के तरीके में क्या अंतर है.
  • NAT64 के लिए NAT गेटवे को कॉन्फ़िगर करने का तरीका.
  • सिर्फ़ IPv6 वाले इंस्टेंस से, सिर्फ़ IPv4 वाले डेस्टिनेशन तक NAT64 कनेक्टिविटी की जांच कैसे करें.

3. शुरू करने से पहले

कोडलैब के साथ काम करने के लिए प्रोजेक्ट को अपडेट करना

इस कोडलैब में, Cloud Shell में gcloud कॉन्फ़िगरेशन लागू करने में मदद करने के लिए, $variables का इस्तेमाल किया गया है.

Cloud Shell में, यह तरीका अपनाएं

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
export projectname=$(gcloud config list --format="value(core.project)")
export zonename=[COMPUTE ZONE NAME]
export regionname=[REGION NAME]

लैब का पूरा आर्किटेक्चर

63e4293e033da8d3.png

NAT64 और DNS64, अलग-अलग IPv6 सबनेट टाइप के साथ कैसे इंटरैक्ट करते हैं, यह दिखाने के लिए आपको एक ऐसा वीपीसी बनाना होगा जिसमें GUA और ULA, दोनों तरह के IPv6 सबनेट हों. साथ ही, आपको एक ड्यूअल-स्टैक सबनेट (यूएलए पते का इस्तेमाल करके) बनाना होगा. इससे यह दिखाया जा सकेगा कि ड्यूअल-स्टैक वीएम पर DNS64 और NAT64 लागू नहीं होते.

इसके बाद, DNS64 और NAT64 को कॉन्फ़िगर करें. साथ ही, इंटरनेट पर IPv6 और IPv4 डेस्टिनेशन से कनेक्टिविटी की जांच करें.

4. तैयारी के चरण

सबसे पहले, अपने Google Cloud प्रोजेक्ट में ज़रूरी सेवा खाता, IAM, नेटवर्क इंफ़्रास्ट्रक्चर, और इंस्टेंस सेट अप करें.

सेवा खाता और आईएएम बाइंडिंग बनाना

हम एक नया सेवा खाता बनाकर शुरू करते हैं, ताकि इंस्टेंस, gcloud का इस्तेमाल करके एक-दूसरे से SSH कर सकें. हमें इस सुविधा की ज़रूरत होगी, क्योंकि हम GUA के सिर्फ़ IPv6 वाले इंस्टेंस को ऐक्सेस करने के लिए IAP का इस्तेमाल नहीं कर सकते. साथ ही, Cloud Shell में अब तक IPv6 को सीधे तौर पर ऐक्सेस करने की अनुमति नहीं है. Cloud Shell में यहां दिए गए कमांड चलाएं.

gcloud iam service-accounts create ipv6-codelab \
     --description="temporary service account for a codelab" \
     --display-name="ipv6codelabSA" \
     --project $projectname

gcloud projects add-iam-policy-binding  $projectname \
--member=serviceAccount:ipv6-codelab@$projectname.iam.gserviceaccount.com \
--role=roles/compute.instanceAdmin.v1

gcloud iam service-accounts add-iam-policy-binding \
    ipv6-codelab@$projectname.iam.gserviceaccount.com \
--member=serviceAccount:ipv6-codelab@$projectname.iam.gserviceaccount.com \
--role=roles/iam.serviceAccountUser

वीपीएन बनाएं और यूएलए चालू करें

कस्टम सबनेट मोड वाला वीपीसी नेटवर्क बनाएं. साथ ही, क्लाउडशेल में यहां दिए गए निर्देश चलाकर, यूएलए इंटरनल IPv6 को चालू करें.

gcloud compute networks create ipv6-only-vpc \
--project=$projectname \
--subnet-mode=custom \
--mtu=1500 --bgp-routing-mode=global \
--enable-ula-internal-ipv6

फ़ायरवॉल के नियम बनाना

एसएसएच ऐक्सेस की अनुमति देने के लिए, फ़ायरवॉल के नियम बनाएं. एक नियम, पूरी यूएलए रेंज (fd20::/20) से एसएसएच की अनुमति देता है. दो अन्य नियमों के तहत, IAP की पहले से तय की गई IPv6 और IPv4 रेंज (क्रमशः 2600:2d00:1:7::/64, 35.235.240.0/20) से ट्रैफ़िक को अनुमति दी जाती है.

Cloud Shell में ये कमांड चलाएं:

gcloud compute firewall-rules create allow-v6-ssh-ula \
--direction=INGRESS --priority=200 \
--network=ipv6-only-vpc --action=ALLOW \
--rules=tcp:22 --source-ranges=fd20::/20 \
--project=$projectname 

gcloud compute firewall-rules create allow-v6-iap \
--direction=INGRESS --priority=300 \
--network=ipv6-only-vpc --action=ALLOW \
--rules=tcp --source-ranges=2600:2d00:1:7::/64 \
--project=$projectname 

gcloud compute firewall-rules create allow-v4-iap \
--direction=INGRESS --priority=300 \
--network=ipv6-only-vpc --action=ALLOW \
--rules=tcp --source-ranges=35.235.240.0/20 \
--project=$projectname 

सबनेट बनाना

सिर्फ़ GUA v6 वाला सबनेट, सिर्फ़ ULA v6 वाला सबनेट, और ड्यूअल-स्टैक ULA सबनेट बनाएं. Cloud Shell में ये कमांड चलाएं:

gcloud compute networks subnets create gua-v6only-subnet \
--network=ipv6-only-vpc \
--project=$projectname \
--stack-type=IPV6_ONLY \
--ipv6-access-type=external \
--region=$regionname 

gcloud compute networks subnets create ula-v6only-subnet  \
--network=ipv6-only-vpc \
--project=$projectname \
--stack-type=IPV6_ONLY \
--ipv6-access-type=internal \
--enable-private-ip-google-access \
--region=$regionname

gcloud compute networks subnets create ula-dualstack-subnet  \
--network=ipv6-only-vpc \
--project=$projectname \
--stack-type=IPV4_IPV6 \
--range=10.120.0.0/16 \
--ipv6-access-type=internal \
--region=$regionname 

इंस्टेंस बनाना

अभी बनाए गए हर सबनेट में इंस्टेंस बनाएं. क्लाउड-प्लैटफ़ॉर्म के साथ IPv6-only ULA इंस्टेंस के बारे में बताया गया है, ताकि हम इसका इस्तेमाल GUA IPv6-only इंस्टेंस के लिए जंपबॉक्स के तौर पर कर सकें. Cloud Shell में ये कमांड चलाएं:

gcloud compute instances create gua-instance \
--subnet gua-v6only-subnet \
--stack-type IPV6_ONLY \
--zone $zonename \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--service-account=ipv6-codelab@$projectname.iam.gserviceaccount.com \
--project=$projectname

gcloud compute instances create ula-instance \
--subnet ula-v6only-subnet \
--stack-type IPV6_ONLY \
--zone $zonename \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--service-account=ipv6-codelab@$projectname.iam.gserviceaccount.com \
--project=$projectname

gcloud compute instances create dualstack-ula-instance \
--subnet ula-dualstack-subnet \
--stack-type IPV4_IPV6 \
--zone $zonename \
--project=$projectname

शुरुआती इंस्टेंस ऐक्सेस और सेटअप

ULA इंस्टेंस से SSH करें. यह डिफ़ॉल्ट रूप से IAP का इस्तेमाल करेगा. ULA इंस्टेंस से SSH करने के लिए, cloudshell में इस कमांड का इस्तेमाल करें:

gcloud compute ssh ula-instance --project $projectname --zone $zonename

<username>@ula-instance:~$ 

हम GUA इंस्टेंस के लिए, ULA इंस्टेंस का इस्तेमाल जंपबॉक्स के तौर पर भी करेंगे. ऐसा इसलिए, क्योंकि IAP, GUA इंस्टेंस के साथ काम नहीं करता है. साथ ही, Cloudshell VM, IPv6 डेस्टिनेशन को ऐक्सेस नहीं कर सकते.

ULA इंस्टेंस शेल में रहते हुए. नीचे दिए गए gcloud कमांड का इस्तेमाल करके, GUA इंस्टेंस से SSH करने की कोशिश करें.

किसी इंस्टेंस में पहली बार एसएसएच कमांड चलाने पर, आपको एसएसएच की जोड़ी सेट अप करने के लिए कहा जाएगा. जब तक कुंजी नहीं बन जाती और SSH कमांड नहीं चल जाती, तब तक Enter दबाते रहें. इससे बिना किसी लंबे पासवर्ड के एक नया कीपैर बन जाता है.

ula-instance:~$ gcloud compute ssh gua-instance

WARNING: The private SSH key file for gcloud does not exist.
WARNING: The public SSH key file for gcloud does not exist.
WARNING: You do not have an SSH key for gcloud.
WARNING: SSH keygen will be executed to generate a key.
Generating public/private rsa key pair.

Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/galhabian/.ssh/google_compute_engine
Your public key has been saved in /home/galhabian/.ssh/google_compute_engine.pub
The key fingerprint is:
SHA256:5PYzydjcpWYiFtzetYCBI6vmy9dqyLsxgDORkB9ynqY galhabian@ula-instance
The key's randomart image is:
+---[RSA 3072]----+
|..               |
|+.o      .       |
|o= o  . + .      |
| o=    * o o     |
|+o.   . S o . o  |
|Eo . . . O + = . |
|   .=. .+ @ * .  |
|   +ooo... *     |
|    **..         |
+----[SHA256]-----+

अगर SSH कमांड काम करती है, तो आपको GUA इंस्टेंस में SSH करने का विकल्प मिलेगा:

Updating instance ssh metadata...done.                                                                                                                                                                                                                                                                                            
Waiting for SSH key to propagate.
Warning: Permanently added 'compute.3639038240056074485' (ED25519) to the list of known hosts.
Linux gua-instance 6.1.0-34-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.135-1 (2025-04-25) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

<username>@gua-instance:~$ 

5. सिर्फ़ IPv6 वाले इंस्टेंस की जांच करें.

आइए, दोनों IPv6-ओनली इंस्टेंस की जांच करें. इसके लिए, उनमें SSH करें और उनकी राउटिंग टेबल देखें.

GUA इंस्टेंस की जांच करना

सबसे पहले "ula-instance" इंस्टेंस का इस्तेमाल करके, "gua-instance" में SSH करें.

gcloud compute ssh ula-instance --project $projectname --zone $zonename
<username>@ula-instance:~$ gcloud compute ssh gua-instance

आइए, इस निर्देश का इस्तेमाल करके इंस्टेंस की IPv6 राउटिंग टेबल देखें

<username>@gua-instance:~$ ip -6 route

2600:1900:4041:461::/65 via fe80::56:11ff:fef9:88c1 dev ens4 proto ra metric 100 expires 81sec pref medium
fe80::/64 dev ens4 proto kernel metric 256 pref medium
default via fe80::56:11ff:fef9:88c1 dev ens4 proto ra metric 100 expires 81sec mtu 1500 pref medium

हमें राउटिंग टेबल में तीन एंट्री दिखती हैं

  1. यह इंस्टेंस जिस GUA सबनेट से जुड़ा है उसके लिए /65 रूट. इसमें डिफ़ॉल्ट गेटवे के लिए लिंक-लोकल पते का इस्तेमाल करके, अगले हॉप को डिराइव किया जाता है. ध्यान रखें कि /65 से ऊपर का हिस्सा, IPv6 पास-थ्रू नेटवर्क लोड बैलेंसर के लिए रिज़र्व होता है
  2. लिंक-लोकल यूनिकास्ट प्रीफ़िक्स fe80::/64 के लिए, पहले से मौजूद /64 रूट
  3. सबनेट के डिफ़ॉल्ट गेटवे के लिए, लिंक-लोकल पते पर ले जाने वाला डिफ़ॉल्ट रूट.

इस कमांड को जारी करके, IPv4 राउटिंग टेबल देखते हैं

<username>@gua-instance:~$ ip -4 route

default via 169.254.1.1 dev ens4 proto dhcp src 169.254.1.2 metric 100 
169.254.1.1 dev ens4 proto dhcp scope link src 169.254.1.2 metric 100 
169.254.169.254 via 169.254.1.1 dev ens4 proto dhcp src 169.254.1.2 metric 100

क्या यह हैरान करने वाला है? दरअसल, हम सिर्फ़ IPv6 वाले इंस्टेंस में IPv4 राउटिंग टेबल को बनाए रखते हैं, ताकि Compute Metadata server (169.254.169.154) को ऐक्सेस किया जा सके. ऐसा इसलिए, क्योंकि यह अब भी सिर्फ़ IPv4 वाला एंडपॉइंट है.

ऐसा इसलिए होता है, क्योंकि आईपीवी6-ओनली इंस्टेंस होने पर, इंस्टेंस का आईपी पता 169.254.1.2 हो जाता है. इस आईपी को Compute Metadata सर्वर के अलावा कहीं और रूट नहीं किया जा सकता. इसलिए, इंस्टेंस को सभी IPv4 नेटवर्क से अलग कर दिया जाता है.

कर्ल टेस्ट

आइए, curl का इस्तेमाल करके सिर्फ़ IPv4 और सिर्फ़ IPv6 वाली वेबसाइटों से कनेक्टिविटी की जांच करें.

<username>@gua-instance:~$ curl -vv --connect-timeout 10 v6.ipv6test.app
<username>@gua-instance:~$ curl -vv --connect-timeout 10 v4.ipv6test.app

यहां एक सैंपल आउटपुट दिया गया है.

<username>@gua-instance:~$ curl -vv --connect-timeout 10 v6.ipv6test.app
*   Trying [2600:9000:20be:cc00:9:ec55:a1c0:93a1]:80...
* Connected to v6.ipv6test.app (2600:9000:20be:cc00:9:ec55:a1c0:93a1) port 80 (#0)
> GET / HTTP/1.1
> Host: v6.ipv6test.app
> User-Agent: curl/7.88.1
> Accept: */*
> 
< HTTP/1.1 200 OK
!! Rest of output truncated

<username>@gua-instance:~$ curl -vv --connect-timeout 10 v4.ipv6test.app
*   Trying 3.163.165.4:80...
* ipv4 connect timeout after 4985ms, move on!
*   Trying 3.163.165.50:80...
* ipv4 connect timeout after 2492ms, move on!
*   Trying 3.163.165.127:80...
* ipv4 connect timeout after 1246ms, move on!
*   Trying 3.163.165.37:80...
* ipv4 connect timeout after 1245ms, move on!
* Failed to connect to v4.ipv6test.app port 80 after 10000 ms: Timeout was reached
* Closing connection 0
curl: (28) Failed to connect to v4.ipv6test.app port 80 after 10000 ms: Timeout was reached

जैसा कि उम्मीद थी, आईपीवी6-ओनली इंस्टेंस से आईपीवी4 इंटरनेट एंडपॉइंट तक नहीं पहुंचा जा सकता. DNS64 और NAT64 उपलब्ध कराए बिना, IPv6-ओनली इंस्टेंस के पास IPv4 डेस्टिनेशन तक पहुंचने का कोई रास्ता नहीं होता. IPv6 डेस्टिनेशन तक पहुंचने की सुविधा सामान्य रूप से काम करती है, क्योंकि इंस्टेंस में GUA IPv6 पता होता है.

यूएलए इंस्टेंस की जांच करना

"ula-instance" इंस्टेंस में SSH करें. यह डिफ़ॉल्ट रूप से IAP का इस्तेमाल करता है.

gcloud compute ssh ula-instance --project $projectname --zone $zonename

आइए, इस निर्देश का इस्तेमाल करके इंस्टेंस की IPv6 राउटिंग टेबल देखें

<username>@ula-instance:~$ ip -6 route

fd20:f06:2e5e:2000::/64 via fe80::55:82ff:fe6b:1d7 dev ens4 proto ra metric 100 expires 84sec pref medium
fe80::/64 dev ens4 proto kernel metric 256 pref medium
default via fe80::55:82ff:fe6b:1d7 dev ens4 proto ra metric 100 expires 84sec mtu 1500 pref medium

हमें राउटिंग टेबल में तीन एंट्री दिखती हैं. ये GUA इंस्टेंस की तरह ही हैं. हालांकि, इनमें मास्क /65 के बजाय /64 है. साथ ही, सबनेट रूट, यूएलए रेंज का हो. (fd20::/20 एग्रीगेट के तहत)

इस कमांड को जारी करके, IPv4 राउटिंग टेबल देखते हैं

<username>@ula-instance:~$ ip -4 route

default via 169.254.1.1 dev ens4 proto dhcp src 169.254.1.2 metric 100 
169.254.1.1 dev ens4 proto dhcp scope link src 169.254.1.2 metric 100 
169.254.169.254 via 169.254.1.1 dev ens4 proto dhcp src 169.254.1.2 metric 100

इसमें GUA इंस्टेंस की तरह ही स्थिति दिखती है.

कर्ल टेस्ट

curl का इस्तेमाल करके, सिर्फ़ v4 और सिर्फ़ v6 वाली वेबसाइटों के लिए कनेक्टिविटी टेस्ट को दोहराना.

<username>@ula-instance:~$ curl -vv --connect-timeout 10 v6.ipv6test.app
<username>@ula-instance:~$ curl -vv --connect-timeout 10 v4.ipv6test.app

यहां एक सैंपल आउटपुट दिया गया है.

<username>@ula-instance:~$ curl -vv --connect-timeout 10 v6.ipv6test.app
*   Trying [2600:9000:20be:8400:9:ec55:a1c0:93a1]:80...
* ipv6 connect timeout after 4986ms, move on!
*   Trying [2600:9000:20be:9000:9:ec55:a1c0:93a1]:80...
* ipv6 connect timeout after 2493ms, move on!
*   Trying [2600:9000:20be:d600:9:ec55:a1c0:93a1]:80...
* ipv6 connect timeout after 1246ms, move on!
*   Trying [2600:9000:20be:b000:9:ec55:a1c0:93a1]:80...
* ipv6 connect timeout after 622ms, move on!
*   Trying [2600:9000:20be:7200:9:ec55:a1c0:93a1]:80...
* ipv6 connect timeout after 312ms, move on!
*   Trying [2600:9000:20be:8600:9:ec55:a1c0:93a1]:80...
* ipv6 connect timeout after 155ms, move on!
*   Trying [2600:9000:20be:7a00:9:ec55:a1c0:93a1]:80...
* ipv6 connect timeout after 77ms, move on!
*   Trying [2600:9000:20be:ce00:9:ec55:a1c0:93a1]:80...
* ipv6 connect timeout after 77ms, move on!
* Failed to connect to v6.ipv6test.app port 80 after 10000 ms: Timeout was reached
* Closing connection 0

<username>@ula-instance:~$ curl -vv --connect-timeout 10 v4.ipv6test.app
*   Trying 3.163.165.4:80...
* ipv4 connect timeout after 4985ms, move on!
*   Trying 3.163.165.50:80...
* ipv4 connect timeout after 2492ms, move on!
*   Trying 3.163.165.127:80...
* ipv4 connect timeout after 1246ms, move on!
*   Trying 3.163.165.37:80...
* ipv4 connect timeout after 1245ms, move on!
* Failed to connect to v4.ipv6test.app port 80 after 10000 ms: Timeout was reached
* Closing connection 0
curl: (28) Failed to connect to v4.ipv6test.app port 80 after 10000 ms: Timeout was reached

यूएलए इंस्टेंस के मामले में, दोनों इंटरनेट एंडपॉइंट तक नहीं पहुंचा जा सकता. ऐसा इसलिए है, क्योंकि आईपीवी6 एंडपॉइंट के लिए, हम बाहर से कम्यूनिकेट करने के लिए यूएलए पते का इस्तेमाल नहीं कर सकते. साथ ही, इंस्टेंस में सिर्फ़ आईपीवी6 इंस्टेंस के तौर पर आईपीवी4 तक पहुंचने की सुविधा नहीं होती.

6. NAT64 और DNS64 चालू करना

अपने वीपीसी के लिए, मैनेज की गई DNS64 और NAT64 सेवाओं को कॉन्फ़िगर करें.

DNS64

अपने वीपीसी के लिए, DNS64 सर्वर की नीति चालू करें . इससे वीपीसी के डीएनएस रिज़ॉल्वर को, सिर्फ़ A रिकॉर्ड वाले जवाबों के लिए AAAA रिकॉर्ड बनाने का निर्देश मिलता है. Cloud Shell में ये कमांड चलाएं:

gcloud beta dns policies create allow-dns64 \
    --description="Enable DNS64 Policy" \
    --networks=ipv6-only-vpc \
    --enable-dns64-all-queries \
    --project $projectname

NAT64

Cloud Router बनाएं. यह Cloud NAT के लिए ज़रूरी है. इसके बाद, NAT64 के लिए कॉन्फ़िगर किया गया Cloud NAT गेटवे बनाएं. इसे सिर्फ़ IPv6 वाले सभी सबनेट आईपी पतों की रेंज के लिए चालू करें. साथ ही, बाहरी आईपी पतों को अपने-आप असाइन होने की सुविधा चालू करें. Cloud Shell में ये कमांड चलाएं:

gcloud compute routers create nat64-router \
--network=ipv6-only-vpc \
--region=$regionname \
--project=$projectname


gcloud beta compute routers nats create nat64-natgw \
--router=nat64-router \
--region=$regionname \
--auto-allocate-nat-external-ips \
--nat64-all-v6-subnet-ip-ranges \
--project=$projectname
 

7. NAT64 और DNS64 की जांच करना

अब, सिर्फ़ IPv6 वाले इंस्टेंस से NAT64 और DNS64 कॉन्फ़िगरेशन की जांच करते हैं. इसके लिए, सबसे पहले GUA इंस्टेंस और फिर ULA इंस्टेंस का इस्तेमाल किया जाएगा.

किसी GUA इंस्टेंस से DNS64/NAT64 की जांच करना

सबसे पहले "ula-instance" इंस्टेंस का इस्तेमाल करके, "gua-instance" में SSH करें.

gcloud compute ssh ula-instance --project $projectname --zone $zonename
<username>@ula-instance:~$ gcloud compute ssh gua-instance

डीएनएस टेस्ट

सिर्फ़ IPv6 का इस्तेमाल करने वाली वेबसाइट के डीएनएस रिज़ॉल्यूशन की जांच करें. उदाहरण के लिए, v6.ipv6test.app पर जाएं. हालांकि, सिर्फ़ IPv6 का इस्तेमाल करने वाली किसी भी वेबसाइट पर जाने से ऐसा ही नतीजा मिलेगा).

<username>@gua-instance:~$ host -t AAAA v6.ipv6test.app
<username>@gua-instance:~$ host -t A v6.ipv6test.app

हमें सिर्फ़ IPv6 AAAA जवाब मिलने की उम्मीद है.

आउटपुट का उदाहरण

<username>@gua-instance:~$ host -t AAAA v6.ipv6test.app
v6.ipv6test.app has IPv6 address 2600:9000:269f:1000:9:ec55:a1c0:93a1
v6.ipv6test.app has IPv6 address 2600:9000:269f:6600:9:ec55:a1c0:93a1
v6.ipv6test.app has IPv6 address 2600:9000:269f:b600:9:ec55:a1c0:93a1
v6.ipv6test.app has IPv6 address 2600:9000:269f:3e00:9:ec55:a1c0:93a1
v6.ipv6test.app has IPv6 address 2600:9000:269f:9c00:9:ec55:a1c0:93a1
v6.ipv6test.app has IPv6 address 2600:9000:269f:b200:9:ec55:a1c0:93a1
v6.ipv6test.app has IPv6 address 2600:9000:269f:a600:9:ec55:a1c0:93a1
v6.ipv6test.app has IPv6 address 2600:9000:269f:1400:9:ec55:a1c0:93a1

<username>@gua-instance:~$ host -t A v6.ipv6test.app
v6.ipv6test.app has no A record

सिर्फ़ IPv4 वाली वेबसाइट (जैसे, v4.ipv6test.app) के डीएनएस रिज़ॉल्यूशन की जांच करें. आपको A रिकॉर्ड (ओरिजनल IPv4) और DNS64 से सिंथेसाइज़ किया गया AAAA रिकॉर्ड, दोनों की ज़रूरत होती है. इसके लिए, जाने-माने प्रीफ़िक्स 64:ff9b::/96 का इस्तेमाल किया जाता है.

<username>@gua-instance:~$ host -t AAAA v4.ipv6test.app
<username>@gua-instance:~$ host -t A v4.ipv6test.app

आउटपुट का उदाहरण

<username>@gua-instance:~$ host -t AAAA v4.ipv6test.app
v4.ipv6test.app has IPv6 address 64:ff9b::36c0:3318
v4.ipv6test.app has IPv6 address 64:ff9b::36c0:3344
v4.ipv6test.app has IPv6 address 64:ff9b::36c0:333c
v4.ipv6test.app has IPv6 address 64:ff9b::36c0:3326

<username>@gua-instance:~$ host -t A v4.ipv6test.app
v4.ipv6test.app has address 54.192.51.68
v4.ipv6test.app has address 54.192.51.24
v4.ipv6test.app has address 54.192.51.60
v4.ipv6test.app has address 54.192.51.38

ऊपर दिए गए उदाहरण में, डेसिमल में मौजूद IPv4 पता (54.192.51.38), हेक्स में (36 c0 33 26) में बदल जाएगा. इसलिए, हमें AAAA रिकॉर्ड के लिए (64:ff9b::36c0:3326) जवाब मिलने की उम्मीद है. यह जवाब, हमें मिले AAAA जवाबों में से एक से मेल खाता है.

कर्ल टेस्ट

आइए, IPv6 पर कर्ल का इस्तेमाल करके, सिर्फ़ v4 और सिर्फ़ v6 वाले एंडपॉइंट से कनेक्टिविटी की जांच करें

<username>@gua-instance:~$ curl -vv -6 v6.ipv6test.app

<username>@gua-instance:~$ curl -vv -6 v4.ipv6test.app

यहां एक सैंपल आउटपुट दिया गया है.

<username>@gua-instance:~$ curl -vv -6 v6.ipv6test.app
*   Trying [2600:9000:269f:1000:9:ec55:a1c0:93a1]:80...
* Connected to v6.ipv6test.app (2600:9000:269f:1000:9:ec55:a1c0:93a1) port 80 (#0)
> GET / HTTP/1.1

##
## <Output truncated for brevity>
##

<username>@gua-instance:~$ curl -vv -6 v4.ipv6test.app
*   Trying [64:ff9b::36c0:333c]:80...
* Connected to v4.ipv6test.app (64:ff9b::36c0:333c) port 80 (#0)
> GET / HTTP/1.1

##
## <Output truncated for brevity>
##

दोनों कर्ल कमांड काम करती हैं. ध्यान दें कि IPv6 की मदद से, सिर्फ़ IPv4 वाली वेबसाइट से कनेक्ट करना कैसे मुमकिन हुआ. ऐसा इसलिए हुआ, क्योंकि NAT64 और DNS64 ने एक साथ काम करके कनेक्टिविटी को चालू किया.

सोर्स आईपी की जांच करना

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

<username>@gua-instance:~$ curl -6 v4.ipv6test.app

<username>@gua-instance:~$ curl -6 v6.ipv6test.app

आउटपुट का सैंपल

<username>@gua-instance:~$ curl -6 v4.ipv6test.app
34.47.60.91

<username>@gua-instance:~$ curl -6 v6.ipv6test.app
2600:1900:40e0:6f:0:1::

रिपोर्ट किया गया IPv6 पता, इंस्टेंस के IPv6 पते से मेल खाना चाहिए . यह पता, इंस्टेंस पर "ip -6 address" कमांड के आउटपुट से मेल खाना चाहिए. उदाहरण के तौर पर

<username>@gua-instance:~$ ip -6 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 2600:1900:40e0:6f:0:1::/128 scope global dynamic noprefixroute
       valid_lft 79912sec preferred_lft 79912sec
    inet6 fe80::86:d9ff:fe34:27ed/64 scope link
       valid_lft forever preferred_lft forever

हालांकि, रिपोर्ट किया गया IPv4 पता, Cloud NAT गेटवे के बाहरी आईपी पते से मेल खाना चाहिए. ऐसा इसलिए, क्योंकि यह इंटरनेट पर जाने से पहले NAT64 फ़ंक्शन को पूरा करता है. इसकी पुष्टि करने के लिए, cloudshell में यह gcloud कमांड चलाएं

gcloud compute routers get-nat-ip-info \
       nat64-router \
       --region=$regionname

आउटपुट का सैंपल

result:
- natIpInfoMappings:
  - mode: AUTO
    natIp: 34.47.60.91
    usage: IN_USE
  natName: nat64-natgw

ध्यान दें कि आउटपुट में रिपोर्ट किया गया "natIp", आईपी रिफ़्लेक्शन वेबसाइट से मिले आउटपुट से मेल खाता है.

यूएलए इंस्टेंस से DNS64/NAT64 की टेस्टिंग

सबसे पहले, ULA इंस्टेंस "ula-instance" से एसएसएच करें

gcloud compute ssh ula-instance --project $projectname --zone $zonename

<username>@ula-instance:~$

डीएनएस टेस्ट

सिर्फ़ IPv6 का इस्तेमाल करने वाली वेबसाइट के डीएनएस रिज़ॉल्यूशन की जांच करें. उदाहरण के लिए, v6.ipv6test.app पर जाएं. हालांकि, सिर्फ़ IPv6 का इस्तेमाल करने वाली किसी भी वेबसाइट पर जाने से ऐसा ही नतीजा मिलेगा).

<username>@ula-instance:~$ host -t AAAA v6.ipv6test.app
<username>@ula-instance:~$ host -t A v6.ipv6test.app

हमें सिर्फ़ IPv6 AAAA जवाब मिलने की उम्मीद है.

आउटपुट का उदाहरण

<username>@ula-instance:~$ host -t AAAA v6.ipv6test.app
v6.ipv6test.app has IPv6 address 2600:9000:269f:1000:9:ec55:a1c0:93a1
v6.ipv6test.app has IPv6 address 2600:9000:269f:6600:9:ec55:a1c0:93a1
v6.ipv6test.app has IPv6 address 2600:9000:269f:b600:9:ec55:a1c0:93a1
v6.ipv6test.app has IPv6 address 2600:9000:269f:3e00:9:ec55:a1c0:93a1
v6.ipv6test.app has IPv6 address 2600:9000:269f:9c00:9:ec55:a1c0:93a1
v6.ipv6test.app has IPv6 address 2600:9000:269f:b200:9:ec55:a1c0:93a1
v6.ipv6test.app has IPv6 address 2600:9000:269f:a600:9:ec55:a1c0:93a1
v6.ipv6test.app has IPv6 address 2600:9000:269f:1400:9:ec55:a1c0:93a1

<username>@ula-instance:~$ host -t A v6.ipv6test.app
v6.ipv6test.app has no A record

सिर्फ़ IPv4 वाली वेबसाइट (जैसे, v4.ipv6test.app) के डीएनएस रिज़ॉल्यूशन की जांच करें. आपको A रिकॉर्ड (ओरिजनल IPv4) और DNS64 से सिंथेसाइज़ किया गया AAAA रिकॉर्ड, दोनों की ज़रूरत होती है. इसके लिए, जाने-माने प्रीफ़िक्स 64:ff9b::/96 का इस्तेमाल किया जाता है.

<username>@ula-instance:~$ host -t AAAA v4.ipv6test.app
<username>@ula-instance:~$ host -t A v4.ipv6test.app

आउटपुट का उदाहरण

<username>@gua-instance:~$ host -t AAAA v4.ipv6test.app
v4.ipv6test.app has IPv6 address 64:ff9b::36c0:3318
v4.ipv6test.app has IPv6 address 64:ff9b::36c0:3344
v4.ipv6test.app has IPv6 address 64:ff9b::36c0:333c
v4.ipv6test.app has IPv6 address 64:ff9b::36c0:3326

<username>@gua-instance:~$ host -t A v4.ipv6test.app
v4.ipv6test.app has address 54.192.51.68
v4.ipv6test.app has address 54.192.51.24
v4.ipv6test.app has address 54.192.51.60
v4.ipv6test.app has address 54.192.51.38

ऊपर दिए गए उदाहरण में, डेसिमल में मौजूद IPv4 पता (54.192.51.38), हेक्स में (36 c0 33 26) में बदल जाएगा. इसलिए, हमें AAAA रिकॉर्ड के लिए (64:ff9b::36c0:3326) जवाब मिलने की उम्मीद है. यह जवाब, हमें मिले AAAA जवाबों में से एक से मेल खाता है.

कर्ल टेस्ट

आइए, curl का इस्तेमाल करके सिर्फ़ v4 और सिर्फ़ v6 वाले एंडपॉइंट से कनेक्टिविटी की जांच करें.

शुरुआत में, हम यह दिखाएंगे कि आईपीवी4 पर पहुंचना मुमकिन नहीं है, क्योंकि इंस्टेंस सिर्फ़ आईपीवी6 वाला इंस्टेंस है.

<username>@ula-instance:~$ curl -vv -4 --connect-timeout 10 v6.ipv6test.app
<username>@ula-instance:~$ curl -vv -4 --connect-timeout 10 v4.ipv6test.app

हालांकि, दोनों कर्ल काम नहीं करेंगे. ये अलग-अलग वजहों से काम नहीं करेंगे. यहां एक सैंपल आउटपुट दिया गया है.

<username>@ula-instance:~$ curl -vv -4 v6.ipv6test.app
* Could not resolve host: v6.ipv6test.app
* Closing connection 0
curl: (6) Could not resolve host: v6.ipv6test.app

<username>@ula-instance:~$ curl -vv -4 --connect-timeout 10 v4.ipv6test.app
*   Trying 54.192.51.68:80...
* ipv4 connect timeout after 4993ms, move on!
*   Trying 54.192.51.38:80...
* ipv4 connect timeout after 2496ms, move on!
*   Trying 54.192.51.24:80...
* ipv4 connect timeout after 1248ms, move on!
*   Trying 54.192.51.60:80...
* Connection timeout after 10000 ms
* Closing connection 0
curl: (28) Connection timeout after 10000 ms

सिर्फ़ IPv6 वाले एंडपॉइंट के लिए IPv4 कर्ल काम नहीं करता, क्योंकि A रिकॉर्ड के लिए डीएनएस रिज़ॉल्यूशन काम नहीं करता. जैसा कि डीएनएस टेस्ट के दौरान दिखाया गया है. सिर्फ़ IPv4 वाले एंडपॉइंट के लिए IPv4 कर्ल काम नहीं करता, क्योंकि सिर्फ़ IPv6 वाले इंस्टेंस के पास किसी भी IPv4 पते का ऐक्सेस नहीं होता. इस वजह से, हमें टाइम आउट मिलता है.

अब आईपीवी6 पर रीचेबिलिटी की जांच करते हैं.

<username>@ula-instance:~$ curl -vv -6 v6.ipv6test.app

<username>@ula-instance:~$ curl -vv -6 v4.ipv6test.app

यहां एक सैंपल आउटपुट दिया गया है.

<username>@ula-instance:~$ curl -vv -6 v6.ipv6test.app
*   Trying [2600:9000:20be:c000:9:ec55:a1c0:93a1]:80...
* connect to 2600:9000:20be:c000:9:ec55:a1c0:93a1 port 80 failed: Connection timed out
*   Trying [2600:9000:20be:f000:9:ec55:a1c0:93a1]:80...
* ipv6 connect timeout after 84507ms, move on!
*   Trying [2600:9000:20be:ae00:9:ec55:a1c0:93a1]:80...
* ipv6 connect timeout after 42253ms, move on!
*   Trying [2600:9000:20be:2000:9:ec55:a1c0:93a1]:80...
* ipv6 connect timeout after 21126ms, move on!
*   Trying [2600:9000:20be:b600:9:ec55:a1c0:93a1]:80...
* ipv6 connect timeout after 10563ms, move on!
*   Trying [2600:9000:20be:7600:9:ec55:a1c0:93a1]:80...
* ipv6 connect timeout after 5282ms, move on!
*   Trying [2600:9000:20be:b000:9:ec55:a1c0:93a1]:80...
* ipv6 connect timeout after 2640ms, move on!
*   Trying [2600:9000:20be:3400:9:ec55:a1c0:93a1]:80...
* ipv6 connect timeout after 2642ms, move on!
* Failed to connect to v6.ipv6test.app port 80 after 300361 ms: Timeout was reached
* Closing connection 0

<username>@ula-instance:~$ curl -vv -6 v4.ipv6test.app
*   Trying [64:ff9b::36c0:333c]:80...
* Connected to v4.ipv6test.app (64:ff9b::36c0:333c) port 80 (#0)
> GET / HTTP/1.1

##
## <Output truncated for brevity>
##

वहीं, IPv6-only वेबसाइट के लिए कर्ल करने का अनुरोध पूरा नहीं होता, क्योंकि यूएलए सबनेट सीधे तौर पर इंटरनेट से कनेक्ट नहीं होते. IPv4-ओनली वेबसाइट के लिए कर्ल कमांड काम करती है, क्योंकि DNS64 और NAT64, GUA और ULA इंस्टेंस के लिए एक ही तरीके से काम करते हैं. इसके लिए, सिर्फ़ यह ज़रूरी है कि इंस्टेंस सिर्फ़ IPv6 हो.

डुअल-स्टैक यूएलए इंस्टेंस से DNS64/NAT64 की जांच करना

सबसे पहले, ड्यूअल-स्टैक यूएलए इंस्टेंस "dualstack-ula-instance" से SSH करें. हमें "–tunnel-through-iap" फ़्लैग का इस्तेमाल करना होगा, ताकि gcloud को IAP के लिए IPv4 पते का इस्तेमाल करने के लिए मजबूर किया जा सके.

gcloud compute ssh dualstack-ula-instance --project $projectname --zone $zonename --tunnel-through-iap 

<username>@dualstack-ula-instance:~$

अब "host" यूटिलिटी का इस्तेमाल करके, DNS64 की जांच करते हैं.

<username>@dualstack-ula-instance:~$ host v4.ipv6test.app
v4.ipv6test.app has address 54.192.51.38
v4.ipv6test.app has address 54.192.51.24
v4.ipv6test.app has address 54.192.51.68
v4.ipv6test.app has address 54.192.51.60

<username>@dualstack-ula-instance:~$ host v6.ipv6test.app
v6.ipv6test.app has IPv6 address 2600:9000:269f:fc00:9:ec55:a1c0:93a1
v6.ipv6test.app has IPv6 address 2600:9000:269f:1c00:9:ec55:a1c0:93a1
v6.ipv6test.app has IPv6 address 2600:9000:269f:a200:9:ec55:a1c0:93a1
v6.ipv6test.app has IPv6 address 2600:9000:269f:8a00:9:ec55:a1c0:93a1
v6.ipv6test.app has IPv6 address 2600:9000:269f:c800:9:ec55:a1c0:93a1
v6.ipv6test.app has IPv6 address 2600:9000:269f:c200:9:ec55:a1c0:93a1
v6.ipv6test.app has IPv6 address 2600:9000:269f:5800:9:ec55:a1c0:93a1
v6.ipv6test.app has IPv6 address 2600:9000:269f:dc00:9:ec55:a1c0:93a1

ध्यान दें कि IPv4 का इस्तेमाल करने वाली वेबसाइट अब सिर्फ़ IPv4 पते दिखा रही है. साथ ही, अब यह सिंथेटिक DNS64 जवाब नहीं दिखा रही है. ऐसा इसलिए है, क्योंकि DNS64 सिर्फ़ IPv6 वाले इंस्टेंस पर लागू होता है. साथ ही, इसका आकलन डुअल-स्टैक इंस्टेंस के लिए नहीं किया जाता.

DNS64 की ज़रूरत को बायपास करने के लिए, /etc/hosts फ़ाइल में एक एंट्री जोड़ते हैं. इससे यह जांच की जा सकेगी कि NAT64 काम करता है या नहीं. डुअल-स्टैक इंस्टेंस में यह कमांड चलाएं:

<username>@dualstack-ula-instance:~$ echo '64:ff9b::36c0:3326 v4.ipv6test.app' | sudo tee -a /etc/hosts

इसके बाद, IPv6 पर ipv4 वेबसाइट तक पहुंचने की जांच करने के लिए, curl का इस्तेमाल करें

<username>@dualstack-ula-instance:~$ curl -vv -6 --connect-timeout 10 v4.ipv6test.app

ऊपर दी गई कमांड का सैंपल आउटपुट यहां दिया गया है

<username>@dualstack-ula-instance:~$ curl -vv -6 --connect-timeout 10 v4.ipv6test.app

*   Trying [64:ff9b::36c0:3326]:80...
* ipv6 connect timeout after 10000ms, move on!
* Failed to connect to v4.ipv6test.app port 80 after 10001 ms: Timeout was reached
* Closing connection 0
curl: (28) Failed to connect to v4.ipv6test.app port 80 after 10001 ms: Timeout was reached

कर्ल का समय खत्म हो जाना चाहिए, क्योंकि DNS64 की तरह ही NAT64 के लिए भी ज़रूरी है कि इंस्टेंस सिर्फ़ IPv6 हो.

इस बात की पुष्टि करने के लिए कि NAT64, डुअल-स्टैक इंस्टेंस पर लागू नहीं हो रहा है, "get-nat-mapping" कमांड का इस्तेमाल करके उन सभी पोर्ट मैपिंग की सूची बनाएं जिन्हें NAT गेटवे लागू कर रहा है. Cloud Shell में ये कमांड चलाएं:

gcloud compute routers get-nat-mapping-info \
      nat64-router --region $regionname \
      --project $projectname

आपको नीचे दिए गए स्निपेट जैसा आउटपुट मिलेगा:

---
instanceName: gua-instance
interfaceNatMappings:
- natIpPortRanges:
  - 34.47.60.91:1024-1055
  numTotalDrainNatPorts: 0
  numTotalNatPorts: 32
  sourceAliasIpRange: ''
  sourceVirtualIp: '2600:1900:40e0:6f:0:1::'
- natIpPortRanges:
  - 34.47.60.91:32768-32799
  numTotalDrainNatPorts: 0
  numTotalNatPorts: 32
  sourceAliasIpRange: ''
  sourceVirtualIp: '2600:1900:40e0:6f:0:1::'
---
instanceName: ula-instance
interfaceNatMappings:
- natIpPortRanges:
  - 34.47.60.91:1056-1087
  numTotalDrainNatPorts: 0
  numTotalNatPorts: 32
  sourceAliasIpRange: ''
  sourceVirtualIp: fd20:9c2:93fc:2800:0:0:0:0
- natIpPortRanges:
  - 34.47.60.91:32800-32831
  numTotalDrainNatPorts: 0
  numTotalNatPorts: 32
  sourceAliasIpRange: ''
  sourceVirtualIp: fd20:9c2:93fc:2800:0:0:0:0

NAT आउटपुट से पता चलता है कि NAT64 गेटवे ने सिर्फ़ IPv6 वाले GUA और ULA इंस्टेंस के लिए पोर्ट असाइन किए हैं, लेकिन डुअल-स्टैक इंस्टेंस के लिए नहीं.

8. व्यवस्थित करें

क्लाउड राऊटर को बंद करना

Cloud Shell में, यह तरीका अपनाएं:

gcloud compute routers delete nat64-router \
      --region $regionname \
      --project $projectname --quiet

डीएनएस नीति को अनबाइंड करना और उसे मिटाना

Cloud Shell में, यह तरीका अपनाएं:

gcloud beta dns policies update allow-dns64 \
    --networks="" \
    --project $projectname
gcloud beta dns policies delete allow-dns64 \
    --project $projectname --quiet

इंस्टेंस मिटाना

Cloud Shell में, यह कार्रवाई करें: (ध्यान दें, gcloud beta का इस्तेमाल इसलिए किया जाता है, ताकि हम इंस्टेंस को तेज़ी से मिटाने के लिए, no-graceful-shutdown फ़्लैग का इस्तेमाल कर सकें)

gcloud beta compute instances delete gua-instance \
         --zone $zonename \
         --no-graceful-shutdown \
         --project=$projectname --quiet

gcloud beta compute instances delete ula-instance \
         --zone $zonename \
         --no-graceful-shutdown \
         --project=$projectname --quiet

gcloud beta compute instances delete dualstack-ula-instance \
         --zone $zonename \
         --no-graceful-shutdown \
         --project=$projectname --quiet

सबनेट मिटाना

Cloud Shell में, यह तरीका अपनाएं:

gcloud compute networks subnets delete gua-v6only-subnet \
    --project=$projectname --quiet \
    --region=$regionname
 
gcloud compute networks subnets delete ula-v6only-subnet \
    --project=$projectname --quiet \
    --region=$regionname

gcloud compute networks subnets delete ula-dualstack-subnet \
    --project=$projectname --quiet \
    --region=$regionname

फ़ायरवॉल के नियमों को हटाना

Cloud Shell में, यह तरीका अपनाएं:

gcloud compute firewall-rules delete allow-v6-iap \
       --project=$projectname \
       --quiet

gcloud compute firewall-rules delete allow-v6-ssh-ula \
       --project=$projectname \
       --quiet

gcloud compute firewall-rules delete allow-v4-iap \
--project=$projectname \
--quiet

VPC को मिटाना

Cloud Shell में, यह तरीका अपनाएं:

gcloud compute networks delete ipv6-only-vpc \
       --project=$projectname \
       --quiet

आईएएम अनुमतियों और सेवा खाते को मिटाना

Cloud Shell में, यह तरीका अपनाएं:

gcloud projects remove-iam-policy-binding  $projectname \
--member=serviceAccount:ipv6-codelab@$projectname.iam.gserviceaccount.com \
--role=roles/compute.instanceAdmin.v1

gcloud iam service-accounts delete \
     ipv6-codelab@$projectname.iam.gserviceaccount.com \
     --quiet \
     --project $projectname

9. बधाई हो

आपने NAT64 और DNS64 का इस्तेमाल करके, IPv6-ओनली इंस्टेंस को इंटरनेट पर IPv4-ओनली डेस्टिनेशन तक पहुंचने की अनुमति दे दी है.

आगे क्या करना है?

यहां दिए गए कुछ कोडलैब देखें...

इसके बारे में और पढ़ें और वीडियो देखें

संदर्भ दस्तावेज़