1. نظرة عامة
تقنية Cloud NAT هي أداة فعّالة، فمن خلال هذه الأداة، يمكن لأعباء العمل على Compute Engine وGoogle Kubernetes Engine الوصول إلى موارد الإنترنت بطريقة آمنة وقابلة للتوسّع، بدون تعريض أعباء العمل إلى الوصول الخارجي باستخدام بروتوكولات الإنترنت (IP) الخارجية.
تتميز Cloud NAT بتصميم لا يعتمد على الخادم الوكيل، حيث تُطبق ترجمة عنوان الشبكة مباشرةً على طبقة SDN في "أندروميدا". وبالتالي، لن يؤثر ذلك في الأداء على أعباء العمل، ويمكن توسيع نطاقه بسهولة ليشمل العديد من الأجهزة الافتراضية والمناطق وأجهزة VPC.
قواعد NAT هي إضافة إلى Cloud NAT. تتيح لك ميزة "قواعد ترجمة عنوان الشبكة" في Cloud NAT إنشاء قواعد وصول تحدد كيفية استخدام "ترجمة عنوان الشبكة" في السحابة الإلكترونية للاتصال بالإنترنت. تتيح قواعد NAT في الوقت الحالي اختيار عنوان NAT المصدر على أساس عنوان الوجهة.
بدون قواعد NAT، يستخدم الجهاز الافتراضي (VM) مع تفعيل Cloud NAT مجموعة عناوين IP نفسها من ترجمة عنوان الشبكة (NAT) للوصول إلى جميع عناوين الإنترنت.
في بعض الأحيان، تتطلب حالة استخدام NAT في الشبكة الإعلانية للسحابة الإلكترونية استخدام عناوين IP لمصدر مختلفة لوجهات معيّنة. تحدد قاعدة NAT المطابقة والإجراء المقابل. بعد تحديد قواعد NAT، تتم مطابقة الحزمة مع كل قاعدة من قواعد NAT. وفي حال مطابقة قاعدة، سيتم تنفيذ الإجراء المقابل لهذه المطابقة.
لمزيد من المعلومات، يُرجى مراجعة قسم الوثائق حول قواعد NAT .
المعلومات التي ستطّلع عليها
- كيفية إعداد بوابة ترجمة عنوان الشبكة في السحابة الإلكترونية استعدادًا لقواعد NAT.
- طريقة تصميم قواعد NAT باستخدام لغة التعبير الشائعة (CEL).
- كيفية إنشاء قواعد NAT وإرفاقها ببوابة NAT.
- كيفية اختبار قواعد NAT من مثيل.
- طريقة تعديل قواعد بوابة NAT
- كيفية حذف قواعد NAT والعودة إلى سلوك Cloud NAT التلقائي.
المتطلبات
- معرفة أساسية بـ Google Compute Engine
- الشبكات الأساسية والمعرفة ببروتوكول TCP/IP
- معرفة سطر أوامر Unix/Linux الأساسي
- من المفيد استكمال جولة حول الشبكات في Google Cloud Platform مثل مختبر الاتصال بالشبكات في Google Cloud.
- فهم أساسيات ترجمة عنوان الشبكة في السحابة الإلكترونية.
2. استخدام Google Cloud Console وCloud Shell
وللتفاعل مع Google Cloud Platform، سنستخدم كلاً من Google Cloud Console وCloud Shell خلال هذا الدرس التطبيقي.
Google Cloud Console
يمكن الوصول إلى Cloud Console من خلال https://console.cloud.google.com.
إعداد بيئة ذاتية
- سجِّل الدخول إلى Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
- اسم المشروع هو معرّفك الشخصي لهذا المشروع. طالما أنك تتبع اصطلاحات التسمية الخاصة به، يمكنك استخدام أي شيء تريده ويمكنك تحديثه في أي وقت.
- يجب أن يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد ضبطه). تُنشئ وحدة التحكّم في Cloud Console سلسلة فريدة تلقائيًا، فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الرجوع إلى رقم تعريف المشروع (والذي يتم تحديده عادةً على أنّه
PROJECT_ID
). لذلك، إذا لم يعجبك، يمكنك إنشاء رقم تعريف عشوائي آخر أو يمكنك تجربة رقم تعريف المشروع الخاص بك ومعرفة ما إذا كان متاحًا. بعد ذلك تكون الحالة "مجمّدة". بمجرد إنشاء المشروع.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد Google Cloud.
إنّ تنفيذ هذا الدرس التطبيقي حول الترميز لن يكون مكلفًا أو مكلفًا على الإطلاق. احرص على اتّباع أي تعليمات في قسم "الحذف سريعًا". الذي يقدم لك نصائح حول كيفية إيقاف تشغيل الموارد حتى لا تتكبّد أي فواتير خارج نطاق هذا البرنامج التعليمي. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج فترة تجريبية مجانية بقيمة 300 دولار أمريكي.
بدء Cloud Shell
مع أنّه يمكن إدارة Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس التطبيقي Google Cloud Shell، وهي بيئة سطر أوامر يتم تشغيلها في السحابة الإلكترونية.
من وحدة تحكّم Google Cloud Platform، انقر على رمز Cloud Shell في شريط الأدوات العلوي الأيسر:
من المفترَض أن تستغرق عملية إدارة الحسابات والاتصال بالبيئة بضع لحظات فقط. عند الانتهاء، من المفترض أن يظهر لك شيء مثل هذا:
يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت وتعمل على Google Cloud، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. يمكنك تنفيذ جميع أعمالك في هذا التمرين من خلال متصفح.
3- إعداد التمرين المعملي
ستستخدم مشروعًا في هذا التمرين المعملي وتنشئ شبكتي VPC مع شبكة فرعية في كل منهما. ستحجز عناوين IP الخارجية، ثم تنشئ وتضبط مدخل ترجمة عنوان الشبكة (NAT) (باستخدام Cloud Router)، بالإضافة إلى مثيلين للمُنتِج بالإضافة إلى مثيل للمستهلك. بعد التحقّق من صحة سلوك "ترجمة عنوان الشبكة في السحابة الإلكترونية" التلقائي، ستُنشئ قواعد مخصّصة لترجمة عنوان الشبكة في Cloud وتتحقّق من سلوكها.
نظرة عامة على بنية الشبكات:
4. حجز عناوين IP الخارجية
لنحتفظ بجميع عناوين IP الخارجية لاستخدامها في هذا التمرين المعملي. سيساعدك ذلك في كتابة جميع قواعد NAT وجدار الحماية ذات الصلة في سحابة VPC الخاصة بالمستهلك والمنتج.
من Cloud Shell:
gcloud compute addresses create nat-address-1 nat-address-2 nat-address-3 producer-address-1 producer-address-2 --region us-east4
إخراج:
Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-1]. Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-2]. Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-3]. Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-1]. Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-2].
تعبئة عناوين IP التي تم حجزها كمتغيّرات للبيئة
export natip1=`gcloud compute addresses list --filter name:nat-address-1 --format="get(address)"` export natip2=`gcloud compute addresses list --filter name:nat-address-2 --format="get(address)"` export natip3=`gcloud compute addresses list --filter name:nat-address-3 --format="get(address)"` export producerip1=`gcloud compute addresses list --filter name:producer-address-1 --format="get(address)"` export producerip2=`gcloud compute addresses list --filter name:producer-address-2 --format="get(address)"`
من غير المتوقّع أن يتم إرسال أي نتائج، ولكن للتأكّد من تعبئة العناوين بشكلٍ صحيح. لنخرج قيم جميع متغيرات البيئة.
$ env | egrep '^(nat|producer)ip[1-3]'
إخراج:
producerip1=<Actual Producer IP 1> producerip2=<Actual Producer IP 2> natip1=<NAT IP 1> natip2=<NAT IP 2> natip3=<NAT IP 3>
5- إعداد سحابة VPC ومثيلاتها في أداة الإنتاج
سنقوم الآن بإنشاء الموارد لموارد المنتج. ستوفّر المثيلات التي تعمل في سحابة VPC الخاصة بالمُنتِج خدمة الوصول إلى الإنترنت باستخدام عنوانَي IP عامَّين "POLICY-address-1". و"الإنتاج-العنوان-2" .
لنبدأ أولاً بإنشاء VPC. من Cloud Shell:
gcloud compute networks create producer-vpc --subnet-mode custom
إخراج:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/networks/producer-vpc]. NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 producer-vpc CUSTOM REGIONAL Instances on this network will not be reachable until firewall rules are created. As an example, you can allow all internal traffic between instances as well as SSH, RDP, and ICMP by running: $ gcloud compute firewall-rules create <FIREWALL_NAME> --network producer-vpc --allow tcp,udp,icmp --source-ranges <IP_RANGE> $ gcloud compute firewall-rules create <FIREWALL_NAME> --network producer-vpc --allow tcp:22,tcp:3389,icmp
بعد ذلك، لننشئ الشبكة الفرعية في us-east4. من Cloud Shell:
gcloud compute networks subnets create producer-e4 \ --network producer-vpc --range 10.0.0.0/24 --region us-east4
إخراج:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/regions/us-east4/subnetworks/producer-e4]. NAME REGION NETWORK RANGE producer-e4 us-east4 producer-vpc 10.0.0.0/24
بعد ذلك، لننشئ قواعد جدار حماية سحابة VPC للسماح لعناوين IP الخاصة بترجمة عنوان الشبكة (NAT) بالوصول إلى مثيلات المنتج على المنفذ 8080.
بالنسبة إلى القاعدة الأولى، من Cloud Shell:
gcloud compute firewall-rules create producer-allow-8080 \ --network producer-vpc --allow tcp:8080 \ --source-ranges $natip1,$natip2,$natip3
إخراج:
Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/firewalls/producer-allow-8080]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED producer-allow-8080 producer-vpc INGRESS 1000 tcp:8080 False
الخطوة التالية هي إنشاء مثيلي المنتج.
ستشغِّل مثيلات المنشئ خدمة صدى IP في حاوية Docker متاحة على Docker Hub (يتوفّر رمز المصدر في مستودع GitHub لمؤلف الخدمة.
لتزويد المثيلات بسرعة بكل البرامج المطلوبة، سنستخدم ميزة نشر الحاوية في Compute Engine.
لنتمكن من كتابة قواعد NAT، سنزود كل مثيل بعنوان IP مختلف محجوز.
أنشئ المثيل الأول. من Cloud Shell:
gcloud compute instances create-with-container producer-instance-1 \ --zone=us-east4-a --machine-type=e2-medium \ --network-interface=address=producer-address-1,network-tier=PREMIUM,subnet=producer-e4 \ --container-image=mpolden/echoip --container-restart-policy=always
إخراج:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/zones/us-east4-a/instances/producer-instance-1]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS producer-instance-1 us-east4-a e2-medium 10.0.0.2 <producer IP 1> RUNNING
ثم أنشئ المثيل الثاني. من Cloud Shell:
gcloud compute instances create-with-container producer-instance-2 \ --zone=us-east4-a --machine-type=e2-medium \ --network-interface=address=producer-address-2,network-tier=PREMIUM,subnet=producer-e4 \ --container-image=mpolden/echoip --container-restart-policy=always
إخراج:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/zones/us-east4-a/instances/producer-instance-2]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS producer-instance-2 us-east4-a e2-medium 10.0.0.3 <producer IP 2> RUNNING
6- إعداد سحابة VPC وترجمة عنوان الشبكة (NAT) ومثيل (NPC) في السحابة الإلكترونية للمستهلك
الآن بعد أن أنشأت خدمة المنتج، حان الوقت لإنشاء شبكة VPC للمستهلك وبوابة NAT في السحابة الإلكترونية.
بعد إنشاء شبكة VPC والشبكة الفرعية، سنضيف قاعدة جدار حماية دخول بسيطة للسماح بعملية الشراء داخل التطبيق لنطاقات عناوين IP المصدر لـ TCP. وسيتيح لنا ذلك نقل بروتوكول النقل الآمن لمثيلات المستهلك مباشرةً باستخدام gcloud.
سنُنشئ بعد ذلك بوابة ترجمة عنوان الشبكة السحابية بسيطة في وضع التخصيص اليدوي والعنوان المحجوز "nat-address-1" المرتبطة بها. في الأجزاء اللاحقة من الدرس التطبيقي حول الترميز، سنُعدّل إعدادات المدخل لإضافة قواعد مخصّصة. .
لنبدأ أولاً بإنشاء VPC. من Cloud Shell:
gcloud compute networks create consumer-vpc --subnet-mode custom
إخراج:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/networks/consumer-vpc]. NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 consumer-vpc CUSTOM REGIONAL Instances on this network will not be reachable until firewall rules are created. As an example, you can allow all internal traffic between instances as well as SSH, RDP, and ICMP by running: $ gcloud compute firewall-rules create <FIREWALL_NAME> --network consumer-vpc --allow tcp,udp,icmp --source-ranges <IP_RANGE> $ gcloud compute firewall-rules create <FIREWALL_NAME> --network producer-vpc --allow tcp:22,tcp:3389,icmp
بعد ذلك، لننشئ شبكة فرعية في us-east4. من Cloud Shell:
gcloud compute networks subnets create consumer-e4 \ --network consumer-vpc --range 10.0.0.0/24 --region us-east4
إخراج:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/regions/us-east4/subnetworks/consumer-e4]. NAME REGION NETWORK RANGE consumer-e4 us-east4 consumer-vpc 10.0.0.0/24
بعد ذلك، لننشئ قواعد جدار حماية VPC للسماح لعناوين نطاقات الشراء داخل التطبيق بالوصول إلى مثيلات المستهلك على المنفذ 22.
بالنسبة إلى قاعدة جدار الحماية الأولى، يمكنك تشغيل ما يلي من Cloud Shell:
gcloud compute firewall-rules create consumer-allow-iap \ --network consumer-vpc --allow tcp:22 \ --source-ranges 35.235.240.0/20
إخراج:
Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/firewalls/consumer-allow-iap]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED consumer-allow-iap consumer-vpc INGRESS 1000 tcp:22 False
قبل إنشاء بوابة ترجمة عنوان الشبكة، نحتاج إلى إنشاء مثيل Cloud Router أولاً (نستخدم رقم ASN خاصًا ولكن لا علاقة له بأنشطة هذا التمرين). من Cloud Shell:
gcloud compute routers create consumer-cr \ --region=us-east4 --network=consumer-vpc \ --asn=65501
إخراج:
Creating router [consumer-cr]...done. NAME REGION NETWORK consumer-cr us-east4 consumer-vpc
ثم أنشئ مثيل بوابة NAT. من Cloud Shell:
gcloud compute routers nats create consumer-nat-gw \ --router=consumer-cr \ --router-region=us-east4 \ --nat-all-subnet-ip-ranges \ --nat-external-ip-pool=nat-address-1
إخراج:
Creating NAT [consumer-nat-gw] in router [consumer-cr]...done.
أنشئ مثيل اختبار المستهلك. نحن نملأ هنا عناوين IP المحجوزة للمنتج من أجل الرجوع إليها ضمن المثيل لاحقًا. من Cloud Shell:
gcloud compute instances create consumer-instance --zone=us-east4-a \ --machine-type=e2-medium --network-interface=subnet=consumer-e4,no-address \ --metadata=producer-service-ip1=$producerip1,producer-service-ip2=$producerip2
إخراج:
Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/zones/us-east4-a/instances/consumer-instance]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS consumer-instance us-east4-a e2-medium 10.0.0.2 RUNNING
7. التحقّق من سلوك "ترجمة عنوان الشبكة في السحابة الإلكترونية" التلقائي
في هذه المرحلة، يستخدم مثيل المستهلك سلوك "ترجمة عنوان الشبكة في السحابة الإلكترونية" التلقائي الذي يستخدم عنوان IP المحجوز نفسه وهو "nat-address-1". للتواصل مع جميع العناوين الخارجية.
لنتحقق من هذا السلوك أولاً قبل استخدام ميزة "قواعد NAT" الجديدة في Cloud NAT.
SSH في مثيل المستهلك. من Cloud Shell:
gcloud compute ssh consumer-instance --zone=us-east4-a
من المفترض أن تكون الآن في مثيل المثيل.
نتيجة النموذج (تم اقتطاع الناتج الكامل للإيجاز)
No zone specified. Using zone [us-east4-a] for instance: [consumer-instance]. External IP address was not found; defaulting to using IAP tunneling. ... ... <username>@consumer-instance:~$
من داخل مثيل المستهلك، لنبدأ أولاً بجلب عناوين IP الخاصة بالمنتجين وتعبئتها كمتغيرات للبيئة.
export producerip1=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip1" -H "Metadata-Flavor: Google"` export producerip2=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip2" -H "Metadata-Flavor: Google"`
ثم حاول إجراء عقدة على كلتا مثيلات المنتِج ومراقبة عنوان IP المصدر الذي تم إرجاعه.
<username>@consumer-instance:~$ curl http://$producerip1:8080 34.136.8.83 <username>@consumer-instance:~$ curl http://$producerip2:8080 34.136.8.83
من المفترض أن يظهر لك عنوان IP نفسه الذي يتم عرضه لكلتا نقطتَي النهاية، وهو ما يساوي قيمة عنوان IP الخارجي المحجوز "nat-address-1".
وبالمثل، يجب أن يعرض منعطف أي خدمة خارجية عاكس عنوان IP عنوان IP نفسه، على سبيل المثال:
<username>@consumer-instance:~$ curl http://ifconfig.co 34.136.8.83 <username>@consumer-instance:~$ curl http://ifconfig.me 34.136.8.83 <username>@consumer-instance:~$ curl http://ip.fyr.io 34.136.8.83
اخرج من جلسة بروتوكول النقل الآمن للمثيل في الوقت الحالي، وسنعيد بروتوكول النقل الآمن بعد ضبط قواعد NAT.
8. إنشاء قواعد Cloud NAT
تتم كتابة قواعد NAT باستخدام بنية لغة التعبير الشائعة. للمزيد من المعلومات عن لغة تعبير القاعدة، يُرجى الاطّلاع على لغة تعبير القاعدة.
يمكنك أيضًا إضافة قاعدة NAT إلى بوابة NAT حالية باستخدام أوامر gcloud أيضًا. وسوف نستكشف كلا الخيارين لإنشاء قواعد Cloud NAT.
لنقم أولاً بإنشاء ملف YAML لقاعدة NAT.
من Cloud Shell:
export projectid=`gcloud config get-value project` cat <<EOF >natrulesfile.txt rules: - ruleNumber: 100 match: destination.ip == '$producerip2' action: sourceNatActiveIps: - /projects/$projectid/regions/us-east4/addresses/nat-address-2 EOF
ثم لنُحدث بوابة NAT الحالية باستخدام ملف القاعدة هذا. من Cloud Shell:
gcloud alpha compute routers nats update consumer-nat-gw \ --router=consumer-cr \ --rules=natrulesfile.txt \ --router-region=us-east4
يجب أن تتوقع النتيجة التالية :
Updating nat [consumer-nat-gw] in router [consumer-cr]...done.
تحقَّق من ضبط القاعدة بنجاح. من Cloud Shell:
gcloud alpha compute routers nats rules list \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4
يجب أن تتوقع النتيجة التالية :
RULE_NUMBER MATCH 100 destination.ip == '35.192.142.134'
لنحاول إعادة إنشاء القاعدة نفسها باستخدام أوامر gcloud فقط. احذف أولاً القاعدة الحالية. من Cloud Shell:
gcloud alpha compute routers nats rules delete 100 \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --quiet
يجب أن تتوقع النتيجة التالية :
Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]
بعد ذلك، أعِد إنشاء القاعدة باستخدام الأمر gcloud هذا. من Cloud Shell:
gcloud alpha compute routers nats rules create 100 \ --match='destination.ip == "'$producerip2'"' \ --source-nat-active-ips=nat-address-2 --nat=consumer-nat-gw \ --router=consumer-cr --router-region=us-east4
يجب أن تتوقع النتيجة التالية :
Creating Rule [100] in NAT [consumer-nat-gw]...done.
مرة أخرى للتحقّق من إنشاء القاعدة بنجاح، كرِّر الأمر السابق. هذه المرة سنضيف مفتاح تنسيق YAML لرؤية التفاصيل الكاملة للقاعدة.
من Cloud Shell:
gcloud alpha compute routers nats rules list\ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --format=yaml
يجب أن تتوقع النتيجة التالية :
--- action: sourceNatActiveIps: - https://www.googleapis.com/compute/alpha/projects/<Project-ID>/regions/us-east4/addresses/nat-address-2 match: destination.ip == <actual IP for producer-IP 2> ruleNumber: 100
أخيرًا، لاحظ أن كلاً من "nat-address1" و"nat-address-2" تظهر العناوين الخارجية كـ "IN_USE". للاطّلاع على ذلك، شغِّل هذا الأمر من Cloud Shell:
$ gcloud compute addresses list
من المفترض أن تحصل على النتيجة التالية (يجب أن تتطابق عناوين IP الفعلية مع العناوين التي حجزتها) :
NAME ADDRESS/RANGE TYPE PURPOSE NETWORK REGION SUBNET STATUS nat-address-1 34.136.8.83 EXTERNAL us-east4 IN_USE nat-address-2 34.70.137.35 EXTERNAL us-east4 IN_USE nat-address-3 34.135.103.88 EXTERNAL us-east4 RESERVED producer-address-1 34.66.0.105 EXTERNAL us-east4 IN_USE producer-address-2 35.192.142.134 EXTERNAL us-east4 IN_USE
9. التحقُّق من سلوك قواعد "ترجمة عنوان الشبكة" في Cloud
في هذه المرحلة، يجب أن يستخدم مثيل المستهلك قاعدة Cloud NAT التي تم إنشاؤها لاستخدام nat-address-2 للتواصل مع Production-address-2.
لنتحقق من صحة هذا السلوك. SSH في مثيل المستهلك. من Cloud Shell:
gcloud compute ssh consumer-instance --zone=us-east4-a
من المفترض أن تكون الآن في مثيل المثيل.
نتيجة النموذج (تم اقتطاع الناتج الكامل للإيجاز)
No zone specified. Using zone [us-east4-a] for instance: [consumer-instance]. External IP address was not found; defaulting to using IAP tunneling. ... ... <username>@consumer-instance:~$
من داخل مثيل المستهلك، لنبدأ أولاً بجلب عناوين IP الخاصة بالمنتجين وتعبئتها كمتغيرات للبيئة.
export producerip1=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip1" -H "Metadata-Flavor: Google"` export producerip2=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip2" -H "Metadata-Flavor: Google"`
ثم حاول إجراء عقدة على كلتا مثيلات المنتِج ومراقبة عنوان IP المصدر الذي تم إرجاعه.
<username>@consumer-instance:~$ curl http://$producerip1:8080 34.136.8.83 <username>@consumer-instance:~$ curl http://$producerip2:8080 34.70.137.35
من المفترض أن يظهر لك الآن عنوان IP مختلف يتم عرضه لكلتا نقطتَي النهاية، ويجب أن يكون عنوان IP الأول هو نفسه السلوك التلقائي. يجب أن يكون عنوان IP الثاني مساويًا لـ "nat-address-2" بعد إضافة قاعدة NAT الجديدة.
يجب أن يتم عرض عنوان IP نفسه المستخدَم في السلوك التلقائي، على سبيل المثال:
<username>@consumer-instance:~$ curl http://ifconfig.co 34.136.8.83 <username>@consumer-instance:~$ curl http://ifconfig.me 34.136.8.83 <username>@consumer-instance:~$ curl http://ip.fyr.io 34.136.8.83
اخرج من جلسة بروتوكول النقل الآمن للمثيل في الوقت الحالي، وسنعيد توجيه البروتوكول إلى عنوان الاختبار واستنزافه.
10. تحديث & حذف قواعد Cloud NAT
يمكنك تعديل قواعد "ترجمة عنوان الشبكة" الحالية في السحابة الإلكترونية. على سبيل المثال، يمكنك ربط عناوين IP جديدة واستنزاف عناوين IP الحالية المرتبطة بالقواعد الحالية.
لنُعدِّل ملف "قواعد NAT" على النحو التالي
من Cloud Shell:
export projectid=`gcloud config get-value project` cat <<EOF >natrulesfile.txt rules: - ruleNumber: 100 match: destination.ip == '$producerip2' action: sourceNatDrainIps: - /projects/$projectid/regions/us-east4/addresses/nat-address-2 sourceNatActiveIps: - /projects/$projectid/regions/us-east4/addresses/nat-address-3 EOF
ما يفعله هذا الملف الجديد هو وضع "nat-address-2" وهو في حالة استنزاف. وإضافة "nat-address-3" في حالة نشاط. من المفترض أن يسمح ذلك بإنهاء الاتصالات الحالية التي تستخدم nat-address-2 على نحو مريح، أثناء إنشاء اتصالات جديدة فقط باستخدام nat-address-3.
ثم لنُحدث بوابة NAT الحالية باستخدام ملف القاعدة هذا. من Cloud Shell:
gcloud alpha compute routers nats update consumer-nat-gw \ --router=consumer-cr \ --rules=natrulesfile.txt \ --router-region=us-east4
يجب أن تتوقع النتيجة التالية :
Updating nat [consumer-nat-gw] in router [consumer-cr]...done.
تحقَّق من ضبط القاعدة بنجاح. من Cloud Shell:
gcloud alpha compute routers nats rules list \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --format=yaml
يجب أن تتوقع النتيجة التالية :
--- action: sourceNatActiveIps: - https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-3 sourceNatDrainIps: - https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-2 match: destination.ip == '35.192.142.134' ruleNumber: 100
لاحظ كيف أن "nat-address-2" قد تم وضعها الآن في حالة استنزاف. ونترك الأمر لك كتمرين للتحقّق من أنّ الاتصالات الجديدة من شبكة VPC للمستهلك تستخدم الآن عناوين IP الصحيحة لترجمة عنوان الشبكة (NAT).
أخيرًا، سيتم حذف قواعد ترجمة عنوان الشبكة من مدخل ترجمة عنوان الشبكة في السحابة الإلكترونية والعودة إلى السلوك التلقائي. يمكنك استخدام الأمر gcloud التالي. من Cloud Shell:
gcloud alpha compute routers nats rules delete 100 \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --quiet
يجب أن تتوقع النتيجة التالية :
Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]
للتحقق من عدم وجود المزيد من قواعد NAT، لنستخدم بوابة وصف NAT
gcloud alpha compute routers nats describe consumer-nat-gw \ --router=consumer-cr --router-region=us-east4
يجب أن تتوقع النتيجة التالية :
enableEndpointIndependentMapping: false name: consumer-nat-gw natIpAllocateOption: MANUAL_ONLY natIps: - https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-1 sourceSubnetworkIpRangesToNat: ALL_SUBNETWORKS_ALL_IP_RANGES
لاحظ عدم وجود "قواعد": في مخرجات YAML. الإشارة إلى عدم ضبط قواعد NAT.
11. خطوات التنظيف
لتجنُّب تحصيل الرسوم المتكرّرة، عليك حذف جميع الموارد المرتبطة بهذا الدرس التطبيقي حول الترميز.
يجب أولاً حذف جميع النُسخ الافتراضية.
من Cloud Shell:
gcloud compute instances delete consumer-instance \ producer-instance-1 producer-instance-2 \ --zone us-east4-a --quiet
الناتج المتوقع :
Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/consumer-instance]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/producer-instance-1]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/producer-instance-2].
بعد ذلك، احذف Cloud Router. من Cloud Shell:
gcloud compute routers delete consumer-cr \ --region us-east4 --quiet
يجب أن تتوقع النتيجة التالية :
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/routers/consumer-cr].
تحرير جميع عناوين IP الخارجية من Cloud Shell:
gcloud compute addresses delete nat-address-1 \ nat-address-2 nat-address-3 producer-address-1 \ producer-address-2 --region us-east4 --quiet
يجب أن تتوقع النتيجة التالية :
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-1]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-2]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-3]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-1]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-2].
احذف قواعد جدار الحماية من سحابة VPC. من Cloud Shell:
gcloud compute firewall-rules delete consumer-allow-iap \ producer-allow-8080 --quiet
يجب أن تتوقع النتيجة التالية :
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/firewalls/consumer-allow-iap]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/firewalls/producer-allow-8080].
حذف الشبكات الفرعية. من Cloud Shell:
gcloud compute networks subnets delete consumer-e4 \ producer-e4 --region=us-east4 --quiet
يجب أن تتوقع النتيجة التالية :
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/consumer-e4]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/producer-e4].
أخيرًا، لنحذف وحدات سحابة VPC. من Cloud Shell:
gcloud compute networks delete consumer-vpc \ producer-vpc --quiet
يجب أن تتوقع النتيجة التالية :
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/networks/consumer-vpc]. Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/networks/producer-vpc].
12. تهانينا!
لقد أكملت برنامج Cloud NAT Rules Lab.
المواضيع التي تناولتها
- كيفية إعداد بوابة ترجمة عنوان الشبكة في السحابة الإلكترونية استعدادًا لقواعد NAT.
- طريقة تصميم قواعد NAT باستخدام لغة التعبير الشائعة (CEL).
- كيفية إنشاء قواعد NAT وإرفاقها ببوابة NAT.
- كيفية اختبار قواعد NAT من مثيل.
- طريقة تعديل قواعد بوابة NAT
- كيفية حذف قواعد NAT والعودة إلى سلوك Cloud NAT التلقائي.
الخطوات التالية
- جرِّب إنشاء قواعد NAT (ترجمة عنوان الشبكة) أكثر تعقيدًا مثل هذا المثال.
- استكشف استنزاف عناوين IP لبروتوكول NAT ولاحظ تأثير الاتصال.
- مزيد من المعلومات عن الاتصال بالشبكات على Google Cloud Platform
©Google, Inc. أو الشركات التابعة لها. جميع الحقوق محفوظة. يُرجى عدم توزيعها.