استخدام قواعد "ترجمة عنوان الشبكة" (NAT) في السحابة الإلكترونية

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.

75eef5f6fd6d7e41.png

إعداد بيئة ذاتية

  1. سجِّل الدخول إلى Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • اسم المشروع هو معرّفك الشخصي لهذا المشروع. طالما أنك تتبع اصطلاحات التسمية الخاصة به، يمكنك استخدام أي شيء تريده ويمكنك تحديثه في أي وقت.
  • يجب أن يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد ضبطه). تُنشئ وحدة التحكّم في Cloud Console سلسلة فريدة تلقائيًا، فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الرجوع إلى رقم تعريف المشروع (والذي يتم تحديده عادةً على أنّه PROJECT_ID). لذلك، إذا لم يعجبك، يمكنك إنشاء رقم تعريف عشوائي آخر أو يمكنك تجربة رقم تعريف المشروع الخاص بك ومعرفة ما إذا كان متاحًا. بعد ذلك تكون الحالة "مجمّدة". بمجرد إنشاء المشروع.
  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد Google Cloud.

إنّ تنفيذ هذا الدرس التطبيقي حول الترميز لن يكون مكلفًا أو مكلفًا على الإطلاق. احرص على اتّباع أي تعليمات في قسم "الحذف سريعًا". الذي يقدم لك نصائح حول كيفية إيقاف تشغيل الموارد حتى لا تتكبّد أي فواتير خارج نطاق هذا البرنامج التعليمي. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج فترة تجريبية مجانية بقيمة 300 دولار أمريكي.

بدء Cloud Shell

مع أنّه يمكن إدارة Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس التطبيقي Google Cloud Shell، وهي بيئة سطر أوامر يتم تشغيلها في السحابة الإلكترونية.

من وحدة تحكّم Google Cloud Platform، انقر على رمز Cloud Shell في شريط الأدوات العلوي الأيسر:

bce75f34b2c53987.png

من المفترَض أن تستغرق عملية إدارة الحسابات والاتصال بالبيئة بضع لحظات فقط. عند الانتهاء، من المفترض أن يظهر لك شيء مثل هذا:

f6ef2b5f13479f3a.png

يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت وتعمل على Google Cloud، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. يمكنك تنفيذ جميع أعمالك في هذا التمرين من خلال متصفح.

3- إعداد التمرين المعملي

ستستخدم مشروعًا في هذا التمرين المعملي وتنشئ شبكتي VPC مع شبكة فرعية في كل منهما. ستحجز عناوين IP الخارجية، ثم تنشئ وتضبط مدخل ترجمة عنوان الشبكة (NAT) (باستخدام Cloud Router)، بالإضافة إلى مثيلين للمُنتِج بالإضافة إلى مثيل للمستهلك. بعد التحقّق من صحة سلوك "ترجمة عنوان الشبكة في السحابة الإلكترونية" التلقائي، ستُنشئ قواعد مخصّصة لترجمة عنوان الشبكة في Cloud وتتحقّق من سلوكها.

نظرة عامة على بنية الشبكات:

815147de3de0bd19.png

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. أو الشركات التابعة لها. جميع الحقوق محفوظة. يُرجى عدم توزيعها.