الوصول إلى Google APIs من مضيفين داخل المؤسسة باستخدام عناوين IPv6

1. مقدمة

توفّر خدمة "الوصول الخاص إلى Google" للمضيفين داخل المؤسسة طريقة تتيح للأنظمة داخل المؤسسة الاتصال بواجهات برمجة التطبيقات والخدمات من Google من خلال توجيه حركة البيانات عبر اتصال نفَقي Cloud VPN أو ربط شبكة LAN افتراضية (VLAN) بخدمة Cloud Interconnect. تُعدّ خدمة Private Google Access للمضيفين المحليين بديلاً عن الاتصال بخدمات وواجهات Google APIs عبر الإنترنت.

يتطلّب استخدام Private Google Access للمضيفين المحليين توجيه الطلبات إلى واجهات Google APIs إلى عناوين IP افتراضية (VIP). بالنسبة إلى الإصدار 6 من بروتوكول الإنترنت، يتم استخدام عناوين IP التالية:

  • بالنسبة إلى private.googleapis.com: 2600:2d00:0002:2000::/64
  • بالنسبة إلى restricted.googleapis.com: 2600:2d00:0002:1000::/64

يحدّد عنوان IP الظاهري الذي تختاره الخدمات التي يمكنك الوصول إليها. في هذا الدرس التطبيقي حول الترميز، سنستخدم private.googleapis.com. لمزيد من المعلومات، يُرجى الاطّلاع على خيارات النطاق.

يوضّح هذا الدرس التطبيقي حول الترميز كيفية تفعيل خدمة Private Google Access للمضيفين المحليين الذين يستخدمون عناوين IPv6. ستُعدّ شبكة سحابة VPC باسم on-premises-vpc لتمثيل بيئة محلية. بالنسبة إلى عملية النشر، لن يكون هناك on-premises-vpc، بل سيتم استخدام الشبكات المختلطة للوصول إلى مركز البيانات أو مقدّم خدمات السحابة الإلكترونية داخل الشركة.

ما ستنشئه

في هذا الدرس التطبيقي حول الترميز، ستنشئ شبكة IPv6 شاملة توضّح إمكانية الوصول إلى واجهة برمجة التطبيقات الخاصة بخدمة التخزين في السحابة الإلكترونية من خلال استخدام CNAME *.googleapis.com إلى عنوان IPv6 الخاص بـ private.googleapis.com 2600:2d00:0002:2000::/64 كما هو موضّح في الشكل 1.

الشكل 1

a0fc56abf24f3535.png

أهداف الدورة التعليمية

  • كيفية إنشاء شبكة VPC ذات حزمة بروتوكول مزدوجة
  • كيفية إنشاء شبكة HA VPN باستخدام IPv6
  • كيفية تعديل نظام أسماء النطاقات للوصول إلى Private Google Access
  • كيفية إنشاء اتصال Private Google Access والتحقّق من صحته

المتطلبات

  • مشروع Google Cloud

2. قبل البدء

تعديل المشروع ليتوافق مع الدرس العملي

يستفيد هذا الدرس التطبيقي حول الترميز من المتغيرات $للمساعدة في تنفيذ إعدادات gcloud في Cloud Shell.

داخل Cloud Shell، اتّبِع الخطوات التالية:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

3- إنشاء شبكة VPC عابرة

f6932f551b5acac0.png

إنشاء شبكة VPC عابرة

داخل Cloud Shell، اتّبِع الخطوات التالية:

gcloud compute networks create transit-vpc --project=$projectname --subnet-mode=custom --mtu=1460 --enable-ula-internal-ipv6 --bgp-routing-mode=regional

4. إنشاء الشبكة داخل المؤسسة

58d75cbc9cb20a51.png

تمثّل شبكة السحابة الافتراضية الخاصة (VPC) هذه بيئة محلية.

إنشاء شبكة VPC محلية

داخل Cloud Shell، اتّبِع الخطوات التالية:

gcloud compute networks create on-premises-vpc --project=$projectname --subnet-mode=custom --mtu=1460 --enable-ula-internal-ipv6 --bgp-routing-mode=regional

إنشاء الشبكة الفرعية

داخل Cloud Shell، اتّبِع الخطوات التالية:

gcloud compute networks subnets create on-premises-subnet1-us-central1 --project=$projectname --range=172.16.10.0/27 --stack-type=IPV4_IPV6 --ipv6-access-type=INTERNAL --network=on-premises-vpc --region=us-central1

5- إنشاء شبكة HA VPN لشبكة VPC العابرة وشبكة VPC المحلية

إنشاء HA VPN GW لشبكة transit-vpc

a0fc56abf24f3535.png

عند إنشاء كلّ بوابة، يتمّ تخصيص عنوانَي IPv4 خارجيَّين تلقائيًا، عنوان واحد لكلّ واجهة بوابة. دوِّن عناوين IP هذه لاستخدامها لاحقًا في خطوات الإعداد.

داخل Cloud Shell، أنشئ بوابة HA VPN باستخدام نوع الحزمة IPV4_IPV6.

gcloud compute vpn-gateways create transit-vpc-vpngw \
   --network=transit-vpc\
   --region=us-central1 \
   --stack-type=IPV4_IPV6

إنشاء HA VPN GW لشبكة VPC المحلية

داخل Cloud Shell، أنشئ HA VPN GW باستخدام نوع الحزمة IPV4_IPV6

gcloud compute vpn-gateways create on-premises-vpc-vpngw \
   --network=on-premises-vpc\
   --region=us-central1 \
   --stack-type=IPV4_IPV6

التحقّق من إنشاء بوابة HA VPN

باستخدام وحدة التحكّم، انتقِل إلى "الاتصال المختلط" (Hybrid Connectivity) → "الشبكة الافتراضية الخاصة" (VPN) → "بوابات الشبكة الافتراضية الخاصة على Cloud" (CLOUD VPN GATEWAYS).

c8eed6ca929935bc.png

إنشاء Cloud Router لشبكة VPC العابرة

داخل Cloud Shell، أنشئ جهاز توجيه Cloud Router يقع في us-central1

gcloud compute routers create transit-vpc-cr-us-central1 \
   --region=us-central1 \
   --network=transit-vpc\
   --asn=65001

إنشاء Cloud Router لشبكة VPC المحلية

داخل Cloud Shell، أنشئ جهاز توجيه Cloud Router يقع في us-central1

gcloud compute routers create on-premises-vpc-cr-us-central1 \
   --region=us-central1 \
   --network=on-premises-vpc \
   --asn=65002

إنشاء أنفاق VPN لشبكة transit-vpc

ستنشئ نفقَي VPN على كل بوابة HA VPN.

إنشاء اتصال نفقي بشبكة VPN0

داخل Cloud Shell، أنشئ tunnel0:

gcloud compute vpn-tunnels create transit-vpc-tunnel0 \
    --peer-gcp-gateway on-premises-vpc-vpngw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
    --router transit-vpc-cr-us-central1 \
    --vpn-gateway transit-vpc-vpngw \
    --interface 0

إنشاء اتصال نفقي بشبكة VPN1

داخل Cloud Shell، أنشئ النفق 1:

gcloud compute vpn-tunnels create transit-vpc-tunnel1 \
    --peer-gcp-gateway on-premises-vpc-vpngw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
    --router transit-vpc-cr-us-central1 \
    --vpn-gateway transit-vpc-vpngw \
    --interface 1

إنشاء أنفاق VPN لشبكة VPC المحلية

ستنشئ نفقَي VPN على كل بوابة HA VPN.

إنشاء اتصال نفقي بشبكة VPN0

داخل Cloud Shell، أنشئ tunnel0:

gcloud compute vpn-tunnels create on-premises-tunnel0 \
    --peer-gcp-gateway transit-vpc-vpngw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
    --router on-premises-vpc-cr-us-central1 \
    --vpn-gateway on-premises-vpc-vpngw \
    --interface 0

إنشاء اتصال نفقي بشبكة VPN1

داخل Cloud Shell، أنشئ النفق 1:

gcloud compute vpn-tunnels create on-premises-tunnel1 \
    --peer-gcp-gateway transit-vpc-vpngw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
    --router on-premises-vpc-cr-us-central1 \
    --vpn-gateway on-premises-vpc-vpngw \
    --interface 1

التحقّق من صحة إنشاء اتصال نفقي بشبكة VPN

باستخدام وحدة التحكّم، انتقِل إلى "الاتصال المختلط" (Hybrid Connectivity) → "الشبكة الافتراضية الخاصة" (VPN) → "أنفاق الشبكة الافتراضية الخاصة على Cloud" (CLOUD VPN TUNNELS).

85fd5aef4b2c4010.png

إنشاء جلسات BGP

في هذا القسم، يمكنك ضبط إعدادات واجهات Cloud Router ونظراء BGP.

عند إنشاء أنفاق VPN تسمح بنقل بيانات IPv6، حدِّد --enable-ipv6 عند تنفيذ الأمر add-bgp-peer.

إنشاء واجهة وبروتوكول BGP للاتصال بين شبكتَي VPC

داخل Cloud Shell، أنشئ واجهة BGP:

gcloud compute routers add-interface transit-vpc-cr-us-central1 \
    --interface-name if-tunnel1-to-onpremise \
    --ip-address 169.254.1.1 \
    --mask-length 30 \
    --vpn-tunnel transit-vpc-tunnel0 \
    --region us-central1

داخل Cloud Shell، أنشئ جهاز BGP نظيرًا:

gcloud compute routers add-bgp-peer transit-vpc-cr-us-central1 \
    --peer-name bgp-on-premises-tunnel0 \
    --interface if-tunnel1-to-onpremise \
    --peer-ip-address 169.254.1.2 \
    --peer-asn 65002 \
    --region us-central1 \
    --enable-ipv6 \
    --ipv6-nexthop-address 2600:2d00:0:3:0:0:0:1 \
    --peer-ipv6-nexthop-address 2600:2d00:0:3:0:0:0:2

داخل Cloud Shell، أنشئ واجهة BGP:

gcloud compute routers add-interface transit-vpc-cr-us-central1 \
    --interface-name if-tunnel2-to-onpremise \
    --ip-address 169.254.2.1 \
    --mask-length 30 \
    --vpn-tunnel transit-vpc-tunnel1 \
    --region us-central1

داخل Cloud Shell، أنشئ جهاز BGP نظيرًا:

gcloud compute routers add-bgp-peer transit-vpc-cr-us-central1 \
    --peer-name bgp-on-premises-tunnel2 \
    --interface if-tunnel2-to-onpremise \
    --peer-ip-address 169.254.2.2 \
    --peer-asn 65002 \
    --region us-central1 \
    --enable-ipv6 \
    --ipv6-nexthop-address 2600:2d00:0:3:0:0:0:11 \
    --peer-ipv6-nexthop-address 2600:2d00:0:3:0:0:0:12

إنشاء واجهة BGP وإعداد تبادل معلومات بين الشبكات لشبكة VPC محلية

داخل Cloud Shell، أنشئ واجهة BGP:

gcloud compute routers add-interface on-premises-vpc-cr-us-central1\
    --interface-name if-tunnel1-to-hub-vpc \
    --ip-address 169.254.1.2 \
    --mask-length 30 \
    --vpn-tunnel on-premises-tunnel0 \
    --region us-central1

داخل Cloud Shell، أنشئ جهاز BGP نظيرًا:

gcloud compute routers add-bgp-peer on-premises-vpc-cr-us-central1 \
    --peer-name bgp-transit-vpc-tunnel0 \
    --interface if-tunnel1-to-hub-vpc \
    --peer-ip-address 169.254.1.1 \
    --peer-asn 65001 \
    --region us-central1 \
    --enable-ipv6 \
    --ipv6-nexthop-address 2600:2d00:0:3:0:0:0:2 \
    --peer-ipv6-nexthop-address 2600:2d00:0:3:0:0:0:1

داخل Cloud Shell، أنشئ واجهة BGP:

gcloud compute routers add-interface on-premises-vpc-cr-us-central1\
    --interface-name if-tunnel2-to-hub-vpc \
    --ip-address 169.254.2.2 \
    --mask-length 30 \
    --vpn-tunnel on-premises-tunnel1 \
    --region us-central1

داخل Cloud Shell، أنشئ جهاز BGP نظيرًا:

gcloud compute routers add-bgp-peer  on-premises-vpc-cr-us-central1\
    --peer-name bgp-transit-vpc-tunnel1\
    --interface if-tunnel2-to-hub-vpc \
    --peer-ip-address 169.254.2.1 \
    --peer-asn 65001 \
    --region us-central1 \
    --enable-ipv6 \
    --ipv6-nexthop-address 2600:2d00:0:3:0:0:0:12 \
    --peer-ipv6-nexthop-address 2600:2d00:0:3:0:0:0:11

انتقِل إلى الاتصال المختلط → شبكة VPN لعرض تفاصيل نفق VPN.

e100e31ea22c8124.png

التحقّق من أنّ شبكة VPC العابرة تتعرّف على مسارات الإصدار الرابع من بروتوكول الإنترنت (IPv4) وIPv6 عبر شبكة HA VPN

بعد إنشاء أنفاق HA VPN وجلسات BGP، يتم استخلاص المسارات من on-premises-vpc من transit-vpc. باستخدام وحدة التحكّم، انتقِل إلى شبكة VPC → شبكات VPC → transit-vpc → مسارات.

لاحظ مسارات IPv4 وIPv6 الديناميكية التي تم التعرّف عليها والموضّحة أدناه:

216bde7d08d75ec4.png

التحقّق من أنّ on-premises-vpc لا يتعرّف على المسارات عبر HA VPN

لا تحتوي شبكة Transit-vpc على شبكة فرعية، وبالتالي لن يعلن Cloud Router عن أي شبكات فرعية لشبكة VPC المحلية. باستخدام وحدة التحكّم، انتقِل إلى "شبكة VPC" (VPC network) → "شبكات VPC" (VPC networks) → "شبكة VPC داخل المؤسسة" (on-premises-vpc) → "مسارات" (ROUTES).

6. الإعلان عن عنوان IP الظاهري (VIP) الخاص بـ private.googleapis.com

للوصول إلى Private Google Access من موقعك الجغرافي، عليك إنشاء إعلان مسار مخصّص من transit-vpc. سيتم الإعلان عن عنوان IPv6 2600:2d00:0002:2000:: للبيئة المحلية وستستخدمه أحمال العمل للوصول إلى واجهات برمجة تطبيقات Google، مثل Cloud Storage وBigQuery وCloud Bigtable، بعد تعديل نظام أسماء النطاقات المحلي.

في هذا الدرس العملي، ستفعّل إمكانية الوصول إلى معظم Google APIs والخدمات بغض النظر عمّا إذا كانت متوافقة مع عناصر التحكّم في خدمة الشبكة الافتراضية الخاصة.

من وحدة التحكّم، انتقِل إلى "الاتصال المختلط" (Hybrid Connectivity) → "أجهزة توجيه السحابة الإلكترونية" (Cloud Routers) → transit-vpc-cr-us-central1، ثمّ اختَر "تعديل" (EDIT).

3e36e3b5ea741ec5.png

في قسم "المسارات المُعلَن عنها"، اختَر الخيار إنشاء مسارات مخصّصة، وعدِّل الحقول استنادًا إلى المثال أدناه، ثم اختَر تم، وانقر على حفظ.

9283aba7b214f70d.png

التحقّق من أنّ شبكة VPC المحلية تتعرّف على مسارات IPv6

بعد الإعلان عن عنوان IP الظاهري الخاص بـ private.googleapis.com من شبكة VPC العابرة، ستكون شبكة VPC المحلية قد تعرّفت على مسارات IPv6 الديناميكية لعنوان IP الظاهري. باستخدام وحدة التحكّم، انتقِل إلى "شبكة VPC" (VPC network) → "شبكات VPC" (VPC networks) → "شبكة VPC داخل المؤسسة" (on-premises-vpc) → "مسارات" (ROUTES).

لاحظ مسارات IPv6 المُعلن عنها من شبكة VPC العابرة:

caf3b79b035b2a20.png

7. إنشاء اتصال بواجهات Google APIs باستخدام خدمة Private Google Access

في القسم التالي، سنصل إلى Cloud Storage ونتأكّد من إمكانية الاتصال به باستخدام عنوان IP الظاهري الخاص بـ private.googleapis.com من الإصدار 6. لإجراء ذلك، علينا تنفيذ الإجراءات التالية في on-premises-vpc.

  • أنشئ قاعدة جدار حماية واردة للسماح بالوصول إلى Identity Aware Proxy (IAP) من أجل الوصول إلى SSH.
  • أنشئ Cloud Router وCloud NAT لتنزيل tcpdump وdnsutils.
  • أنشئ منطقة نظام أسماء النطاقات خاصة في Cloud DNS لنطاق googleapis.com.
  • أنشئ حزمة في Cloud Storage.

إنشاء قاعدة جدار الحماية في IAP

للسماح لميزة "الوصول إلى الأجهزة الافتراضية عبر الإنترنت" بالاتصال بأجهزة VM الافتراضية، أنشئ قاعدة جدار حماية تتضمّن ما يلي:

  • ينطبق على جميع مثيلات الأجهزة الافتراضية التي تريد إتاحتها باستخدام IAP.
  • تسمح هذه القاعدة بحركة البيانات الواردة من نطاق عناوين IP 35.235.240.0/20. يحتوي هذا النطاق على جميع عناوين IP التي تستخدمها خدمة IAP لإعادة توجيه بروتوكول TCP.

داخل Cloud Shell، أنشئ قاعدة جدار حماية IAP.

gcloud compute firewall-rules create ssh-iap-on-premises-vpc \
    --network on-premises-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

إعداد Cloud Router وNAT

يتم استخدام Cloud NAT في درس تطبيقي حول الترميز هذا لتثبيت حزمة البرامج لأنّ مثيل الجهاز الافتراضي لا يتضمّن عنوان IP خارجيًا.

داخل Cloud Shell، أنشئ Cloud Router.

gcloud compute routers create on-premises-cr-us-central1-nat --network on-premises-vpc --region us-central1

داخل Cloud Shell، أنشئ بوابة NAT.

gcloud compute routers nats create on-premises-nat-us-central1 --router=on-premises-cr-us-central1-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

إنشاء مثيل اختبار، on-premises-testbox

أنشئ آلة افتراضية تجريبية سيتم استخدامها لاختبار صحة الاتصال بعنوان IP الظاهري الخاص بـ private.googleapis.com المتوافق مع IPv6.

أنشئ المثيل داخل Cloud Shell.

gcloud compute instances create on-premises-testbox \
    --project=$projectname \
    --machine-type=e2-micro \
    --stack-type=IPV4_IPV6 \
    --image-family debian-10 \
    --no-address \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=on-premises-subnet1-us-central1 \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump -y
      sudo apt-get install dnsutils -y"

إنشاء منطقة خاصة في Cloud DNS

سنستخدم Cloud DNS لإنشاء منطقة خاصة وسجلّات لـ ‎ *.googleapis.com، وفي ما يلي الخطوات المطلوبة.

في Cloud Shell، أنشئ منطقة نظام أسماء نطاقات خاص v6-googleapis.com.

gcloud dns --project=$projectname managed-zones create v6-googleapis --description="" --dns-name="googleapis.com." --visibility="private" --networks="on-premises-vpc"

في Cloud Shell، أنشئ سجلّ AAAA لـ private.googleapis.com يشير إلى عنوان IPv6 2600:2d00:0002:2000::.

gcloud dns --project=$projectname record-sets create private.googleapis.com. --zone="v6-googleapis" --type="AAAA" --ttl="300" --rrdatas="2600:2d00:0002:2000::"

في Cloud Shell، أنشئ سجلّ CNAME لـ ‎ *.googleapis.com للإشارة إلى private.googleapis.com.

gcloud dns --project=$projectname record-sets create *.googleapis.com. --zone="v6-googleapis" --type="CNAME" --ttl="300" --rrdatas="private.googleapis.com."

التحقّق من صحة المنطقة الخاصة في Cloud DNS

انتقِل إلى "خدمات الشبكة" (Network services) →‏ Cloud DNS →‏ v6-googleapis.

455e355195a2a48f.png

إنشاء حزمة Cloud Storage

داخل Cloud Shell، أنشئ حزمة Cloud Storage واستبدِل bucket_name باسم فريد وعام تفضّله، وجرِّب اسمًا آخر إذا كان قيد الاستخدام.

gsutil mb  -l us-central1 -b on gs://bucket_name

8. الوصول إلى واجهات Google API والتحقّق من صحتها باستخدام عناوين IPv6

في القسم التالي، ستستخدم بروتوكول SSH في نافذتَي Cloud Shell. يتم استخدام نافذة الوحدة الطرفية الأولى للتحقّق من صحة عملية البحث عن IPv6 باستخدام tcpdump، بينما يتم استخدام النافذة الثانية للوصول إلى حزمة التخزين في السحابة الإلكترونية.

داخل Cloud Shell، نفِّذ عملية ssh إلى الجهاز الظاهري التجريبي on-premises-testbox.

 gcloud compute ssh --zone "us-central1-a" "on-premises-testbox" --project "$projectname"

في نافذة Cloud Shell الطرفية الأولى، ابدأ tcpdump وراقِب المنفذ 53 بحثًا عن زيارات نظام أسماء النطاقات.

sudo tcpdump -nn -i ens4 port 53

المثال أدناه:

user@on-premises-testbox:~$ sudo tcpdump -nn -i ens4 port 53

افتح نافذة Cloud Shell جديدة من خلال النقر على "+". بعد فتح علامة التبويب الجديدة، عدِّل متغيّر اسم المشروع.

داخل Cloud Shell، عدِّل متغيّر اسم المشروع.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

داخل Cloud Shell 2، نفِّذ عملية SSH إلى الجهاز الظاهري التجريبي on-premises-testbox.

gcloud compute ssh --zone "us-central1-a" "on-premises-testbox" --project "$projectname"

تنفيذ عملية dig للتحقّق من صحة بحث نظام أسماء النطاقات

داخل نافذة Cloud Shell الطرفية الثانية، نفِّذ عملية dig على storage.googleapis.com.

dig AAAA storage.googleapis.com

افحص قسم الإجابة (ANSWER SECTION)، وسجل CNAME الخاص بمنطقة نظام أسماء النطاقات الخاصة storage.googleapis.com إلى AAAA 2600:2d00:2:2000:: الخاص بـ private.googleapis.com، كما هو موضّح في المثال أدناه:

user@on-premises-testbox:~$ dig AAAA storage.googleapis.com

; <<>> DiG 9.11.5-P4-5.1+deb10u8-Debian <<>> AAAA storage.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2782
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;storage.googleapis.com.                IN      AAAA

;; ANSWER SECTION:
storage.googleapis.com. 300     IN      CNAME   private.googleapis.com.
private.googleapis.com. 300     IN      AAAA    2600:2d00:2:2000::

;; Query time: 9 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Mon Feb 20 01:56:33 UTC 2023
;; MSG SIZE  rcvd: 101

في نافذة Cloud Shell الطرفية الأولى، افحص tcpdump الذي يؤكّد بشكل أكبر التحويل باستخدام نظام أسماء النطاقات إلى AAAA 2600:2d00:2:2000::.

user@on-premises-testbox:~$ sudo tcpdump -nn -i ens4 port 53
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens4, link-type EN10MB (Ethernet), capture size 262144 bytes
01:56:33.473208 IP 172.16.10.3.41476 > 169.254.169.254.53: 2782+ [1au] AAAA? storage.googleapis.com. (63)
01:56:33.482580 IP 169.254.169.254.53 > 172.16.10.3.41476: 2782 2/0/1 CNAME private.googleapis.com., AAAA 2600:2d00:2:2000:: (101)

استنادًا إلى dig وtcpdump، يمكننا الاستنتاج أنّه يتم تحقيق حلّ نظام أسماء النطاقات (DNS) إلى storage.googleapis.com من خلال 2600:2d00:2:2000::، وهو عنوان IPv6 الخاص بـ private.googleapis.com.

تنفيذ gsutil list للتحقّق من إمكانية الوصول إلى التخزين في السحابة الإلكترونية

في نافذة Cloud Shell الثانية، نفِّذ عملية إدراج في حزمة التخزين التي تم إنشاؤها سابقًا باستخدام gsutil. استبدِل bucket_name بالحزمة التي أنشأتها سابقًا.

gsutil -d ls gs://bucket_name

مثال باستخدام حزمة التخزين في السحابة الإلكترونية codelab-ipv6، افحص ناتج تصحيح الأخطاء الذي يشير إلى storage.googleapis.com وHTTP/1.1 200 OK.

user@on-premises-testbox:~$ gsutil -d ls gs://codelab-ipv6
***************************** WARNING *****************************
*** You are running gsutil with debug output enabled.
*** Be aware that debug output includes authentication credentials.
*** Make sure to remove the value of the Authorization header for
*** each HTTP request printed to the console prior to posting to
*** a public medium such as a forum post or Stack Overflow.
***************************** WARNING *****************************
gsutil version: 5.19
checksum: 49a18b9e15560adbc187bab09c51b5fd (OK)
boto version: 2.49.0
python version: 3.9.16 (main, Jan 10 2023, 02:29:25) [Clang 12.0.1 ]
OS: Linux 4.19.0-23-cloud-amd64
multiprocessing available: True
using cloud sdk: True
pass cloud sdk credentials to gsutil: True
config path(s): /etc/boto.cfg
gsutil path: /usr/lib/google-cloud-sdk/bin/gsutil
compiled crcmod: True
installed via package manager: False
editable install: False
shim enabled: False
Command being run: /usr/lib/google-cloud-sdk/platform/gsutil/gsutil -o GSUtil:default_project_id=myprojectid -o GoogleCompute:service_account=default -d ls gs://codelab-ipv6
config_file_list: ['/etc/boto.cfg']
config: [('working_dir', '/mnt/pyami'), ('debug', '0'), ('https_validate_certificates', 'true'), ('working_dir', '/mnt/pyami'), ('debug', '0'), ('default_project_id', 'myproject'), ('default_api_version', '2')]
DEBUG 0220 02:01:14.713012 multiprocess_file_storage.py] Read credential file
INFO 0220 02:01:14.714742 base_api.py] Calling method storage.objects.list with StorageObjectsListRequest: <StorageObjectsListRequest
 bucket: 'codelab-ipv6'
 delimiter: '/'
 maxResults: 1000
 projection: ProjectionValueValuesEnum(noAcl, 1)
 versions: False>
INFO 0220 02:01:14.715939 base_api.py] Making http GET to https://storage.googleapis.com/storage/v1/b/codelab-ipv6/o?alt=json&fields=prefixes%2Citems%2Fname%2CnextPageToken&delimiter=%2F&maxResults=1000&projection=noAcl&versions=False
INFO 0220 02:01:14.716369 base_api.py] Headers: {'accept': 'application/json',
 'accept-encoding': 'gzip, deflate',
 'content-length': '0',
 'user-agent': 'apitools Python/3.9.16 gsutil/5.19 (linux) analytics/disabled '
               'interactive/True command/ls google-cloud-sdk/416.0.0'}
INFO 0220 02:01:14.716875 base_api.py] Body: (none)
connect: (storage.googleapis.com, 443)
send: b'GET /storage/v1/b/codelab-ipv6/o?alt=json&fields=prefixes%2Citems%2Fname%2CnextPageToken&delimiter=%2F&maxResults=1000&projection=noAcl&versions=False HTTP/1.1\r\nHost: storage.googleapis.com\r\ncontent-length: 0\r\nuser-agent: apitools Python/3.9.16 gsutil/5.19 (linux) analytics/disabled
<SNIP>
reply: 'HTTP/1.1 200 OK\r\n'
header: X-GUploader-UploadID: ADPycdvunHlbN1WQBxDr_LefzLaH_HY1bBH22X7IxX9sF1G2Yo_7-nhYwjxUf6N7AF9Zg_JDwPxYtuNJiFutfd6qauEfohYPs7mE
header: Content-Type: application/json; charset=UTF-8
header: Date: Mon, 20 Feb 2023 02:01:14 GMT
header: Vary: Origin
header: Vary: X-Origin
header: Cache-Control: private, max-age=0, must-revalidate, no-transform
header: Expires: Mon, 20 Feb 2023 02:01:14 GMT
header: Content-Length: 3
header: Server: UploadServer
INFO 0220 02:01:14.803286 base_api.py] Response of type Objects: <Objects
 items: []
 prefixes: []>
user@on-premises-testbox:~$ 

في نافذة Cloud Shell الطرفية الأولى، افحص tcpdump الذي يؤكّد بشكل أكبر التحويل باستخدام نظام أسماء النطاقات إلى AAAA 2600:2d00:2:2000::.

eepakmichael@on-premises-testbox:~$ sudo tcpdump -nn -i ens4 port 53
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens4, link-type EN10MB (Ethernet), capture size 262144 bytes
02:01:14.725000 IP 172.16.10.3.48792 > 169.254.169.254.53: 7056+ A? storage.googleapis.com. (40)
02:01:14.725106 IP 172.16.10.3.48792 > 169.254.169.254.53: 50841+ AAAA? storage.googleapis.com. (40)
02:01:14.732516 IP 169.254.169.254.53 > 172.16.10.3.48792: 50841 2/0/0 CNAME private.googleapis.com., AAAA 2600:2d00:2:2000:: (90)

اخرج من نظام تشغيل مثيل on-premises-testbox، وارجع إلى طلب Cloud Shell.

9- تنظيف

داخل Cloud Shell، نفِّذ ما يلي:

gcloud compute vpn-tunnels delete transit-vpc-tunnel0 transit-vpc-tunnel1 on-premises-tunnel1   --region=us-central1 --quiet

gcloud compute vpn-tunnels delete on-premises-tunnel0 on-premises-tunnel1 --region=us-central1 --quiet

gcloud compute vpn-gateways delete on-premises-vpc-vpngw transit-vpc-vpngw --region=us-central1 --quiet

gcloud compute routers delete transit-vpc-cr-us-central1  on-premises-vpc-cr-us-central1 on-premises-cr-us-central1-nat --region=us-central1 --quiet

gcloud compute instances delete on-premises-testbox --zone=us-central1-a --quiet

gcloud compute networks subnets delete on-premises-subnet1-us-central1 --region=us-central1 --quiet

gcloud compute firewall-rules delete ssh-iap-on-premises-vpc --quiet

gcloud compute networks delete on-premises-vpc --quiet


gcloud compute networks delete transit-vpc --quiet

gsutil rb gs://bucket_name

gcloud dns record-sets delete *.googleapis.com. \
    --type=CNAME \
    --zone=v6-googleapis
        
gcloud dns record-sets delete private.googleapis.com. \
        --type=AAAA \
        --zone=v6-googleapis
        
gcloud dns managed-zones delete v6-googleapis

10. تهانينا

تهانينا، لقد نجحت في إعداد خدمة "الوصول الخاص إلى Google" والتحقّق من صحتها باستخدام IPv6.

لقد أنشأت البنية الأساسية للنقل والشبكة المحلية، وأنشأت منطقة نظام أسماء نطاقات خاصًا تتيح تحليل نطاقات Google API باستخدام IPv6. تعرّفت على كيفية اختبار إمكانية الوصول إلى IPv6 والتحقّق منها باستخدام dig وCloud Storage.

تعتقد Cosmopup أنّ الدروس التطبيقية حول الترميز رائعة!!

8c2a10eb841f7b01.jpeg

ما هي الخطوات التالية؟

اطّلِع على بعض دروس الترميز التطبيقية هذه...

مزيد من المعلومات والفيديوهات

المستندات المرجعية