1. مقدمة
توفّر خدمة "الوصول الخاص إلى Google" للمضيفين داخل المؤسسة طريقة تتيح للأنظمة داخل المؤسسة الاتصال بواجهات برمجة التطبيقات والخدمات من Google من خلال توجيه حركة البيانات عبر نفق Cloud VPN أو ربط شبكة محلية ظاهرية (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
يحدّد مستوى VIP الذي تختاره الخدمات التي يمكنك الوصول إليها. في هذا الدرس التطبيقي حول الترميز، سنستخدم private.googleapis.com. لمزيد من المعلومات، يُرجى الاطّلاع على خيارات النطاق.
يوضّح هذا الدرس التطبيقي حول الترميز كيفية تفعيل ميزة "الوصول الخاص إلى Google" للمضيفين داخل المؤسسة الذين يستخدمون عناوين IPv6. ستُعدّ شبكة سحابة VPC باسم on-premises-vpc لتمثيل بيئة محلية. بالنسبة إلى عملية النشر، لن يكون هناك on-premises-vpc، بل سيتم استخدام الشبكات المختلطة للوصول إلى مركز البيانات أو مقدّم خدمات السحابة الإلكترونية داخل الشركة.
ما ستنشئه
في هذا الدرس التطبيقي حول الترميز، ستنشئ شبكة IPv6 شاملة توضّح إمكانية الوصول من الموقع المحلي إلى واجهة برمجة التطبيقات الخاصة بخدمة التخزين في السحابة الإلكترونية باستخدام CNAME *.googleapis.com إلى عنوان IPv6 الخاص بـ private.googleapis.com 2600:2d00:0002:2000::/64 كما هو موضّح في الشكل 1.
الشكل 1

أهداف الدورة التعليمية
- كيفية إنشاء شبكة VPC ذات حزمة بروتوكول مزدوجة
- كيفية إنشاء شبكة HA VPN باستخدام IPv6
- كيفية تعديل نظام أسماء النطاقات للوصول إلى Private Google Access
- كيفية إنشاء اتصال Private Google Access والتحقّق من صحته
المتطلبات
- مشروع Google Cloud
2. قبل البدء
تعديل المشروع ليتوافق مع الدرس العملي
يستخدِم هذا الدرس التطبيقي حول الترميز $variables للمساعدة في تنفيذ عملية إعداد gcloud في Cloud Shell.
داخل Cloud Shell، اتّبِع الخطوات التالية:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname
3- إنشاء شبكة VPC عابرة

إنشاء شبكة 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. إنشاء الشبكة داخل المؤسسة

تمثّل شبكة السحابة الافتراضية الخاصة (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

عند إنشاء كلّ بوابة، يتمّ تخصيص عنوانَي IPv4 خارجيَّين تلقائيًا، عنوان واحد لكلّ واجهة بوابة. دوِّن عناوين IP هذه لاستخدامها لاحقًا في خطوات الإعداد.
في Cloud Shell، أنشئ HA VPN GW باستخدام نوع الحزمة 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 باستخدام نوع الحزمة 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).

إنشاء 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).

إنشاء جلسات 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.

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

التحقّق من أنّ 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 بغض النظر عمّا إذا كانت متوافقة مع عناصر التحكّم في خدمة VPC.
من وحدة التحكّم، انتقِل إلى "الاتصال المختلط" (Hybrid Connectivity) → "أجهزة توجيه السحابة الإلكترونية" (Cloud Routers) → transit-vpc-cr-us-central1، ثمّ اختَر "تعديل" (EDIT).

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

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

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.

إنشاء حزمة Cloud Storage
داخل Cloud Shell، أنشئ حزمة Cloud Storage واستبدِل bucket_name باسم فريد وعام تفضّله، وجرِّب اسمًا آخر إذا كان قيد الاستخدام.
gsutil mb -l us-central1 -b on gs://bucket_name
8. الوصول إلى Google APIs والتحقّق من صحتها باستخدام عناوين 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 أنّ الدروس التطبيقية حول الترميز رائعة!!

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