IPv6-কেবল VM দৃষ্টান্ত তৈরি করা এবং NAT64/DNS64 সক্ষম করা

১. ভূমিকা

IPv6-এ স্থানান্তরের অন্যতম প্রধান চ্যালেঞ্জ হলো শুধুমাত্র IPv4-ভিত্তিক এন্ডপয়েন্ট এবং নেটওয়ার্কগুলিতে পৌঁছানোর যোগ্যতা বজায় রাখা। এই চ্যালেঞ্জ মোকাবেলার জন্য একটি অগ্রণী প্রযুক্তি হলো ক্লায়েন্টদের জন্য A রেকর্ডকে AAAA রেকর্ডে অনুবাদ করতে DNS64 (RFC6147-এ সংজ্ঞায়িত) এবং বিশেষ ফরম্যাটের IPv6 অ্যাড্রেসকে IPv4-এ অনুবাদ করতে NAT64 (RFC6146-এ সংজ্ঞায়িত) এর ব্যবহারকে একত্রিত করা, যেখানে IPv4 অ্যাড্রেসটি বিশেষ IPv6 অ্যাড্রেসের মধ্যে এমবেড করা থাকে। এই কোডল্যাবটি ব্যবহারকারীকে একটি গুগল ক্লাউড প্ল্যাটফর্ম (GCP) ভার্চুয়াল প্রাইভেট ক্লাউড (VPC)-এ উভয় ফিচার কনফিগার করার জন্য নির্দেশনা দেয়। একসাথে কনফিগার করা হলে, GCP NAT64 এবং DNS64 শুধুমাত্র IPv6-ভিত্তিক ইনস্ট্যান্সগুলোকে ইন্টারনেটে থাকা শুধুমাত্র IPv4-ভিত্তিক সার্ভারগুলোর সাথে যোগাযোগ করতে সক্ষম করে।

এই ল্যাবে, আপনি বিভিন্ন ধরণের IPv6 সাবনেট এবং ইনস্ট্যান্স সহ একটি VPC সেট আপ করবেন: IPv6-only GUA (গ্লোবাল ইউনিকাস্ট অ্যাড্রেস), IPv6-only ULA (ইউনিক লোকাল অ্যাড্রেস) এবং ডুয়াল-স্ট্যাক ULA। এরপর, আপনি Google Cloud-এর পরিচালিত DNS64 এবং NAT64 পরিষেবাগুলি কনফিগার ও পরীক্ষা করবেন, যাতে সেগুলোর মাধ্যমে IPv4-only ওয়েবসাইটগুলি অ্যাক্সেস করা যায়।

২. আপনি যা শিখবেন

  • কিভাবে শুধুমাত্র IPv6 সাবনেট এবং ইনস্ট্যান্স তৈরি করবেন
  • একটি VPC-এর জন্য কীভাবে গুগল ক্লাউডের পরিচালিত DNS64 পরিষেবা সক্রিয় করবেন।
  • NAT64-এর জন্য কনফিগার করা একটি গুগল ক্লাউড NAT গেটওয়ে কীভাবে তৈরি করবেন।
  • শুধুমাত্র IPv6-যুক্ত ইনস্ট্যান্স থেকে শুধুমাত্র IPv4-যুক্ত গন্তব্যে DNS64 রেজোলিউশন কীভাবে পরীক্ষা করবেন
  • সিঙ্গেল-স্ট্যাক এবং ডুয়াল-স্ট্যাক ইনস্ট্যান্সের মধ্যে DNS64 এবং NAT64-এর আচরণ কীভাবে ভিন্ন হয়
  • NAT64-এর জন্য কীভাবে একটি NAT গেটওয়ে কনফিগার করবেন।
  • শুধুমাত্র IPv6 ইনস্ট্যান্স থেকে শুধুমাত্র IPv4 গন্তব্যে NAT64 সংযোগ কীভাবে পরীক্ষা করবেন

৩. শুরু করার আগে

কোডল্যাব সমর্থন করার জন্য প্রকল্পটি আপডেট করুন।

এই কোডল্যাবটি ক্লাউড শেলে gcloud কনফিগারেশন বাস্তবায়নে সাহায্য করার জন্য $variables ব্যবহার করে।

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন।

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

বিভিন্ন ধরনের IPv6 সাবনেটের সাথে NAT64 এবং DNS64 কীভাবে কাজ করে তা দেখানোর জন্য, আপনি GUA এবং ULA উভয় ধরনের IPv6 সাবনেট ব্যবহার করে একটি একক VPC তৈরি করবেন। এছাড়াও, ডুয়াল-স্ট্যাক ভিএম-এর ক্ষেত্রে DNS64 এবং NAT64 কীভাবে প্রযোজ্য নয়, তা দেখানোর জন্য আপনি একটি ডুয়াল-স্ট্যাক সাবনেটও (ULA অ্যাড্রেসিং ব্যবহার করে) তৈরি করবেন।

এরপর আপনি DNS64 ও NAT64 কনফিগার করবেন এবং ইন্টারনেটে IPv6 ও IPv4 গন্তব্যস্থলগুলিতে সংযোগ পরীক্ষা করবেন।

৪. প্রস্তুতির ধাপসমূহ

প্রথমে, আপনার গুগল ক্লাউড প্রজেক্টে প্রয়োজনীয় সার্ভিস অ্যাকাউন্ট, আইএএম, নেটওয়ার্ক ইনফ্রাস্ট্রাকচার এবং ইনস্ট্যান্সগুলো সেট আপ করুন।

সার্ভিস অ্যাকাউন্ট এবং আইএএম বাইন্ডিং তৈরি করুন

gcloud ব্যবহার করে ইনস্ট্যান্সগুলোকে একে অপরের সাথে SSH করার অনুমতি দেওয়ার জন্য আমরা একটি নতুন সার্ভিস অ্যাকাউন্ট তৈরি করার মাধ্যমে শুরু করব। আমাদের এই সক্ষমতাটির প্রয়োজন হবে, কারণ আমরা GUA IPv6-only ইনস্ট্যান্সটি অ্যাক্সেস করার জন্য IAP ব্যবহার করতে পারি না এবং cloudshell এখনও সরাসরি IPv6 অ্যাক্সেসের অনুমতি দেয় না। cloudshell-এ নিম্নলিখিত কমান্ড(গুলি) চালান।

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

একটি VPC তৈরি করুন এবং ULA সক্রিয় করুন

ক্লাউডশেলে নিম্নলিখিত কমান্ড(গুলি) চালিয়ে কাস্টম সাবনেট মোড এবং ULA অভ্যন্তরীণ IPv6 সক্রিয় করে একটি VPC নেটওয়ার্ক তৈরি করুন।

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

ফায়ারওয়াল নিয়ম তৈরি করুন

SSH অ্যাক্সেসের অনুমতি দেওয়ার জন্য ফায়ারওয়াল নিয়ম তৈরি করুন। একটি নিয়ম সামগ্রিক ULA রেঞ্জ (fd20::/20) থেকে SSH-এর অনুমতি দেয়। আরও দুটি নিয়ম IAP-এর পূর্বনির্ধারিত IPv6 এবং IPv4 রেঞ্জ (যথাক্রমে 2600:2d00:1:7::/64, 35.235.240.0/20) থেকে ট্র্যাফিকের অনুমতি দেয়।

ক্লাউডশেলে নিম্নলিখিত কমান্ড(গুলি) চালান:

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-only সাবনেট, একটি ULA v6-only সাবনেট এবং একটি ডুয়াল-স্ট্যাক ULA সাবনেট তৈরি করুন। ক্লাউডশেলে নিম্নলিখিত কমান্ড(গুলি) চালান:

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 ইনস্ট্যান্সে একটি জাম্পবক্স হিসেবে ব্যবহার করতে পারি। ক্লাউডশেলে নিম্নলিখিত কমান্ড(গুলি) চালান:

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 করার জন্য ক্লাউডশেলে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

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

<username>@ula-instance:~$ 

আমরা ULA ইনস্ট্যান্সটিকে GUA ইনস্ট্যান্সের জন্য একটি জাম্পবক্স হিসেবেও ব্যবহার করব (কারণ IAP, GUA ইনস্ট্যান্সের সাথে কাজ করে না এবং Cloudshell VM-গুলো IPv6 ডেস্টিনেশন অ্যাক্সেস করতে পারে না)।

ULA ইনস্ট্যান্স শেলের ভিতরে থাকা অবস্থায়, নিম্নলিখিত gcloud কমান্ডটি ব্যবহার করে GUA ইনস্ট্যান্সে SSH করার চেষ্টা করুন।

কোনো ইনস্ট্যান্সের ভেতরে প্রথমবার SSH কমান্ড চালালে, এটি আপনাকে একটি SSH কীপেয়ার সেটআপ করতে বলবে। কী-টি তৈরি হওয়া এবং SSH কমান্ডটি কার্যকর না হওয়া পর্যন্ত এন্টার চাপতে থাকুন; এটি পাসফ্রেজ ছাড়া একটি নতুন কীপেয়ার তৈরি করবে।

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:~$ 

৫. শুধুমাত্র IPv6 ইনস্ট্যান্সগুলো পরীক্ষা করুন।

চলুন, উভয় IPv6-only ইনস্ট্যান্সে 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 রাউটিং টেবিল রাখি, শুধুমাত্র কম্পিউট মেটাডেটা সার্ভারে (169.254.169.154) অ্যাক্সেস দেওয়ার জন্য, যেহেতু এটি এখনও একটি শুধুমাত্র IPv4-ভিত্তিক এন্ডপয়েন্ট।

যেহেতু ইনস্ট্যান্সটি শুধুমাত্র IPv6 হওয়ার কারণে 169.254.1.2 আইপিটি গ্রহণ করে, তাই এই আইপিটি কম্পিউট মেটাডেটা সার্ভার ছাড়া অন্য কোথাও রাউট করা যায় না। ফলে, ইনস্ট্যান্সটি কার্যত সমস্ত IPv4 নেটওয়ার্ক থেকে বিচ্ছিন্ন থাকে।

কার্ল পরীক্ষা

চলুন curl ব্যবহার করে শুধুমাত্র v4 এবং v6 সংস্করণের ওয়েবসাইটগুলিতে প্রকৃত সংযোগ পরীক্ষা করে দেখি।

<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

প্রত্যাশিতভাবেই, শুধুমাত্র IPv6 ইনস্ট্যান্স থেকে কোনো IPv4 ইন্টারনেট এন্ডপয়েন্টে পৌঁছানো যায় না। DNS64 এবং NAT64 প্রোভিশনিং না করা হলে, শুধুমাত্র IPv6 ইনস্ট্যান্সটির কোনো IPv4 গন্তব্যে পৌঁছানোর পথ থাকে না। যেহেতু ইনস্ট্যান্সটির একটি GUA IPv6 অ্যাড্রেস রয়েছে, তাই IPv6 গন্তব্যে পৌঁছানো স্বাভাবিকভাবে কাজ করে।

ULA দৃষ্টান্ত পরীক্ষা করুন

"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। এবং সাবনেট রুটটি একটি ULA রেঞ্জের অন্তর্গত। (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

ULA ইনস্ট্যান্সের ক্ষেত্রে, উভয় ইন্টারনেট এন্ডপয়েন্টে পৌঁছানোর কোনো সুযোগ নেই, কারণ IPv6 এন্ডপয়েন্টের জন্য আমরা যোগাযোগের উদ্দেশ্যে একটি ULA অ্যাড্রেস ব্যবহার করতে পারি না, এবং এটি একটি শুধুমাত্র IPv6-ভিত্তিক ইনস্ট্যান্স হওয়ায় IPv4-এও এর পৌঁছানোর কোনো সুযোগ নেই।

৬. NAT64 এবং DNS64 সক্রিয় করুন

আপনার VPC-এর জন্য পরিচালিত DNS64 এবং NAT64 পরিষেবাগুলি কনফিগার করুন।

ডিএনএস৬৪

আপনার VPC-এর জন্য DNS64 সার্ভার পলিসি সক্রিয় করুন। এটি VPC-এর DNS রিজলভারকে শুধুমাত্র A-যুক্ত রেসপন্সের জন্য AAAA রেকর্ড তৈরি করতে নির্দেশ দেয়। ক্লাউডশেলে নিম্নলিখিত কমান্ড(গুলি) চালান:

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

NAT64

একটি ক্লাউড রাউটার তৈরি করুন, যা ক্লাউড NAT-এর জন্য আবশ্যক। এরপর, NAT64-এর জন্য কনফিগার করা একটি ক্লাউড NAT গেটওয়ে তৈরি করুন, এবং এটিকে সমস্ত IPv6-only সাবনেট আইপি রেঞ্জের জন্য সক্রিয় করুন ও এক্সটার্নাল আইপিগুলো অটো-অ্যালোকেট করুন। ক্লাউডশেলে নিম্নলিখিত কমান্ড(গুলো) চালান:

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
 

৭. NAT64 এবং DNS64 পরীক্ষা করুন

এখন, চলুন প্রথমে GUA ইনস্ট্যান্স এবং তারপরে ULA ইনস্ট্যান্স থেকে আপনার NAT64 এবং DNS64 কনফিগারেশন পরীক্ষা করা যাক।

একটি 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 ওয়েবসাইটের DNS রেজোলিউশন পরীক্ষা করুন (যেমন, 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) DNS রেজোলিউশন পরীক্ষা করুন। আপনি একটি A রেকর্ড (মূল IPv4) এবং সুপরিচিত প্রিফিক্স 64:ff9b::/96 ব্যবহার করে DNS64 দ্বারা সংশ্লেষিত একটি AAAA রেকর্ড উভয়ই আশা করেন।

<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-এর মাধ্যমে curl ব্যবহার করে একই v4-only এবং v6-only এন্ডপয়েন্টগুলিতে প্রকৃত সংযোগ পরীক্ষা করে দেখি।

<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>
##

উভয় curl কমান্ডই সফল হয়েছে। লক্ষ্য করুন, NAT64 এবং DNS64 একযোগে কাজ করে সফলভাবে সংযোগ স্থাপন করার ফলেই কীভাবে IPv6-এর মাধ্যমে একটি শুধুমাত্র IPv4-ভিত্তিক ওয়েবসাইটে সংযোগ করা সম্ভব হয়েছিল।

উৎস আইপি যাচাই করুন

গন্তব্য দ্বারা পর্যবেক্ষণ করা উৎস আইপি পরীক্ষা করতে চলুন একটি আইপি রিফ্লেকশন সার্ভিস ব্যবহার করি।

<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 অ্যাড্রেসটি ক্লাউড NAT গেটওয়ের এক্সটার্নাল IP অ্যাড্রেসের সাথে মিলতে হবে, কারণ এটি ইন্টারনেটে যাওয়ার আগে NAT64 ফাংশনটি সম্পাদন করে। ক্লাউডশেলে এই 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' মানটি আইপি রিফ্লেকশন ওয়েবসাইট থেকে প্রাপ্ত আউটপুটের সাথে মিলে যায়।

একটি ULA ইনস্ট্যান্স থেকে DNS64/NAT64 পরীক্ষা করা হচ্ছে

প্রথমে, "ula-instance" ULA ইনস্ট্যান্সে SSH করুন।

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

<username>@ula-instance:~$

ডিএনএস পরীক্ষা

একটি শুধুমাত্র IPv6 ওয়েবসাইটের DNS রেজোলিউশন পরীক্ষা করুন (যেমন, 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) DNS রেজোলিউশন পরীক্ষা করুন। আপনি একটি A রেকর্ড (মূল IPv4) এবং সুপরিচিত প্রিফিক্স 64:ff9b::/96 ব্যবহার করে DNS64 দ্বারা সংশ্লেষিত একটি AAAA রেকর্ড উভয়ই আশা করেন।

<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-only এবং v6-only এন্ডপয়েন্টগুলোতে প্রকৃত কানেক্টিভিটি পরীক্ষা করে দেখি।

শুরুতেই দেখানো যাক যে IPv4-এর মাধ্যমে সংযোগ স্থাপন সম্ভব নয়, যেহেতু ইনস্ট্যান্সটি শুধুমাত্র IPv6-ভিত্তিক।

<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 curl কমান্ড ব্যর্থ হয়, কারণ A রেকর্ডের জন্য DNS রেজোলিউশন ব্যর্থ হয় (যেমনটি DNS পরীক্ষার সময় দেখানো হয়েছে)। শুধুমাত্র IPv4-এর জন্য ব্যবহৃত একটি এন্ডপয়েন্টে IPv4 curl কমান্ড ব্যর্থ হয়, কারণ একটি IPv6-এর জন্য ব্যবহৃত ইনস্ট্যান্সের কোনো IPv4 অ্যাড্রেসে পৌঁছানোর ক্ষমতা থাকে না এবং এর ফলে আমরা একটি টাইমআউট পাই।

এবার IPv6-এর মাধ্যমে সংযোগযোগ্যতা পরীক্ষা করা যাক।

<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>
##

যেহেতু ULA সাবনেটগুলোর ইন্টারনেটে সরাসরি পৌঁছানোর ক্ষমতা নেই, তাই শুধুমাত্র IPv6-এর ওয়েবসাইটে curl কমান্ডটি ব্যর্থ হয়। অন্যদিকে, শুধুমাত্র IPv4-এর ওয়েবসাইটে curl কমান্ডটি সফল হয়, কারণ GUA এবং ULA ইনস্ট্যান্সগুলোর জন্য DNS64 এবং NAT64 একই ভাবে কাজ করে; এর জন্য একমাত্র শর্ত হলো ইনস্ট্যান্সটিকে অবশ্যই শুধুমাত্র IPv6-ভিত্তিক হতে হবে।

একটি ডুয়াল-স্ট্যাক ULA ইনস্ট্যান্স থেকে DNS64/NAT64 পরীক্ষা করা হচ্ছে

প্রথমে, 'dualstack-ula-instance' নামক ডুয়াল-স্ট্যাক ULA ইনস্ট্যান্সে SSH করুন। IAP-এর জন্য gcloud-কে IPv4 অ্যাড্রেস ব্যবহারে বাধ্য করতে আমাদের "–tunnel-through-iap" ফ্ল্যাগটি ব্যবহার করতে হবে।

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-only ওয়েবসাইটটি এখন আর সিন্থেটিক DNS64 উত্তর না দিয়ে শুধুমাত্র IPv4 অ্যাড্রেস দেখাচ্ছে। এর কারণ হলো, DNS64 শুধুমাত্র IPv6-only ইনস্ট্যান্সের ক্ষেত্রেই প্রযোজ্য এবং ডুয়াল-স্ট্যাক ইনস্ট্যান্সের জন্য এটি মূল্যায়ন করা হয় না।

DNS64-এর প্রয়োজনীয়তা এড়াতে, NAT64 কাজ করছে কিনা তা পরীক্ষা করার জন্য /etc/hosts ফাইলে একটি এন্ট্রি যোগ করা যাক। ডুয়াল-স্ট্যাক ইনস্ট্যান্সের ভিতরে নিম্নলিখিত কমান্ডটি চালান:

<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

`curl` কমান্ডটির টাইমআউট হওয়া উচিত, কারণ DNS64-এর মতোই, NAT64 প্রয়োগ হওয়ার জন্যও ইনস্ট্যান্সটিকে শুধুমাত্র IPv6-ভিত্তিক হতে হয়।

ডুয়াল-স্ট্যাক ইনস্ট্যান্সটিতে NAT64 আসলেই প্রয়োগ হচ্ছে না, তা নিশ্চিত করতে, NAT গেটওয়ে যে সমস্ত পোর্ট ম্যাপিং প্রয়োগ করছে তার তালিকা দেখতে "get-nat-mapping" কমান্ডটি ব্যবহার করা যাক। ক্লাউডশেলে নিম্নলিখিত কমান্ড(গুলি) চালান:

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-only GUA এবং ULA ইনস্ট্যান্সগুলোর জন্য পোর্ট বরাদ্দ করেছে, কিন্তু ডুয়াল-স্ট্যাক ইনস্ট্যান্সটির জন্য করেনি।

৮. পরিষ্কার করুন

ক্লাউড রাউটার পরিষ্কার করুন

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

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

ডিএনএস নীতি আনবাইন্ড এবং পরিষ্কার করুন

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

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

ইনস্ট্যান্সগুলি পরিষ্কার করুন

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন: (উল্লেখ্য, দ্রুততর ইনস্ট্যান্স ডিলিট অপারেশনের জন্য no-graceful-shutdown ফ্ল্যাগটি ব্যবহার করতে সক্ষম করতে gcloud beta ব্যবহৃত হয়)

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

সাবনেট পরিষ্কার করুন

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

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

ফায়ারওয়াল নিয়ম পরিষ্কার করুন

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

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

ভিপিসি পরিষ্কার করুন

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

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

IAM অনুমতি এবং পরিষেবা অ্যাকাউন্ট পরিষ্কার করুন

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

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

৯. অভিনন্দন

আপনি সফলভাবে NAT64 এবং DNS64 ব্যবহার করে শুধুমাত্র IPv6 ইনস্ট্যান্সগুলোকে ইন্টারনেটে শুধুমাত্র IPv4-ভিত্তিক গন্তব্যস্থলে পৌঁছানোর অনুমতি দিয়েছেন।

এরপর কী?

এই কোডল্যাবগুলো দেখে নিন...

আরও পড়ুন ও ভিডিও

রেফারেন্স নথি