NAT والبروكسي والبوابات
NAT والبروكسي والبوابات
كل بيئة إنتاجية سحابية تُخفي مساحة عناوينها الداخلية عن الإنترنت العام. الخوادم في الشبكات الفرعية الخاصة لا تملك عناوين IP قابلة للتوجيه، ومع ذلك تستطيع الوصول إلى سجلات npm، وسحب صور الحاويات من Docker Hub، واستقبال حركة HTTPS من ملايين المستخدمين. ثلاثة آليات تُحقق ذلك: ترجمة عناوين الشبكة (NAT)، والبروكسي، والبوابات (Gateways). يُحلّل هذا الدرس الثلاثة على مستوى الحزم ويربطها بالأنماط التي ستضبطها يومياً بوصفك مهندس DevOps.
ترجمة عناوين الشبكة (NAT)
يُعيد NAT كتابة عناوين IP (وأرقام منافذ TCP/UDP) في ترويسات الحزم عند مرورها عبر جهاز توجيه أو جدار حماية. هناك نوعان حرجان في الإنتاج.
SNAT — ترجمة عنوان المصدر
ترجمة عنوان المصدر (SNAT) تستبدل عنوان IP المصدر في الحزم الصادرة. نسختك الخاصة على 10.0.1.42 تريد الوصول إلى 54.230.10.1. قبل مغادرة الحزمة من VPC، يُعيد جهاز NAT كتابة المصدر إلى IP العام الخاص به (مثلاً 52.1.2.3) ويُسجّل الربط في جدول تتبع الاتصالات. عند وصول الرد إلى 52.1.2.3، يُراجع الجهاز الجدول، يُعيد كتابة الوجهة إلى 10.0.1.42، ويُحوّل الحزمة للداخل. يرى الخادم الخارجي IP العام فقط — ولا يعلم أن العنوان الخاص موجود أصلاً.
في AWS، تنفّذ NAT Gateway عملية SNAT للشبكات الفرعية الخاصة. في Linux، يُنجز iptables الأمر نفسه بقاعدة واحدة:
MASQUERADE مناسب للعناوين الديناميكية (أجهزة التوجيه المنزلية، النسخ الموقتة) لأنه يقرأ عنوان الواجهة الحالي تلقائياً. لبوابات NAT الإنتاجية ذات Elastic IPs الثابتة، استخدم دائماً SNAT --to-source لضمان سلوك حتمي بعد إعادة التشغيل.
DNAT — ترجمة عنوان الوجهة
ترجمة عنوان الوجهة (DNAT) تستبدل عنوان IP الوجهة. تصل حزمة إلى IP العام على المنفذ 443، فيُعيد جدار الحماية كتابة الوجهة إلى خادم داخلي على 10.0.2.80:8443 قبل التوجيه. هكذا تعمل موازنات الحمل المعدنية وقواعد إعادة توجيه المنافذ — وهو بالضبط ما يحدث داخل كل موازن حمل شبكي (NLB) على مستوى الحزم.
nf_conntrack_count مقابل nf_conntrack_max قبل أن يكتشفها حادث إنتاجي.
البروكسي الأمامي (Forward Proxy)
يجلس البروكسي الأمامي بين العملاء الداخليين والإنترنت. يُضبط العملاء لتوجيه جميع الطلبات الصادرة عبره. يُنجز البروكسي الاتصال الفعلي نيابةً عنهم، ويُعيد الرد. من منظور خادم الأصل، جاء الطلب من البروكسي.
يظهر البروكسي الأمامي في المؤسسات الكبيرة لثلاثة أسباب: التحكم في الخروج (السماح بوجهات محددة فقط)، وفحص TLS (فك التشفير، الفحص لحماية البيانات، إعادة التشفير)، والتخزين المؤقت (تقليل تكاليف النطاق الترددي لسجلات الحزم).
no_proxy دائماً IP بيانات تعريف النسخة (169.254.169.254) وإلا ستفقد نسخ EC2/GCE بيانات اعتماد IAM الخاصة بها.
البروكسي العكسي (Reverse Proxy)
يجلس البروكسي العكسي أمام خوادمك الخلفية. يتحدث العملاء إلى البروكسي معتقدين أنه الأصل. يُعيد البروكسي توجيه الطلبات إلى خادم خلفي أو أكثر، يجمع الرد، ويُعيده. لا يعلم العملاء أبداً بعناوين الخلفية.
Nginx هو البروكسي العكسي الكنسي في DevOps. إليك ضبط بروكسي عكسي HTTPS بسيط:
ترويسة X-Forwarded-For حرجة: تحمل IP العميل الأصلي عبر سلسلة البروكسي حتى تُظهر سجلات تطبيقك IPs الحقيقية بدلاً من عنوان البروكسي. بدونها، يبدو كل طلب صادراً من البروكسي.
البوابات: API Gateway وNAT Gateway
كلمة "بوابة" مُثقلة بالمعاني في شبكات السحابة. نوعان مهمان:
- Internet Gateway (IGW) — NAT 1:1 بين IP الشبكة الفرعية العامة الخاص وElastic IP الخاص بها. يُتيح للنسخ ذات IPs العامة أن تكون قابلة للوصول مباشرة. لا حدود للنطاق الترددي، ولا ترجمة منافذ.
- NAT Gateway — SNAT مُدارة للشبكات الفرعية الخاصة. تُوجّه النسخ في الشبكات الخاصة مسارها الافتراضي (
0.0.0.0/0) إلى NAT Gateway، التي تُطبّق SNAT على حركة الخروج وتُعيد DNAT على الردود. مُدارة بالكامل وتتوسع تلقائياً حتى 100 Gbps. - API Gateway — يعمل على الطبقة السابعة. يُنهي HTTP/HTTPS، يُطبّق المصادقة، يُحدّد معدل الطلبات، ويُوجّه إلى الخدمات المصبّة (Lambda، EC2، الحاويات). وظيفياً هو بروكسي عكسي مع طبقة مصادقة وتحويل طلبات.
أنماط الخروج في الإنتاج
تجمع المنصات الكبيرة هذه العناصر في بُنى خروج متدرجة. الأحمال الخاصة لا تملك IPs عامة أبداً. كل حركة الخروج تتدفق عبر VPC خروج مركزي (يُسمى أحياناً "transit VPC" أو "egress VPC") يُشغّل NAT Gateway مُدارة مع بروكسي أمامي لنظام كشف التسلل. يخدم Elastic IP واحد لكل منطقة توفر كعنوان مصدر ثابت لجميع حركة الإنتاج — يُدرج موردو الطرف الثالث هذه IPs في قوائم السماح الخاصة بجدران الحماية لديهم.
CloudWatch: NatGateway ConnectionAttemptCount مقابل ConnectionEstablishedCount. الفجوة بينهما هي معدل الإسقاط. الحل: توزيع Lambda عبر NAT Gateways متعددة في AZs مختلفة، أو التحول إلى VPC Endpoint لحركة خدمات AWS (لا حاجة لـNAT أصلاً).
فهم مكان عمل كل آلية — SNAT على مستوى الحزم، البروكسي الأمامي على مستوى تطبيق HTTP، البروكسي العكسي المُنهي لـTLS، API Gateway المُطبّق للمصادقة — يُمكّنك من اختيار الأداة الصحيحة وتشخيص الأعطال بدقة. عندما يتوقف خادم خلفي عن استقبال الحركة، السؤال الأول: أي طبقة انكسرت؟ هل امتلأ جدول conntrack لـNAT، أم الخادم الخلفي للبروكسي غير صحي، أم المسار في البوابة مفقود، أم انتهت صلاحية الشهادة؟