التوجيه وترجمة العناوين NAT
درس 4 من 6
4التوجيه وترجمة العناوين NAT
الصورة الكبيرةلا يوجد جهاز في العالم يعرف الطريق الكامل من جوالك إلى خادم في اليابان. كل موجّه يعرف خطوة واحدة فقط: «لهذه الوجهة، سلّمها لذاك». ومع ذلك تصل الحزمة في أجزاء من الثانية، لأن كل خطوة صحيحة.
ماذا تشاهد في الرسم: الحزمة تقفز من موجّه لآخر. كل موجّه يبحث في جدوله عن الوجهة ويُنقص TTL واحدًا، حتى يجد موجّه متصل بشبكة الخادم مباشرة.
خارطة هذا الجزء
المفاهيم بالترتيب، اضغط أيًّا منها للقفز إليه:
طريقان إلى نفس الفكرة
الموجّه مثل لوحات الطريق السريع: عند كل تقاطع لوحة تقول «الرياض يمينًا، جدة يسارًا، وكل ما عدا ذلك للأمام». لا أحد يحمل الخريطة كاملة، لكن كل تقاطع يعرف الاتجاه التالي. وNAT مثل سنترال الشركة: الموظفون لهم تحويلات داخلية، والعالم يرى رقمًا واحدًا، والسنترال يتذكر من اتصل بمن ليعيد الرد للموظف الصحيح.
القرار بالترتيب: أطول تطابق للبادئة أولًا (10.1.0.0/16 يغلب 10.0.0.0/8 للعنوان 10.1.5.9)، ثم المسافة الإدارية الأقل بين مصادر المسار (متصل 0، ثابت 1، eBGP 20، OSPF 110، RIP 120، iBGP 200)، ثم المقياس الأقل داخل البروتوكول. 0.0.0.0/0 بوابة الملاذ الأخير. OSPF حالة وصلة يبني خريطة ويحسب بـ Dijkstra داخل المؤسسة، وBGP بين الأنظمة المستقلة بالسياسات. PAT (NAT Overload) يشارك عنوانًا عامًا بتمييز المنافذ، وHSRP/VRRP بوابة افتراضية احتياطية.
قبل أن تبدأ
🧮الشبكات الفرعية
تعرف البادئة وكيف تطابق عنوانًا.
📦المنافذ
NAT يعتمد على أرقام المنافذ.
الفكرة الجوهرية
1جدول التوجيه وأطول تطابق
كل موجّه يحمل جدولًا: «لهذه الشبكة، أرسل لهذه القفزة». حين تصل حزمة يقارن عنوان الوجهة بكل سطر، وقد يطابق أكثر من سطر. يفوز الأكثر تحديدًا، أي صاحب أطول بادئة، لأنه يعرف عن الوجهة أكثر.
هكذا يقرر كل موجّه. أضف مسارًا وشاهد من يفوز.
import ipaddress
routes = {
"0.0.0.0/0": "ISP",
"10.0.0.0/8": "R2",
"10.1.0.0/16": "R3",
"10.1.5.0/24": "R5",
}
def next_hop(destination):
ip = ipaddress.ip_address(destination)
matches = [ipaddress.ip_network(r) for r in routes if ip in ipaddress.ip_network(r)]
best = max(matches, key=lambda net: net.prefixlen)
return best, routes[str(best)]
for dest in ["10.1.5.9", "10.1.9.9", "10.200.0.1", "8.8.8.8"]:
net, hop = next_hop(dest)
print(f"{dest:<11} -> {str(net):<12} via {hop}")2من أين تأتي المسارات؟
ثلاثة مصادر: الشبكات المتصلة مباشرة بواجهات الموجّه، والمسارات الثابتة التي يكتبها المهندس بيده، والمسارات الديناميكية التي تتعلمها البروتوكولات. OSPF داخل الشركة يبني خريطة كاملة ويعيد الحساب وحده حين ينقطع رابط. BGP بروتوكول الإنترنت بين الشركات الكبرى، ويختار بالسياسة والاتفاقات لا بالسرعة وحدها.
اقرأ السطر: الرمز (S ثابت، C متصل، O من OSPF)، البادئة، [المسافة الإدارية/المقياس]، القفزة التالية والواجهة.
R1# show ip route Gateway of last resort is 203.0.113.1 to network 0.0.0.0 S* 0.0.0.0/0 [1/0] via 203.0.113.1 C 10.1.1.0/24 is directly connected, Gi0/1 O 10.1.2.0/24 [110/2] via 10.1.12.2, Gi0/0 O 10.0.0.0/8 [110/20] via 10.1.12.2, Gi0/0 ! a default route and single-area OSPF R1(config)# ip route 0.0.0.0 0.0.0.0 203.0.113.1 R1(config)# router ospf 1 R1(config-router)# router-id 1.1.1.1 R1(config-router)# network 10.1.0.0 0.0.255.255 area 0
| مصدر المسار (Cisco) | المسافة الإدارية |
|---|---|
| شبكة متصلة | 0 |
| مسار ثابت | 1 |
| eBGP | 20 |
| OSPF | 110 |
| RIP | 120 |
| iBGP | 200 |
3NAT وPAT: بيت كامل بعنوان واحد
العناوين الخاصة لا تمر على الإنترنت. فحين يخرج جهازك يبدّل الراوتر عنوان المصدر بعنوان البيت العام، ويغيّر منفذ المصدر لرقم فريد، ويسجل ذلك في جدول. حين يعود الرد إلى ذلك المنفذ يعرف من الجدول لأي جهاز هو. هذا PAT، وهو ما يعمل في كل بيت تقريبًا.
لاحظ آخر سطر: رد لا يطابق أي سطر يُرمى. لهذا لا يستطيع أحد من الخارج بدء اتصال بجهازك بلا «إعادة توجيه منفذ».
public_ip = "198.51.100.7"
next_port = 40001
table = {} # public port -> (private ip, private port)
def go_out(src_ip, src_port):
global next_port
table[next_port] = (src_ip, src_port)
print(f"out: {src_ip}:{src_port} becomes {public_ip}:{next_port}")
next_port += 1
def come_back(dst_port):
inside = table.get(dst_port)
print(f"in: :{dst_port} ->", f"{inside[0]}:{inside[1]}" if inside else "no entry, dropped")
go_out("192.168.1.20", 51514)
go_out("192.168.1.31", 60022)
come_back(40001)
come_back(40002)
come_back(45000)مثال محلول
المسألة: موجّه عنده المسارات 0.0.0.0/0 via ISP و172.16.0.0/12 via R2 و172.16.8.0/22 via R3. أين تذهب 172.16.9.4 و172.17.0.1 و172.32.0.1؟ الحل: 172.16.9.4 تقع في 172.16.8.0/22 (من 8.0 إلى 11.255) وفي /12، فيفوز الأطول: R3. 172.17.0.1 في /12 فقط: R2. 172.32.0.1 خارج /12 (الذي ينتهي عند 172.31): المسار الافتراضي إلى ISP.
خرافة مقابل حقيقة
| الخرافة | الحقيقة |
|---|---|
| الموجّه يعرف الطريق كاملًا للوجهة. | يعرف القفزة التالية فقط ويثق بمن بعده. |
| المسار الأقل مقياسًا يفوز دائمًا. | أطول بادئة أولًا، ثم المسافة الإدارية، ثم المقياس. |
| IPv6 يحتاج NAT مثل IPv4. | العناوين كافية لكل جهاز، فالحماية بالجدار الناري لا بالترجمة. |
أين تقابله في العمل
🌐مزوّدو الخدمة
BGP يربط شبكاتهم، وخطأ فيه قد يُسقط خدمات عالمية.
🏠البيت
«إعادة توجيه منفذ» تفتح سطرًا ثابتًا في جدول NAT لخادم ألعاب أو كاميرا.
☁️السحابة
NAT Gateway يسمح للخوادم الخاصة بالخروج دون قبول اتصالات واردة.
اختبر فهمك
أي مسار يُختار لـ 10.1.5.9؟
كلها تطابق إلا الأخير، والأطول /16 يفوز.
ما المسافة الإدارية الافتراضية لـ OSPF في Cisco؟
الثابت 1، وEIGRP 90، وOSPF 110، وRIP 120.
كيف يميّز PAT بين جهازين خلف عنوان عام واحد؟
كل اتصال خارج يأخذ منفذًا عامًا فريدًا في الجدول.
أي بروتوكول يربط الأنظمة المستقلة على الإنترنت؟
OSPF داخل المؤسسة، وBGP بين المؤسسات.
ما معنى TTL في حزمة IP؟
كل موجّه ينقصه واحدًا، فلا تدور الحزمة إلى الأبد.
بطاقات مراجعة سريعة
تحقق من فهمك
لماذا يُنقص كل موجّه قيمة TTL؟
حتى لا تدور حزمة في حلقة توجيه للأبد؛ عند الصفر تُرمى.
لماذا لا يستطيع صديقك الاتصال بخادم ألعاب على جهازك مباشرة؟
لأن NAT لا يعرف لمن يرسل اتصالًا واردًا بلا سطر في جدوله؛ الحل إعادة توجيه منفذ.
ما الفرق بين OSPF وBGP بجملة؟
OSPF يجد أقصر طريق داخل شبكتك، وBGP يختار بين شبكات العالم بالسياسات.
مصادر هذا الدرس
مرتّبة بالنوع. ابدأ بالتوثيق الرسمي إذا تبي المرجع الدقيق، وبالمقال أو الفيديو إذا تبي الشرح أولًا.
مقالات2
خلّصت الدرس؟
سجّل الدخول ليُحفظ تقدّمك.