เข้าถึง Google APIs จากโฮสต์ภายในองค์กรโดยใช้ที่อยู่ IPv6

1. บทนำ

การเข้าถึง Google แบบส่วนตัวสำหรับโฮสต์ภายในองค์กรช่วยให้ระบบภายในองค์กรเชื่อมต่อกับ Google APIs และบริการต่างๆ ได้โดยกำหนดเส้นทางการรับส่งข้อมูลผ่านอุโมงค์ Cloud VPN หรือไฟล์แนบ VLAN สำหรับ Cloud Interconnect การเข้าถึง Google แบบส่วนตัวสำหรับโฮสต์ในองค์กรเป็นอีกทางเลือกหนึ่งในการเชื่อมต่อกับ Google APIs และบริการต่างๆ ผ่านอินเทอร์เน็ต

การเข้าถึง Google แบบส่วนตัวสำหรับโฮสต์ภายในองค์กรกำหนดให้คุณส่งคำขอสำหรับ Google APIs ไปยังที่อยู่ IP เสมือน (VIP) สำหรับ IPv6 ระบบจะใช้ที่อยู่ IP ต่อไปนี้

  • สำหรับ private.googleapis.com: 2600:2d00:0002:2000::/64
  • สำหรับ restricted.googleapis.com: 2600:2d00:0002:1000::/64

VIP ที่คุณเลือกจะเป็นตัวกำหนดบริการที่คุณเข้าถึงได้ ในโค้ดแล็บนี้ เราจะใช้ private.googleapis.com ดูข้อมูลเพิ่มเติมได้ที่ตัวเลือกโดเมน

Codelab นี้อธิบายวิธีเปิดใช้การเข้าถึง Google แบบส่วนตัวสำหรับโฮสต์ในองค์กรที่ใช้ที่อยู่ IPv6 คุณจะตั้งค่าเครือข่าย VPC ที่ชื่อ on-premises-vpc เพื่อแสดงถึงสภาพแวดล้อมในองค์กร สำหรับการติดตั้งใช้งานของคุณ on-premises-vpc จะไม่มีอยู่ แต่จะใช้การเชื่อมต่อเครือข่ายแบบไฮบริดกับศูนย์ข้อมูลในองค์กรหรือผู้ให้บริการระบบคลาวด์แทน

สิ่งที่คุณจะสร้าง

ในโค้ดแล็บนี้ คุณจะได้สร้างเครือข่าย IPv6 แบบครบวงจรที่แสดงการเข้าถึง API พื้นที่เก็บข้อมูลบนระบบคลาวด์ในองค์กรโดยใช้ CNAME *.googleapis.com ไปยังที่อยู่ IPv6 ของ private.googleapis.com 2600:2d00:0002:2000::/64 ตามที่แสดงในรูปที่ 1

รูปที่ 1

a0fc56abf24f3535.png

สิ่งที่คุณจะได้เรียนรู้

  • วิธีสร้างเครือข่าย VPC แบบ Dual Stack
  • วิธีสร้าง HA VPN ด้วย IPv6
  • วิธีอัปเดต DNS เพื่อเข้าถึงการเข้าถึง Google แบบส่วนตัว
  • วิธีสร้างและตรวจสอบการเชื่อมต่อการเข้าถึง Google แบบส่วนตัว

สิ่งที่คุณต้องมี

  • โปรเจ็กต์ Google Cloud

2. ก่อนเริ่มต้น

อัปเดตโปรเจ็กต์เพื่อรองรับ 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

3. สร้าง 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

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 สำหรับ transit-vpc และ on-premises-vpc

สร้าง HA VPN GW สำหรับ transit-vpc

a0fc56abf24f3535.png

เมื่อสร้างเกตเวย์แต่ละรายการ ระบบจะจัดสรรที่อยู่ IPv4 ภายนอก 2 รายการโดยอัตโนมัติ ซึ่งรายการหนึ่งจะใช้กับอินเทอร์เฟซของเกตเวย์แต่ละรายการ จดที่อยู่ IP เหล่านี้ไว้เพื่อใช้ในขั้นตอนการกำหนดค่าในภายหลัง

สร้าง HA VPN GW ที่มีประเภทสแต็ก IPV4_IPV6 ภายใน Cloud Shell

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

สร้าง HA VPN GW สำหรับ on-premises-vpc

สร้าง HA VPN GW ด้วยประเภทสแต็ก IPV4_IPV6 ภายใน Cloud Shell

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

ตรวจสอบการสร้าง HA VPN GW

ใช้คอนโซลเพื่อไปที่การเชื่อมต่อแบบไฮบริด → VPN → เกตเวย์ CLOUD VPN

c8eed6ca929935bc.png

สร้าง Cloud Router สำหรับ transit-vpc

สร้าง Cloud Router ที่อยู่ใน us-central1 ภายใน Cloud Shell

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

สร้าง Cloud Router สำหรับ on-premises-vpc

สร้าง Cloud Router ที่อยู่ใน us-central1 ภายใน Cloud Shell

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

สร้างอุโมงค์ข้อมูล VPN สำหรับ transit-vpc

คุณจะสร้างอุโมงค์ข้อมูล VPN 2 รายการในเกตเวย์ HA VPN แต่ละรายการ

สร้างอุโมงค์ข้อมูล VPN0

สร้าง tunnel0 ภายใน Cloud Shell โดยใช้คำสั่งต่อไปนี้

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

สร้าง tunnel1 ภายใน 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 สำหรับ on-premises-vpc

คุณจะสร้างอุโมงค์ข้อมูล VPN 2 รายการในเกตเวย์ HA VPN แต่ละรายการ

สร้างอุโมงค์ข้อมูล VPN0

สร้าง tunnel0 ภายใน Cloud Shell โดยใช้คำสั่งต่อไปนี้

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

สร้าง tunnel1 ภายใน 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

ใช้คอนโซลเพื่อไปที่การเชื่อมต่อแบบไฮบริด → VPN → อุโมงค์ CLOUD VPN

85fd5aef4b2c4010.png

สร้างเซสชัน BGP

ในส่วนนี้ คุณจะกำหนดค่าอินเทอร์เฟซ Cloud Router และเพียร์ BGP

เมื่อสร้างอุโมงค์ VPN ที่อนุญาตการรับส่งข้อมูล IPv6 ให้ระบุ --enable-ipv6 เมื่อเรียกใช้คำสั่ง add-bgp-peer

สร้างอินเทอร์เฟซและการเชื่อมต่อ BGP สำหรับ transit-vpc

สร้างอินเทอร์เฟซ BGP ใน Cloud Shell โดยทำดังนี้

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

สร้างเพียร์ BGP ใน Cloud Shell โดยทำดังนี้

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

สร้างอินเทอร์เฟซ BGP ใน Cloud Shell โดยทำดังนี้

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

สร้างเพียร์ BGP ใน Cloud Shell โดยทำดังนี้

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

สร้างอินเทอร์เฟซ BGP ใน Cloud Shell โดยทำดังนี้

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

สร้างเพียร์ BGP ใน Cloud Shell โดยทำดังนี้

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

สร้างอินเทอร์เฟซ BGP ใน Cloud Shell โดยทำดังนี้

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

สร้างเพียร์ BGP ใน Cloud Shell โดยทำดังนี้

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

ตรวจสอบว่า transit-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 จะไม่กระจายข้อมูลซับเน็ตไปยัง on-premises-vpc ใช้คอนโซลเพื่อไปที่เครือข่าย VPC → เครือข่าย VPC → on-premises-vpc → เส้นทาง

6. ประกาศ VIP ของ IPv6 private.googleapis.com

หากต้องการเข้าถึงการเข้าถึง Google แบบส่วนตัวจากในองค์กร คุณจะต้องสร้างการประกาศเส้นทางที่กำหนดเองจาก transit-vpc ระบบจะประกาศที่อยู่ IPv6 2600:2d00:0002:2000:: ให้กับสภาพแวดล้อมในองค์กร และเวิร์กโหลดจะใช้ที่อยู่ดังกล่าวเพื่อเข้าถึง Google APIs เช่น Cloud Storage, Cloud BigQuery และ Cloud Bigtable หลังจากที่อัปเดต DNS ในเครื่องแล้ว

ใน Codelab นี้ คุณจะเปิดใช้การเข้าถึง API สำหรับ API และบริการส่วนใหญ่ของ Google ไม่ว่า VPC Service Controls จะรองรับหรือไม่ก็ตาม

จากคอนโซล ให้ไปที่การเชื่อมต่อแบบไฮบริด → Cloud Router → transit-vpc-cr-us-central1 แล้วเลือกแก้ไข

3e36e3b5ea741ec5.png

ในส่วนเส้นทางที่โฆษณา ให้เลือกตัวเลือกสร้างเส้นทางที่กำหนดเอง อัปเดตช่องตามตัวอย่างด้านล่าง เลือกเสร็จสิ้น แล้วคลิกบันทึก

9283aba7b214f70d.png

ตรวจสอบว่า on-premises-vpc กำลังเรียนรู้เส้นทาง IPv6

เมื่อมีการโฆษณา VIP ของ IPv6 private.googleapis.com จาก transit-vpc แล้ว on-premises-vpc จะได้เรียนรู้เส้นทางแบบไดนามิกของ IPv6 สำหรับ VIP ใช้คอนโซลเพื่อไปที่เครือข่าย VPC → เครือข่าย VPC → on-premises-vpc → เส้นทาง

สังเกตเส้นทาง IPv6 ที่ประกาศจาก transit-vpc

caf3b79b035b2a20.png

7. สร้างการสื่อสารกับ Google APIs โดยใช้การเข้าถึง Google แบบส่วนตัว

ในส่วนต่อไปนี้ เราจะเข้าถึงและตรวจสอบการเชื่อมต่อกับ Cloud Storage โดยใช้ VIP ของ IPv6 private.googleapis.com โดยเราต้องดำเนินการต่อไปนี้ใน on-premises-vpc

  • สร้างกฎไฟร์วอลล์ขาเข้าเพื่ออนุญาตให้ Identity-Aware Proxy (IAP) เข้าถึงสำหรับการเข้าถึง SSH
  • สร้าง Cloud Router และ Cloud NAT เพื่อดาวน์โหลด tcpdump และ dnsutils
  • สร้างโซน Cloud DNS ส่วนตัวสำหรับ googleapis.com
  • สร้าง Bucket ของ Cloud Storage

สร้างกฎไฟร์วอลล์ IAP

หากต้องการอนุญาตให้ IAP เชื่อมต่อกับอินสแตนซ์ VM ให้สร้างกฎไฟร์วอลล์ที่มีลักษณะดังนี้

  • มีผลกับอินสแตนซ์ VM ทั้งหมดที่คุณต้องการให้เข้าถึงได้โดยใช้ IAP
  • อนุญาตการรับส่งข้อมูลขาเข้าจากช่วง IP 35.235.240.0/20 ช่วงนี้มีที่อยู่ IP ทั้งหมดที่ IAP ใช้สำหรับการส่งต่อ TCP

สร้างกฎไฟร์วอลล์ IAP ภายใน Cloud Shell

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 ใน Codelab สำหรับการติดตั้งแพ็กเกจซอฟต์แวร์เนื่องจากอินสแตนซ์ VM ไม่มีที่อยู่ IP ภายนอก

สร้าง Cloud Router ภายใน Cloud Shell

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

สร้างเกตเวย์ NAT ภายใน Cloud Shell

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

สร้างอินสแตนซ์ทดสอบใน testbox ในองค์กร

สร้างอินสแตนซ์ทดสอบที่จะใช้ทดสอบและตรวจสอบการเชื่อมต่อกับ VIP ของ IPv6 private.googleapis.com

สร้างอินสแตนซ์ภายใน 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 โดยขั้นตอนที่จำเป็นมีดังนี้

สร้างโซน DNS ส่วนตัว v6-googleapis.com ใน Cloud Shell

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

สร้างระเบียน AAAA สำหรับ private.googleapis.com ภายใน Cloud Shell โดยชี้ไปยังที่อยู่ 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::"

สร้าง CNAME สำหรับ *.googleapis.com ให้ชี้ไปยัง private.googleapis.com ใน Cloud Shell

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

ตรวจสอบความถูกต้องของโซนส่วนตัวของ Cloud DNS

ไปที่บริการเครือข่าย → Cloud DNS → v6-googleapis

455e355195a2a48f.png

สร้าง Bucket ของ Cloud Storage

สร้างที่เก็บข้อมูล Cloud Storage ใน Cloud Shell แล้วแทนที่ bucket_name ด้วยชื่อที่ไม่ซ้ำกันทั่วโลกที่คุณต้องการ ลองใช้ชื่ออื่นหากมีการใช้งานอยู่แล้ว

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

8. เข้าถึงและตรวจสอบ Google APIs โดยใช้ที่อยู่ IPv6

ในส่วนต่อไปนี้ คุณจะใช้ SSH ในเทอร์มินัล Cloud Shell 2 เครื่อง เทอร์มินัลแรกใช้เพื่อตรวจสอบการค้นหา IPv6 โดยใช้ tcpdump ส่วนเทอร์มินัลที่ 2 ใช้สำหรับการเข้าถึงที่เก็บข้อมูลในระบบคลาวด์

ภายใน Cloud Shell ให้ใช้ SSH เพื่อทดสอบอินสแตนซ์ on-premises-testbox

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

ในเทอร์มินัล Cloud Shell 1 ให้เริ่ม tcpdump และตรวจสอบพอร์ต 53 สำหรับการรับส่งข้อมูล 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 2 ให้ทำการ SSH ไปยังอินสแตนซ์ทดสอบ on-premises-testbox

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

ใช้คำสั่ง dig เพื่อตรวจสอบการค้นหา DNS

ในเทอร์มินัล Cloud Shell 2 ให้เรียกใช้ dig กับ storage.googleapis.com

dig AAAA storage.googleapis.com

ตรวจสอบส่วนคำตอบ CNAME ของ private DNS zone storage.googleapis.com ไปยัง AAAA ของ private.googleapis.com 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 1 ให้ตรวจสอบ 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 list เพื่อตรวจสอบสิทธิ์เข้าถึงพื้นที่เก็บข้อมูลระบบคลาวด์

ในเทอร์มินัล Cloud Shell 2 ให้แสดงรายการเทียบกับที่เก็บข้อมูลที่สร้างไว้ก่อนหน้านี้โดยใช้ gsutil เปลี่ยน bucket_name เป็น Bucket ที่คุณสร้างไว้ก่อนหน้านี้

gsutil -d ls gs://bucket_name

ตัวอย่างการใช้ที่เก็บข้อมูล Cloud Storage 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 1 ให้ตรวจสอบ 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)

ออกจากระบบปฏิบัติการของอินสแตนซ์ 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 เรียบร้อยแล้ว

คุณสร้างโครงสร้างพื้นฐานการขนส่งและในองค์กร รวมถึงสร้างโซน DNS ส่วนตัวที่เปิดใช้การแก้ปัญหาสำหรับโดเมน Google API โดยใช้ IPv6 คุณได้เรียนรู้วิธีทดสอบและตรวจสอบการเข้าถึง IPv6 โดยใช้ dig และ Cloud Storage

Cosmopup คิดว่า Codelab นั้นยอดเยี่ยม!!

8c2a10eb841f7b01.jpeg

สิ่งต่อไปที่ควรทำ

ลองใช้ Codelab เหล่านี้

อ่านเพิ่มเติมและวิดีโอ

เอกสารอ้างอิง