با استفاده از آدرس‌های IPv6 از میزبان‌های داخلی به Google API دسترسی داشته باشید

۱. مقدمه

دسترسی خصوصی گوگل برای میزبان‌های داخلی، راهی را برای سیستم‌های داخلی فراهم می‌کند تا با مسیریابی ترافیک از طریق یک تونل Cloud VPN یا یک اتصال VLAN برای Cloud Interconnect ، به APIها و سرویس‌های گوگل متصل شوند. دسترسی خصوصی گوگل برای میزبان‌های داخلی، جایگزینی برای اتصال به APIها و سرویس‌های گوگل از طریق اینترنت است.

دسترسی خصوصی به گوگل برای میزبان‌های داخلی مستلزم آن است که درخواست‌های مربوط به APIهای گوگل را به آدرس‌های IP مجازی (VIP) هدایت کنید. برای IPv6، آدرس‌های IP زیر استفاده می‌شوند:

  • برای private.googleapis.com: 2600:2d00:0002:2000::/64
  • برای restricted.googleapis.com: 2600:2d00:0002:1000::/64

VIP که انتخاب می‌کنید، تعیین می‌کند که به کدام سرویس‌ها می‌توانید دسترسی داشته باشید. در این آزمایشگاه کد، ما از private.googleapis.com استفاده خواهیم کرد. برای اطلاعات بیشتر، به گزینه‌های دامنه مراجعه کنید.

این آزمایشگاه کد، نحوه فعال‌سازی دسترسی خصوصی گوگل (Private Google Access) را برای میزبان‌های داخلی که از آدرس‌های IPv6 استفاده می‌کنند، شرح می‌دهد. شما یک شبکه VPC به نام on-premises-vpc راه‌اندازی خواهید کرد تا نمایانگر یک محیط داخلی باشد. برای استقرار شما، on-premises-vpc وجود نخواهد داشت، در عوض از شبکه ترکیبی (hybrid network) به مرکز داده داخلی یا ارائه‌دهنده ابری شما استفاده می‌شود.

آنچه خواهید ساخت

در این آزمایشگاه کد، شما قصد دارید یک شبکه IPv6 سرتاسری بسازید که دسترسی داخلی به API ذخیره‌سازی ابری را با استفاده از CNAME *.googleapis.com به private.googleapis.com آدرس IPv6 2600:2d00:0002:2000::/64 نشان می‌دهد، همانطور که در شکل 1 نشان داده شده است.

شکل ۱

a0fc56abf24f3535.png

آنچه یاد خواهید گرفت

  • نحوه ایجاد یک شبکه VPC دو پشته
  • نحوه ایجاد HA VPN با IPv6
  • نحوه به‌روزرسانی DNS برای دسترسی به Private Google Access
  • نحوه ایجاد و اعتبارسنجی اتصال خصوصی Google Access

آنچه نیاز دارید

  • Google Cloud Project

۲. قبل از شروع

پروژه را برای پشتیبانی از codelab به‌روزرسانی کنید

این Codelab از $variables برای کمک به پیاده‌سازی پیکربندی gcloud در Cloud Shell استفاده می‌کند.

درون Cloud Shell، موارد زیر را انجام دهید:

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

۳. ایجاد فایل transit-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

۴. شبکه داخلی را ایجاد کنید

۵۸d75cbc9cb20a51.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

۵. برای vpc ترانزیت و vpc داخلی، HA VPN ایجاد کنید.

ایجاد HA VPN GW برای transit-vpc

a0fc56abf24f3535.png

وقتی هر دروازه ایجاد می‌شود، دو آدرس 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 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 GW

با استفاده از کنسول، به مسیر Hybrid Connectivity → VPN → CLOUD VPN GATEWAYS بروید.

c8eed6ca929935bc.png

ایجاد روتر ابری برای transit-vpc

درون Cloud Shell، روتر ابری واقع در us-central1 را ایجاد کنید.

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

ایجاد روتر ابری برای vpc داخلی

درون Cloud Shell، روتر ابری واقع در 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، تونل ۱ را ایجاد کنید:

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، تونل ۱ را ایجاد کنید:

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 VPN TUNNELS بروید.

85fd5aef4b2c4010.png

ایجاد جلسات BGP

در این بخش، رابط‌های Cloud Router و همتایان BGP را پیکربندی می‌کنید.

هنگام ایجاد تونل‌های VPN که امکان ترافیک IPv6 را فراهم می‌کنند، هنگام اجرای دستور add-bgp-peer ، --enable-ipv6 را مشخص کنید.

ایجاد یک رابط BGP و peering برای transit-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 و peering برای on-premises-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 به Hybrid Connectivity → VPN بروید.

e100e31ea22c8124.png

تأیید کنید که transit-vpc در حال یادگیری مسیرهای IPv4 و IPv6 از طریق HA VPN است.

از آنجا که تونل‌های HA VPN و جلسات BGP برقرار شده‌اند، مسیرهای on-premises-vpc از transit-vpc یاد گرفته می‌شوند. با استفاده از کنسول، به مسیر VPC network → VPC networks → transit-vpc → ROUTES بروید.

به مسیرهای پویای IPv4 و IPv6 که در زیر نشان داده شده است، توجه کنید:

216bde7d08d75ec4.png

تأیید کنید که vpc داخلی در حال یادگیری مسیرها از طریق HA VPN نیست.

Transit-vpc زیرشبکه ندارد، بنابراین روتر ابری هیچ زیرشبکه‌ای را به on-premises-vpc اعلام نمی‌کند. با استفاده از کنسول، به مسیر VPC network → VPC networks → on-premises-vpc → ROUTES بروید.

۶. IPv6 private.googleapis.com VIP را تبلیغ کنید

برای دسترسی به Private Google Access از داخل شرکت، باید یک مسیر سفارشی از transit-vpc ایجاد کنید. آدرس IPv6 2600:2d00:0002:2000:: به محیط داخل شرکت ارسال شده و پس از به‌روزرسانی DNS محلی، توسط بارهای کاری برای دسترسی به APIهای گوگل مانند Cloud Storage، Cloud BigQuery و Cloud Bigtable استفاده می‌شود.

در این آزمایشگاه کد، شما دسترسی API به اکثر APIها و سرویس‌های گوگل را صرف نظر از اینکه توسط کنترل‌های سرویس VPC پشتیبانی می‌شوند یا خیر، فعال خواهید کرد.

از کنسول به مسیر Hybrid Connectivity → Cloud Routers → transit-vpc-cr-us-central1 بروید، سپس گزینه EDIT را انتخاب کنید.

3e36e3b5ea741ec5.png

در بخش مسیرهای تبلیغ‌شده، گزینه ایجاد مسیرهای سفارشی را انتخاب کنید، فیلدها را بر اساس مثال زیر به‌روزرسانی کنید، انجام شد را انتخاب کنید و سپس روی ذخیره کلیک کنید.

۹۲۸۳aba7b214f70d.png

تأیید کنید که سرور مجازی داخلی در حال یادگیری مسیرهای IPv6 است

حالا که IPv6 private.googleapis.com VIP از transit-vpc تبلیغ می‌شود، on-premises-vpc مسیرهای پویای IPv6 را برای VIP یاد گرفته است. با استفاده از کنسول، به VPC network → VPC networks → on-premises-vpc → ROUTES بروید.

به مسیرهای IPv6 که از transit-vpc اعلام می‌شوند، توجه کنید:

caf3b79b035b2a20.png

۷. با استفاده از Private Google Access با APIهای گوگل ارتباط برقرار کنید

در بخش بعدی، با استفاده از IPv6 private.googleapis.com VIP به فضای ذخیره‌سازی ابری دسترسی پیدا کرده و اتصال به آن را تأیید خواهیم کرد. برای انجام این کار، باید اقدامات زیر را در فایل on-premises-vpc انجام دهیم.

  • یک قانون فایروال ورودی ایجاد کنید تا دسترسی به پروکسی آگاه از هویت (IAP) برای دسترسی SSH امکان‌پذیر باشد.
  • یک روتر ابری و Cloud NAT برای دانلود tcpdump و dnsutils ایجاد کنید.
  • یک منطقه DNS ابری خصوصی برای googleapis.com ایجاد کنید.
  • یک سطل ذخیره‌سازی ابری ایجاد کنید.

ایجاد قانون فایروال IAP

برای اینکه به IAP اجازه دهید به ماشین‌های مجازی شما متصل شود، یک قانون فایروال ایجاد کنید که:

  • برای تمام نمونه‌های ماشین مجازی که می‌خواهید با استفاده از 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

پیکربندی روتر ابری و NAT

Cloud NAT در codelab برای نصب بسته‌های نرم‌افزاری استفاده می‌شود زیرا نمونه ماشین مجازی آدرس IP خارجی ندارد.

درون Cloud Shell، روتر ابری را ایجاد کنید.

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

یک نمونه آزمایشی ایجاد کنید، جعبه آزمایش در محل

یک نمونه آزمایشی ایجاد کنید که برای آزمایش و اعتبارسنجی اتصال به IPv6 private.googleapis.com VIP استفاده خواهد شد.

درون 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، یک منطقه DNS خصوصی 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."

اعتبارسنجی منطقه خصوصی DNS ابری

به سرویس‌های شبکه → Cloud DNS → v6-googleapis بروید.

455e355195a2a48f.png

ایجاد سطل ذخیره‌سازی ابری

درون Cloud Shell، یک سطل ذخیره‌سازی ابری ایجاد کنید و bucket_name را با یک نام جهانی منحصر به فرد که ترجیح می‌دهید جایگزین کنید، اگر از قبل از نام دیگری استفاده می‌کنید، آن را امتحان کنید.

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

۸. دسترسی و اعتبارسنجی 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 را اجرا کنید و پورت ۵۳ را برای ترافیک DNS مانیتور کنید.

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 دو، یک ssh برای تست نمونه on-premises-testbox انجام دهید.

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

برای اعتبارسنجی جستجوی DNS، یک بررسی انجام دهید

در ترمینال دوم Cloud Shell، جستجویی در مورد storage.googleapis.com انجام دهید.

dig AAAA storage.googleapis.com

بخش پاسخ را بررسی کنید، منطقه DNS خصوصی storage.googleapis.com CNAME را به private.googleapis.com AAAA 2600:2d00:2:2000:: تغییر دهید، مثال زیر:

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 را بررسی کنید که تأیید می‌کند DNS به 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 را اجرا کنید.

در ترمینال دوم 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 را بررسی کنید که تأیید می‌کند DNS به 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 برگردید.

۹. پاکسازی

در داخل 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

۱۰. تبریک

تبریک می‌گوییم، شما با موفقیت یک دسترسی خصوصی گوگل با IPv6 را پیکربندی و اعتبارسنجی کردید.

شما زیرساخت‌های ترانزیت و داخلی را ایجاد کردید و یک منطقه DNS خصوصی ایجاد کردید که امکان تفکیک دامنه‌های Google API را با استفاده از IPv6 فراهم می‌کند. یاد گرفتید که چگونه دسترسی IPv6 را با استفاده از dig و فضای ذخیره‌سازی ابری آزمایش و اعتبارسنجی کنید.

کازموپاپ فکر می‌کند که کدلب‌ها فوق‌العاده هستند!!

8c2a10eb841f7b01.jpeg

بعدش چی؟

به برخی از این آزمایشگاه‌های کد نگاهی بیندازید...

مطالعه بیشتر و ویدیوها

اسناد مرجع