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)")
کلیات معماری آزمایشگاهی
برای نشان دادن هر دو نوع مسیر سفارشی بعدی هاپ، شما 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 سرتاسر تأیید شده با استفاده از آن مسیرها تنظیم شده است.
بعدش چی؟
برخی از این کدها را بررسی کنید...
- با استفاده از آدرسهای IPv6 از میزبانهای داخلی به Google API دسترسی داشته باشید
- گزینه های آدرس دهی IP IPv4 و IPv6