استفاده از مسیرهای استاتیک IPv6 نمونه هاپ بعدی (بدون برچسب و برچسب گذاری شده) و گیت وی hop بعدی

1. مقدمه

مسیرهای سفارشی استاتیک بر رفتار مسیریابی پیش فرض در VPC تأثیر می گذارد. مسیرهای سفارشی IPv6 اکنون از ویژگی‌های بعدی پرش جدید پشتیبانی می‌کنند: next-hop-gateway و next-hop-instance. این لبه کد نحوه استفاده از مسیرهای سفارشی IPv6 را با این گزینه‌های جدید بعدی با استفاده از دو VPC که توسط یک نمونه VM چند NIC متصل شده‌اند، شرح می‌دهد. همچنین با استفاده از قابلیت مسیر سفارشی جدید، ترکیب آدرس‌دهی ULA و GUA و ارائه قابلیت دسترسی به ULA VPC به اینترنت عمومی را نشان خواهید داد.

چیزی که یاد خواهید گرفت

  • نحوه ایجاد یک مسیر سفارشی IPv6 با یک next-hop-instance next-hop.
  • نحوه ایجاد یک مسیر سفارشی IPv6 با یک next-hop-gateway next-hop.

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

  • پروژه Google Cloud

2. قبل از شروع

پروژه را برای پشتیبانی از Codelab به روز کنید

این 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)")

کلیات معماری آزمایشگاهی

66f72fc758d762f7.png

برای نشان دادن هر دو نوع مسیر سفارشی بعدی هاپ، شما 3 VPC ایجاد خواهید کرد: یک VPC مشتری که از آدرس دهی GUA استفاده می کند، یک سرور VPC که از آدرس دهی ULA استفاده می کند و یک VPC سرور دوم که از آدرس دهی GUA استفاده می کند.

برای دسترسی مشتری VPC به سرور ULA، از یک مسیر سفارشی استفاده می‌کنید که نمونه بعدی را به یک نمونه دروازه چند NIC اشاره می‌کند. برای دسترسی به سرور GUA (پس از حذف مسیر پیش‌فرض ::/0)، از یک مسیر سفارشی با دروازه بعدی که به دروازه اینترنت پیش‌فرض اشاره می‌کند استفاده می‌کنید تا مسیریابی را از طریق اینترنت فراهم کنید.

3. Client VPC Setup

Client VPC را ایجاد کنید

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

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

زیرشبکه Client را ایجاد کنید

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

سرور ULA VPC را ایجاد کنید

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

داخل پوسته Server VM دستور زیر را اجرا کنید

sudo apt update && sudo apt -y install apache2

بررسی کنید که آپاچی در حال اجرا باشد

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

سرور GUA VPC را ایجاد کنید

در داخل 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 را با آدرس GUA IPV6 راه اندازی کنید

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

داخل پوسته Server VM دستور زیر را اجرا کنید

sudo apt update && sudo apt -y install apache2

بررسی کنید که آپاچی در حال اجرا باشد

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. نمونه Gateway ایجاد کنید

مسیر پیش‌فرض Client VPC را حذف کنید

در آماده سازی برای هدایت ترافیک ULA v6 به نمونه چند کارت شبکه و غیرفعال کردن مسیریابی خروجی اینترنت. مسیر پیش فرض ::/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

راه اندازی Gateway multi-NIC VM

Inside Cloud Shell، موارد زیر را انجام دهید: Inside 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، وارد نمونه دروازه شوید (ممکن است چند دقیقه طول بکشد تا SSH با موفقیت در حال راه‌اندازی نمونه باشد):

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

در داخل پوسته Gateway 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. مسیرهایی را برای نمونه دروازه ایجاد و آزمایش کنید

آدرس های سرور را یادداشت کنید

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

هر دو آدرس را یادداشت کنید زیرا بعداً از آنها در دستورات curl از نمونه مشتری استفاده خواهید کرد. متأسفانه نمی توان از متغیرهای محیطی به راحتی برای ذخیره آنها استفاده کرد زیرا در جلسات SSH منتقل نمی شوند.

دستور curl را از سرویس گیرنده به نمونه سرور ULA اجرا کنید

برای مشاهده رفتار قبل از افزودن مسیرهای جدید. یک دستور curl را از نمونه مشتری به سمت server-instance1 اجرا کنید.

در داخل Cloud Shell، وارد نمونه کلاینت شوید:

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

در داخل نمونه کلاینت، با استفاده از آدرس ULA IPV6 نمونه server1، یک curl انجام دهید (این فرمان یک بازه زمانی کوتاه از 5 ثانیه تنظیم می‌کند تا از پیچیدن بیش از حد انتظار جلوگیری شود)

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

این دستور curl باید به پایان برسد زیرا Client 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

در داخل نمونه کلاینت، دوباره سعی کنید تا نمونه سرور را تغییر دهید. (این فرمان یک بازه زمانی کوتاه 5 ثانیه ای تنظیم می کند تا از انتظار طولانی مدت جلوگیری شود)

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

زمان این دستور curl همچنان تمام می شود زیرا سرور1 VPC هنوز مسیری برای بازگشت به سمت مشتری VPC از طریق نمونه دروازه ندارد.

از جلسه SSH خارج شوید تا با کد لبه ادامه دهید.

مسیر سفارشی را در ULA Server VPC اضافه کنید

در داخل 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 -m 5.0 -g -6 'http://[ULA-ipv6-address-of-server1]:80/'

این دستور curl اکنون به شما نشان می‌دهد که دسترسی سرتاسری از نمونه مشتری به نمونه سرور ULA دارید. این اتصال در حال حاضر تنها از طریق استفاده از مسیرهای سفارشی IPv6 با نمونه بعدی به عنوان hops بعدی امکان پذیر است.

خروجی نمونه

<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. ایجاد و تست مسیر به دروازه اینترنت

در حالی که این تنظیمات آزمایشگاهی را دارید، بیایید عملکرد ویژگی 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

در داخل نمونه مشتری، یک حلقه به سمت نقطه پایانی IPv6 انجام دهید

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

این دستور curl باید به پایان برسد زیرا VPC مشتری فقط مسیر زیرشبکه خود و یک مسیر به VPC سرور1 دارد. برای اینکه بتوانید به محدوده GUA سرور 2 VPC برسید، باید از دروازه اینترنت پیش فرض از طریق یک مسیر سفارشی استفاده کنید.

از جلسه 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 -m 5.0 -g -6 'http://[GUA-ipv6-address-of-server2]:80/'

این دستور curl اکنون باید پیام سلام سفارشی را برگرداند، که نشان می دهد می توانید با موفقیت به آدرس 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 خارج شوید تا از بخش پاکسازی آزمایشگاه عبور کنید.

9. پاکسازی کنید

پاک کردن نمونه ها

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

10. تبریک می گویم

شما با موفقیت از مسیرهای IPv6 سفارشی استاتیک استفاده کرده‌اید که جهش‌های بعدی روی دروازه‌های بعدی و نمونه بعدی و اتصال IPv6 سرتاسر تأیید شده با استفاده از آن مسیرها تنظیم شده است.

بعدش چی؟

برخی از این کدها را بررسی کنید...

ادامه مطلب و ویدیوها

اسناد مرجع