การใช้อินสแตนซ์ฮอพถัดไป (ที่ไม่ได้ติดแท็กและติดแท็ก) ของเส้นทาง IPv6 แบบคงที่ ที่อยู่ฮอพถัดไป และเกตเวย์ฮอพถัดไป

1. บทนำ

เส้นทางที่กำหนดเองแบบคงที่ส่งผลต่อลักษณะการกําหนดเส้นทางเริ่มต้นใน VPC ตอนนี้เส้นทางที่กำหนดเองของ IPv6 รองรับแอตทริบิวต์ฮอพถัดไปใหม่ ได้แก่ next-hop-gateway, next-hop-instance และ next-hop-address โค้ดแล็บนี้จะอธิบายวิธีใช้เส้นทางที่กำหนดเองของ IPv6 กับตัวเลือกฮอปถัดไปใหม่เหล่านี้โดยใช้ VPC 2 รายการที่เชื่อมต่อกันด้วยอินสแตนซ์ VM แบบหลาย NIC นอกจากนี้ คุณยังสาธิตการผสมผสานการกำหนดที่อยู่ ULA และ GUA รวมถึงการทำให้ VPC ของ ULA เข้าถึงอินเทอร์เน็ตสาธารณะได้โดยใช้ความสามารถของเส้นทางที่กำหนดเองใหม่

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

  • วิธีสร้างเส้นทางที่กำหนดเอง IPv6 ด้วย next-hop-instance next-hop
  • วิธีสร้างเส้นทางที่กำหนดเอง IPv6 ที่มีฮอพถัดไปเป็น next-hop-gateway
  • วิธีสร้างเส้นทางที่กำหนดเอง IPv6 ด้วย next-hop-address next-hop

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

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

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

อัปเดตโปรเจ็กต์ให้รองรับโค้ดแล็บ

Codelab นี้ใช้ตัวแปร $เพื่อช่วยให้การติดตั้งใช้งานการกําหนดค่า gcloud ใน Cloud Shell ง่ายขึ้น

ใน Cloud Shell ให้ทําดังนี้

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
export projectname=$(gcloud config list --format="value(core.project)")

สถาปัตยกรรมโดยรวมของห้องทดลอง

eae86f3e371e74b8.png

คุณจะสร้าง VPC 3 รายการเพื่อสาธิตโฮปเน็กซ์ของเส้นทางที่กำหนดเองทั้ง 2 ประเภท ได้แก่ VPC ของไคลเอ็นต์ที่ใช้การระบุที่อยู่ GUA, VPC ของเซิร์ฟเวอร์ที่ใช้การระบุที่อยู่ ULA และ VPC ของเซิร์ฟเวอร์ที่ 2 ที่ใช้การระบุที่อยู่ GUA

หากต้องการให้ VPC ของลูกค้าเข้าถึงเซิร์ฟเวอร์ ULA คุณจะใช้เส้นทางที่กำหนดเองโดยใช้ทั้ง next-hop-instance และ next-hop-address ที่ชี้ไปยังอินสแตนซ์เกตเวย์แบบหลาย NIC หากต้องการให้สิทธิ์เข้าถึงเซิร์ฟเวอร์ GUA (หลังจากลบเส้นทางเริ่มต้น ::/0) คุณจะใช้เส้นทางที่กำหนดเองโดยให้ next-hop-gateway ชี้ไปยังเกตเวย์อินเทอร์เน็ตเริ่มต้นเพื่อกำหนดเส้นทางผ่านอินเทอร์เน็ต

3. การตั้งค่า VPC ของลูกค้า

สร้าง VPC ของลูกค้า

ใน Cloud Shell ให้ทําดังนี้

gcloud compute networks create client-vpc \
    --project=$projectname \
    --subnet-mode=custom \
    --mtu=1500 --bgp-routing-mode=regional

สร้างซับเน็ตไคลเอ็นต์

ใน Cloud Shell ให้ทําดังนี้

gcloud compute networks subnets create client-subnet  \
    --network=client-vpc \
    --project=$projectname \
    --range=192.168.1.0/24 \
    --stack-type=IPV4_IPV6 \
    --ipv6-access-type=external \
    --region=us-central1

บันทึกซับเน็ต GUA ที่ได้รับมอบหมายในตัวแปรสภาพแวดล้อมโดยใช้คําสั่งนี้

export client_subnet=$(gcloud compute networks subnets \
    describe client-subnet \
    --project $projectname \
    --format="value(externalIpv6Prefix)" \
    --region us-central1)

เปิดอินสแตนซ์ไคลเอ็นต์

ใน Cloud Shell ให้ทําดังนี้

gcloud compute instances create client-instance \
    --subnet client-subnet \
    --stack-type IPV4_IPV6 \
    --zone us-central1-a \
    --project=$projectname

เพิ่มกฎไฟร์วอลล์สําหรับการรับส่งข้อมูล VPC ของลูกค้า

ใน Cloud Shell ให้ทําดังนี้

gcloud compute firewall-rules create allow-gateway-client \
    --direction=INGRESS --priority=1000 \
    --network=client-vpc --action=ALLOW \
    --rules=tcp --source-ranges=$client_subnet \
    --project=$projectname 

เพิ่มกฎไฟร์วอลล์เพื่ออนุญาต IAP สําหรับอินสแตนซ์ไคลเอ็นต์

ใน Cloud Shell ให้ทําดังนี้

gcloud compute firewall-rules create allow-iap-client \
    --direction=INGRESS --priority=1000 \
    --network=client-vpc --action=ALLOW \
    --rules=tcp:22 --source-ranges=35.235.240.0/20 \
    --project=$projectname 

ยืนยันการเข้าถึง SSH ไปยังอินสแตนซ์ไคลเอ็นต์

เข้าสู่ระบบอินสแตนซ์ไคลเอ็นต์ใน Cloud Shell โดยทำดังนี้

gcloud compute ssh client-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

หากดำเนินการสำเร็จ คุณจะเห็นหน้าต่างเทอร์มินัลจากอินสแตนซ์ไคลเอ็นต์ ออกจากเซสชัน SSH เพื่อดำเนินการต่อในโค้ดแล็บ

4. การตั้งค่า VPC ของเซิร์ฟเวอร์ ULA

สร้าง VPC ของเซิร์ฟเวอร์ ULA

ใน Cloud Shell ให้ทําดังนี้

gcloud compute networks create server-vpc1 \
    --project=$projectname \
    --subnet-mode=custom --mtu=1500 \
    --bgp-routing-mode=regional \
    --enable-ula-internal-ipv6

สร้างซับเน็ตของเซิร์ฟเวอร์ ULA

ใน Cloud Shell ให้ทําดังนี้

gcloud compute networks subnets create server-subnet1 \
    --network=server-vpc1 \
    --project=$projectname \
    --range=192.168.0.0/24 \
    --stack-type=IPV4_IPV6 \
    --ipv6-access-type=internal \
    --region=us-central1

บันทึกซับเน็ต ULA ที่ได้รับมอบหมายในตัวแปรสภาพแวดล้อมโดยใช้คำสั่งนี้

export server_subnet1=$(gcloud compute networks subnets \
    describe server-subnet1 \
    --project $projectname \
    --format="value(internalIpv6Prefix)" \
    --region us-central1)

เปิดใช้งาน VM ของเซิร์ฟเวอร์ด้วยที่อยู่ IPV6 ภายใน ULA

ใน Cloud Shell ให้ทําดังนี้

gcloud compute instances create server-instance1 \
    --subnet server-subnet1 \
    --stack-type IPV4_IPV6 \
    --zone us-central1-a \
    --project=$projectname

เพิ่มกฎไฟร์วอลล์เพื่ออนุญาตให้เข้าถึงเซิร์ฟเวอร์จากไคลเอ็นต์

ใน Cloud Shell ให้ทําดังนี้

gcloud compute firewall-rules create allow-client-server1 \
    --direction=INGRESS --priority=1000 \
    --network=server-vpc1 --action=ALLOW \
    --rules=tcp --source-ranges=$client_subnet \
    --project=$projectname 

เพิ่มกฎไฟร์วอลล์เพื่ออนุญาต IAP

ใน Cloud Shell ให้ทําดังนี้

gcloud compute firewall-rules create allow-iap-server1 \
    --direction=INGRESS --priority=1000 \
    --network=server-vpc1 --action=ALLOW \
    --rules=tcp:22 \
    --source-ranges=35.235.240.0/20 \
    --project=$projectname 

ติดตั้ง Apache ในอินสแตนซ์เซิร์ฟเวอร์ ULA

เข้าสู่ระบบอินสแตนซ์ไคลเอ็นต์ใน Cloud Shell โดยทำดังนี้

gcloud compute ssh server-instance1 \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

เรียกใช้คําสั่งต่อไปนี้ในเชลล์ VM ของเซิร์ฟเวอร์

sudo apt update && sudo apt -y install apache2

ยืนยันว่า Apache ทํางานอยู่

sudo systemctl status apache2

เขียนทับหน้าเว็บเริ่มต้น

echo '<!doctype html><html><body><h1>Hello World! From Server1!</h1></body></html>' | sudo tee /var/www/html/index.html

ออกจากเซสชัน SSH เพื่อดำเนินการต่อในโค้ดแล็บ

5. การตั้งค่า VPC ของเซิร์ฟเวอร์ GUA

สร้าง VPC ของเซิร์ฟเวอร์ GUA

ใน Cloud Shell ให้ทําดังนี้

gcloud compute networks create server-vpc2 \
    --project=$projectname \
    --subnet-mode=custom --mtu=1500 \
    --bgp-routing-mode=regional

สร้างซับเน็ตเซิร์ฟเวอร์ GUA

ใน Cloud Shell ให้ทําดังนี้

gcloud compute networks subnets create server-subnet2 \
    --network=server-vpc2 \
    --project=$projectname \
    --range=192.168.0.0/24 \
    --stack-type=IPV4_IPV6 \
    --ipv6-access-type=external \
    --region=us-central1

บันทึกซับเน็ต GUA ที่ได้รับมอบหมายในตัวแปรสภาพแวดล้อมโดยใช้คําสั่งนี้

export server_subnet2=$(gcloud compute networks subnets \
    describe server-subnet2 \
    --project $projectname \
    --format="value(externalIpv6Prefix)" \
    --region us-central1)

เปิดใช้งาน VM ของเซิร์ฟเวอร์ด้วยที่อยู่ IPv6 ของ GUA

ใน Cloud Shell ให้ทําดังนี้

gcloud compute instances create server-instance2 \
    --subnet server-subnet2 \
    --stack-type IPV4_IPV6 \
    --zone us-central1-a \
    --project=$projectname

เพิ่มกฎไฟร์วอลล์เพื่ออนุญาตการเข้าถึงภายในซับเน็ต

ใน Cloud Shell ให้ทําดังนี้

gcloud compute firewall-rules create allow-client-server2 \
    --direction=INGRESS \
    --priority=1000 \
    --network=server-vpc2 \
    --action=ALLOW \
    --rules=tcp --source-ranges=$client_subnet \
    --project=$projectname 

เพิ่มกฎไฟร์วอลล์เพื่ออนุญาต IAP

ใน Cloud Shell ให้ทําดังนี้

gcloud compute firewall-rules create allow-iap-server2 \
    --direction=INGRESS \
    --priority=1000 \
    --network=server-vpc2 \
    --action=ALLOW \
    --rules=tcp:22 \
    --source-ranges=35.235.240.0/20 \
    --project=$projectname 

ยืนยันการเข้าถึง SSH ในอินสแตนซ์เซิร์ฟเวอร์ GUA และติดตั้ง Apache

เข้าสู่ระบบอินสแตนซ์ไคลเอ็นต์ใน Cloud Shell โดยทำดังนี้

gcloud compute ssh server-instance2 \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

เรียกใช้คําสั่งต่อไปนี้ในเชลล์ VM ของเซิร์ฟเวอร์

sudo apt update && sudo apt -y install apache2

ยืนยันว่า Apache ทํางานอยู่

sudo systemctl status apache2

เขียนทับหน้าเว็บเริ่มต้น

echo '<!doctype html><html><body><h1>Hello World! From Server2!</h1></body></html>' | sudo tee /var/www/html/index.html

ออกจากเซสชัน SSH เพื่อดำเนินการต่อในโค้ดแล็บ

6. สร้างอินสแตนซ์เกตเวย์

ลบเส้นทางเริ่มต้นของ VPC ของลูกค้า

เพื่อเตรียมพร้อมสำหรับการเปลี่ยนเส้นทางการรับส่งข้อมูล ULA v6 ไปยังอินสแตนซ์ที่มี NIC หลายรายการ และเพื่อปิดใช้การกำหนดเส้นทางขาออกของอินเทอร์เน็ต ลบเส้นทาง ::/0 เริ่มต้นที่ชี้ไปยังเกตเวย์อินเทอร์เน็ตเริ่มต้น

ใน Cloud Shell ให้ทําดังนี้

export client_defroutename=$(gcloud compute routes list \
--project $projectname \
--format='value(name)' \
--filter="network:client-vpc AND destRange~'::/0'")

gcloud compute routes delete $client_defroutename \
--project $projectname \
--quiet

เปิด VM แบบหลาย NIC ของเกตเวย์

ใน Cloud Shell ให้ทําดังนี้

gcloud compute instances create gateway-instance \
    --project=$projectname \
    --zone=us-central1-a \
--network-interface=stack-type=IPV4_IPV6,subnet=client-subnet,no-address \
--network-interface=stack-type=IPV4_IPV6,subnet=server-subnet1,no-address \
    --can-ip-forward

กำหนดค่าอินสแตนซ์เกตเวย์

ใน Cloud Shell ให้เข้าสู่ระบบอินสแตนซ์เกตเวย์ (อาจใช้เวลา 2-3 นาทีในการ SSH ให้เสร็จสมบูรณ์ขณะที่อินสแตนซ์กำลังบูต)

gcloud compute ssh gateway-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

ในเชลล์ของ VM เกตเวย์ ให้เรียกใช้คําสั่งต่อไปนี้เพื่อเปิดใช้การส่งต่อ IPv6 และยอมรับ RA ต่อไปโดยเปิดใช้การส่งต่อ (accept_ra = 2)

sudo sysctl -w net.ipv6.conf.ens4.accept_ra=2
sudo sysctl -w net.ipv6.conf.ens5.accept_ra=2
sudo sysctl -w net.ipv6.conf.ens4.accept_ra_defrtr=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1

ยืนยันตารางการกําหนดเส้นทาง IPv6 ในอินสแตนซ์

ip -6 route show

ตัวอย่างเอาต์พุตที่แสดงทั้งเส้นทางซับเน็ต ULA และ GUA โดยมีเส้นทางเริ่มต้นที่ชี้ไปยังอินเทอร์เฟซ GUA

::1 dev lo proto kernel metric 256 pref medium
2600:1900:4000:7a7f:0:1:: dev ens4 proto kernel metric 256 expires 83903sec pref medium
2600:1900:4000:7a7f::/65 via fe80::4001:c0ff:fea8:101 dev ens4 proto ra metric 1024 expires 88sec pref medium
fd20:3df:8d5c::1:0:0 dev ens5 proto kernel metric 256 expires 83904sec pref medium
fd20:3df:8d5c::/64 via fe80::4001:c0ff:fea8:1 dev ens5 proto ra metric 1024 expires 84sec pref medium
fe80::/64 dev ens5 proto kernel metric 256 pref medium
fe80::/64 dev ens4 proto kernel metric 256 pref medium
default via fe80::4001:c0ff:fea8:101 dev ens4 proto ra metric 1024 expires 88sec pref medium

ออกจากเซสชัน SSH เพื่อดำเนินการต่อในโค้ดแล็บ

7. สร้างและทดสอบเส้นทางไปยังอินสแตนซ์เกตเวย์ (โดยใช้ชื่ออินสแตนซ์)

ในส่วนนี้ คุณจะเพิ่มเส้นทางไปยังทั้ง VPC ของไคลเอ็นต์และเซิร์ฟเวอร์โดยใช้ชื่ออินสแตนซ์เกตเวย์เป็นฮอปถัดไป

จดที่อยู่เซิร์ฟเวอร์ไว้

ใน Cloud Shell ให้ทําดังนี้

gcloud compute instances list \
   --project $projectname \
   --filter="name~server-instance" \
--format='value[separator=","](name,networkInterfaces[0].ipv6Address,networkInterfaces[0].ipv6AccessConfigs[0].externalIpv6)'

ซึ่งจะแสดงทั้งชื่ออินสแตนซ์เซิร์ฟเวอร์และคำนำหน้า IPv6 ตัวอย่างเอาต์พุต

server-instance1,fd20:3df:8d5c:0:0:0:0:0,
server-instance2,,2600:1900:4000:71fd:0:0:0:0

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

เรียกใช้คำสั่ง curl จากไคลเอ็นต์ไปยังอินสแตนซ์เซิร์ฟเวอร์ ULA

เพื่อดูลักษณะการทํางานก่อนเพิ่มเส้นทางใหม่ เรียกใช้คําสั่ง curl จากอินสแตนซ์ไคลเอ็นต์ไปยัง server-instance1

เข้าสู่ระบบอินสแตนซ์ไคลเอ็นต์ใน Cloud Shell โดยทำดังนี้

gcloud compute ssh client-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

ในอินสแตนซ์ไคลเอ็นต์ ให้เรียกใช้ curl โดยใช้ที่อยู่ ULA IPV6 ของอินสแตนซ์ server1 (คำสั่งจะตั้งค่าการหมดเวลาสั้นๆ เป็น 5 วินาทีเพื่อไม่ให้ curl ต้องรอนานเกินไป)

curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'

คำสั่ง curl นี้จะหมดเวลาเนื่องจาก VPC ของลูกค้ายังไม่มีเส้นทางไปยัง VPC ของเซิร์ฟเวอร์

มาลองแก้ไขปัญหานี้กัน ออกจากเซสชัน SSH ไปก่อน

เพิ่มเส้นทางที่กำหนดเองใน VPC ของลูกค้า

เนื่องจาก VPC ของลูกค้าไม่มีเส้นทางไปยังคำนำหน้า ULA มาเพิ่มเลย

ใน Cloud Shell ให้ทําดังนี้

gcloud compute routes create client-to-server1-route \
   --project=$projectname \
   --destination-range=$server_subnet1 \
   --network=client-vpc \
   --next-hop-instance=gateway-instance \
   --next-hop-instance-zone=us-central1-a

SSH กลับไปยังอินสแตนซ์ไคลเอ็นต์โดยทำดังนี้

gcloud compute ssh client-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

ในอินสแตนซ์ไคลเอ็นต์ ให้ลองใช้ curl กับอินสแตนซ์เซิร์ฟเวอร์อีกครั้ง (คําสั่งกําหนดระยะหมดเวลาสั้นๆ 5 วินาทีเพื่อไม่ให้ curl ต้องรอนานเกินไป)

curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'

คำสั่ง curl นี้ยังคงหมดเวลาเนื่องจาก VPC ของ server1 ยังไม่มีเส้นทางกลับไปยัง VPC ของลูกค้าผ่านอินสแตนซ์เกตเวย์

ออกจากเซสชัน SSH เพื่อดำเนินการต่อในโค้ดแล็บ

เพิ่มเส้นทางที่กำหนดเองใน VPC ของเซิร์ฟเวอร์ ULA

ใน Cloud Shell ให้ทําดังนี้

gcloud compute routes create server1-to-client-route \
   --project=$projectname \
   --destination-range=$client_subnet \
   --network=server-vpc1 \
   --next-hop-instance=gateway-instance \
   --next-hop-instance-zone=us-central1-a

SSH กลับไปยังอินสแตนซ์ไคลเอ็นต์โดยทำดังนี้

gcloud compute ssh client-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

ในอินสแตนซ์ไคลเอ็นต์ ให้ลองใช้ curl กับอินสแตนซ์เซิร์ฟเวอร์อีกครั้ง

curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'

ตอนนี้คําสั่ง curl นี้ทํางานสําเร็จแล้ว ซึ่งแสดงว่าคุณเข้าถึงจากอินสแตนซ์ไคลเอ็นต์ไปยังอินสแตนซ์เซิร์ฟเวอร์ ULA ได้ตั้งแต่ต้นทางถึงปลายทาง การเชื่อมต่อนี้ใช้ได้ผ่านการใช้เส้นทางที่กำหนดเองของ IPv6 ที่มี next-hop-instance เป็นฮอปถัดไปเท่านั้น

ตัวอย่างเอาต์พุต

<user id>@client-instance:~$ curl -m 5.0 -g -6 'http://[fd20:3df:8d5c:0:0:0:0:0]:80/'
<!doctype html><html><body><h1>Hello World! From Server1!</h1></body></html>

ออกจากเซสชัน SSH เพื่อดำเนินการต่อในโค้ดแล็บ

8. สร้างและทดสอบเส้นทางไปยังอินสแตนซ์เกตเวย์ (โดยใช้ที่อยู่ของอินสแตนซ์)

ในส่วนนี้ คุณจะเพิ่มเส้นทางไปยังทั้ง VPC ของลูกค้าและเซิร์ฟเวอร์โดยใช้ที่อยู่ IPv6 ของอินสแตนซ์เกตเวย์เป็นฮอปถัดไป

ลบเส้นทางก่อนหน้า

มากู้คืนสภาพแวดล้อมกลับเป็นก่อนเพิ่มเส้นทางที่กำหนดเองโดยลบเส้นทางที่กำหนดเองที่ใช้ชื่ออินสแตนซ์

ใน Cloud Shell ให้ทําดังนี้

gcloud compute routes delete client-to-server1-route  --quiet --project=$projectname
gcloud compute routes delete server1-to-client-route  --quiet --project=$projectname

เรียกใช้คำสั่ง curl จากไคลเอ็นต์ไปยังอินสแตนซ์เซิร์ฟเวอร์ ULA

หากต้องการยืนยันว่าลบเส้นทางก่อนหน้าเรียบร้อยแล้ว ให้เรียกใช้คําสั่ง curl จากอินสแตนซ์ไคลเอ็นต์ไปยัง server-instance1

เข้าสู่ระบบอินสแตนซ์ไคลเอ็นต์ใน Cloud Shell โดยทำดังนี้

gcloud compute ssh client-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

ในอินสแตนซ์ไคลเอ็นต์ ให้เรียกใช้ curl โดยใช้ที่อยู่ ULA IPV6 ของอินสแตนซ์ server1 (คำสั่งจะตั้งค่าการหมดเวลาสั้นๆ เป็น 5 วินาทีเพื่อไม่ให้ curl ต้องรอนานเกินไป)

curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'

คำสั่ง curl นี้จะหมดเวลาเนื่องจาก VPC ของลูกค้าไม่มีเส้นทางไปยัง VPC ของเซิร์ฟเวอร์อีกต่อไป

รับที่อยู่ IPv6 ของอินสแตนซ์เกตเวย์

เราจะต้องขอที่อยู่ IPv6 ของเอนทิตีเกตเวย์ก่อนจึงจะเขียนเส้นทางที่ใช้ next-hop-address ได้

ใน Cloud Shell ให้ทําดังนี้

export gateway_ula_address=$(gcloud compute instances \
   describe gateway-instance \
   --project $projectname  \
   --format='value(networkInterfaces[1].ipv6Address)')

export gateway_gua_address=$(gcloud compute instances \
   describe gateway-instance \
   --project $projectname  \
   --format='value(networkInterfaces[0].ipv6AccessConfigs[0].externalIpv6)')

เพิ่มเส้นทางที่กำหนดเองใน VPC ของลูกค้า

ตอนนี้เราเพิ่มเส้นทางใน VPC ของลูกค้าด้วยคำนำหน้า ULA อีกครั้งได้ แต่จะใช้ที่อยู่ GUA ของเกตเวย์เป็นโฮปถัดไปแทน

ใน Cloud Shell ให้ทําดังนี้

gcloud compute routes create client-to-server1-route \
   --project=$projectname \
   --destination-range=$server_subnet1 \
   --network=client-vpc \
   --next-hop-address=$gateway_gua_address

SSH กลับไปยังอินสแตนซ์ไคลเอ็นต์โดยทำดังนี้

gcloud compute ssh client-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

ในอินสแตนซ์ไคลเอ็นต์ ให้ลองใช้ curl กับอินสแตนซ์เซิร์ฟเวอร์อีกครั้ง

curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'

ตามที่ได้คาดไว้ คำสั่ง curl นี้ยังคงหมดเวลาเนื่องจาก VPC ของ server1 ยังไม่มีเส้นทางกลับไปยัง VPC ของลูกค้าผ่านอินสแตนซ์เกตเวย์

ออกจากเซสชัน SSH เพื่อดำเนินการต่อในโค้ดแล็บ

เพิ่มเส้นทางที่กำหนดเองใน VPC ของเซิร์ฟเวอร์ ULA

ใน Cloud Shell ให้ทําดังนี้

gcloud compute routes create server1-to-client-route \
   --project=$projectname \
   --destination-range=$client_subnet \
   --network=server-vpc1 \
   --next-hop-address=$gateway_ula_address

SSH กลับไปยังอินสแตนซ์ไคลเอ็นต์โดยทำดังนี้

gcloud compute ssh client-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

ในอินสแตนซ์ไคลเอ็นต์ ให้ลองใช้ curl กับอินสแตนซ์เซิร์ฟเวอร์อีกครั้ง

curl -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'

ตอนนี้คําสั่ง curl นี้ทํางานสําเร็จแล้ว ซึ่งแสดงว่าคุณเข้าถึงจากอินสแตนซ์ไคลเอ็นต์ไปยังอินสแตนซ์เซิร์ฟเวอร์ ULA ได้ตั้งแต่ต้นทางถึงปลายทาง การเชื่อมต่อนี้ใช้ได้ผ่านการใช้เส้นทางที่กำหนดเองของ IPv6 ที่มี next-hop-address เป็นฮอปถัดไปเท่านั้น

ตัวอย่างเอาต์พุต

<user id>@client-instance:~$ curl -m 5.0 -g -6 'http://[fd20:3df:8d5c:0:0:0:0:0]:80/'
<!doctype html><html><body><h1>Hello World! From Server1!</h1></body></html>

ออกจากเซสชัน SSH เพื่อดำเนินการต่อในโค้ดแล็บ

9. สร้างและทดสอบเส้นทางไปยังเกตเวย์อินเทอร์เน็ต

ขณะตั้งค่าห้องทดลองนี้ เรามาทดสอบฟังก์ชันการทำงานของพร็อพเพอร์ตี้ next-hop ใหม่อย่าง next-hop-gateway กันด้วย

เรียกใช้คําสั่ง curl จากไคลเอ็นต์ไปยังอินสแตนซ์เซิร์ฟเวอร์ GUA

เพื่อดูลักษณะการทํางานก่อนเพิ่มเส้นทางใหม่ เรียกใช้คําสั่ง curl จากอินสแตนซ์ไคลเอ็นต์ไปยังที่อยู่ IP ของ server2

เข้าสู่ระบบอินสแตนซ์ไคลเอ็นต์ใน Cloud Shell โดยทำดังนี้

gcloud compute ssh client-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

ในอินสแตนซ์ไคลเอ็นต์ ให้ใช้ curl ไปยังปลายทาง IPv6

curl -m 5.0 -g -6 'http://[GUA-ipv6-address-of-server2]:80/'

คำสั่ง curl นี้ควรหมดเวลาเนื่องจาก VPC ของลูกค้ามีเพียงเส้นทางซับเน็ตของตัวเองและเส้นทางไปยัง VPC ของ server1 เท่านั้น หากต้องการเข้าถึงช่วง GUA ของ VPC ของ server2 คุณต้องใช้เกตเวย์อินเทอร์เน็ตเริ่มต้นผ่านเส้นทางที่กำหนดเอง

ออกจากเซสชัน SSH เพื่อดำเนินการต่อในโค้ดแล็บ

เพิ่มเส้นทางเกตเวย์ที่กำหนดเองใน VPC ของลูกค้า

ใน Cloud Shell ให้ทําดังนี้

gcloud compute routes create client-to-server2-route \
   --project=$projectname \
   --destination-range=$server_subnet2 \
   --network=client-vpc \
   --next-hop-gateway=default-internet-gateway

SSH กลับไปยังอินสแตนซ์ไคลเอ็นต์โดยทำดังนี้

gcloud compute ssh client-instance \
    --project=$projectname \
    --zone=us-central1-a \
    --tunnel-through-iap

ในอินสแตนซ์ไคลเอ็นต์ ให้ใช้ curl เดียวกันซ้ำ

curl -m 5.0 -g -6 'http://[GUA-ipv6-address-of-server2]:80/'

ตอนนี้คําสั่ง curl นี้ควรแสดงข้อความ Hello ที่กําหนดเองได้สําเร็จ ซึ่งบ่งบอกว่าคุณเข้าถึงที่อยู่ IPv6 ของเซิร์ฟเวอร์อื่นผ่านเกตเวย์อินเทอร์เน็ตเริ่มต้นได้สําเร็จ

ตัวอย่างเอาต์พุต

<user id>@client-instance:~$ curl -m 5.0 -g -6 'http://[2600:1900:4000:71fd:0:0:0:0]:80/'
<!doctype html><html><body><h1>Hello World! From Server2!</h1></body></html>

ออกจากเซสชัน SSH เพื่อไปยังส่วนล้างข้อมูลของห้องทดลอง

10. ล้างข้อมูล

ล้างอินสแตนซ์

ใน Cloud Shell ให้ทําดังนี้

gcloud compute instances delete client-instance --zone us-central1-a --quiet --project=$projectname

gcloud compute instances delete server-instance1 --zone us-central1-a --quiet --project=$projectname

gcloud compute instances delete server-instance2 --zone us-central1-a --quiet --project=$projectname

gcloud compute instances delete gateway-instance --zone us-central1-a --quiet --project=$projectname

ล้างซับเน็ต

ใน Cloud Shell ให้ทําดังนี้

gcloud compute networks subnets delete client-subnet --region=us-central1 --quiet --project=$projectname

gcloud compute networks subnets delete server-subnet1 --region=us-central1 --quiet --project=$projectname

gcloud compute networks subnets delete server-subnet2 --region=us-central1 --quiet --project=$projectname

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

ใน Cloud Shell ให้ทําดังนี้

gcloud compute firewall-rules delete allow-iap-client  --quiet --project=$projectname
gcloud compute firewall-rules delete allow-iap-server1  --quiet --project=$projectname
gcloud compute firewall-rules delete allow-iap-server2  --quiet --project=$projectname
gcloud compute firewall-rules delete allow-gateway-client  --quiet --project=$projectname
gcloud compute firewall-rules delete allow-client-server1  --quiet --project=$projectname
gcloud compute firewall-rules delete allow-client-server2  --quiet --project=$projectname

ล้างเส้นทางที่กำหนดเอง

ใน Cloud Shell ให้ทําดังนี้

gcloud compute routes delete client-to-server1-route  --quiet --project=$projectname
gcloud compute routes delete client-to-server2-route  --quiet --project=$projectname
gcloud compute routes delete server1-to-client-route  --quiet --project=$projectname

ล้างข้อมูล VPC

ใน Cloud Shell ให้ทําดังนี้

gcloud compute networks delete client-vpc --quiet --project=$projectname
gcloud compute networks delete server-vpc1 --quiet --project=$projectname
gcloud compute networks delete server-vpc2 --quiet --project=$projectname

11. ขอแสดงความยินดี

คุณใช้เส้นทาง IPv6 แบบคงที่ที่กำหนดเองโดยตั้งค่า next-hop เป็น next-hop-gateway , next-hop-instance และ next-hop-address เรียบร้อยแล้ว นอกจากนี้ คุณยังตรวจสอบการสื่อสาร IPv6 จากต้นทางถึงปลายทางโดยใช้เส้นทางเหล่านั้นด้วย

ขั้นตอนถัดไปคือ

ลองดู Codelab เหล่านี้...

ข้อมูลเพิ่มเติมและวิดีโอ

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