مشروع عملي: ابنِ شبكة مكتب صغير من الصفر
درس 5 من 6
5مشروع عملي: ابنِ شبكة مكتب صغير من الصفر
الصورة الكبيرةصاحب مكتب محاسبة فيه 20 موظفًا يطلب منك: «أريد شبكة للموظفين، وواي فاي للضيوف لا يرى أجهزتنا، وكاميرات منفصلة». هذا طلب حقيقي يصل لكل مهندس شبكات مبتدئ، وستبنيه الآن كاملًا على حاسوبك دون شراء جهاز واحد.
ماذا تشاهد في الرسم: ست مراحل بالترتيب، ولكل مرحلة اختبار قبل أن تنتقل. إن فشل اختبار عرفت أن المشكلة في آخر خطوة فقط.
خارطة هذا الجزء
المفاهيم بالترتيب، اضغط أيًّا منها للقفز إليه:
طريقان إلى نفس الفكرة
تخيّل أنك تقسّم بيتًا كبيرًا لثلاث شقق: لكل شقة باب ورقم (هذه VLAN وعناوينها)، وبينها ممر فيه حارس (الموجّه وقائمة التحكم) يسمح للضيف بالخروج للشارع لكن لا يدخل شقق الموظفين، وموظف استقبال يعطي كل زائر رقم غرفته تلقائيًا (DHCP). لن تكتب أوامر كثيرة في المسار المبسّط؛ يكفي أن تفهم الخطة وترسمها على ورقة: ثلاث مجموعات، وطريق كل واحدة، ومن يُمنع من ماذا.
الطوبولوجيا: موجّه R1 بواجهة واحدة نحو مبدّل SW1 (Router-on-a-stick بواجهات فرعية 802.1Q)، وSW1 بمنافذ access لكل VLAN ومنفذ trunk للموجّه، ونقطة وصول لاسلكية للضيوف. الخطة: VLAN 10 للموظفين 192.168.10.0/24، وVLAN 20 للضيوف 192.168.20.0/24، وVLAN 30 للكاميرات 192.168.30.0/24، وVLAN 99 للإدارة. R1 يخدم DHCP لكل VLAN مع استثناء أول عشرة عناوين، وACL ممتدة على الواجهة الفرعية للضيوف تمنع 192.168.10.0/24 و192.168.30.0/24 وتسمح بالباقي. الإدارة عن بعد بـ SSHv2 فقط مع transport input ssh، وكلمات المرور مشفرة بـ secret. التحقق بـ show vlan brief وshow interfaces trunk وshow ip dhcp binding وshow access-lists.
قبل أن تبدأ
🧱التبديل وVLAN
تعرف المنفذ access والـ trunk ووسم 802.1Q.
🛡️أمن الشبكات
تعرف قوائم التحكم ACL.
🔎أدوات التشخيص
تستخدم سلّم التشخيص وping وtraceroute.
الفكرة الجوهرية
1خطط على الورق أولًا
أكثر خطأ يرتكبه المبتدئ أن يفتح البرنامج ويبدأ الكتابة. ارسم أولًا جدول العناوين: لكل VLAN رقمها واسمها وشبكتها وبوابتها ونطاق DHCP. هذا الجدول هو نصف التوثيق، وكل خطوة بعده مجرد ترجمة له إلى أوامر.
| VLAN | الاسم | الشبكة | البوابة | DHCP |
|---|---|---|---|---|
| 10 | الموظفون | 192.168.10.0/24 | 192.168.10.1 | .11 – .254 |
| 20 | الضيوف | 192.168.20.0/24 | 192.168.20.1 | .11 – .254 |
| 30 | الكاميرات | 192.168.30.0/24 | 192.168.30.1 | .11 – .254 |
| 99 | الإدارة | 192.168.99.0/24 | 192.168.99.1 | ثابتة |
ولّد جدولك بدل أن تحسبه يدويًا. جرّب أن تجعل شبكة الضيوف /25 بدل /24.
import ipaddress
plan = {10: "STAFF", 20: "GUEST", 30: "CAMERAS", 99: "MGMT"}
for vlan, name in plan.items():
net = ipaddress.ip_network(f"192.168.{vlan}.0/24")
hosts = list(net.hosts())
gateway, pool = hosts[0], hosts[10:]
print(f"VLAN {vlan:<3} {name:<8} {str(net):<17} gw {str(gateway):<14} "
f"DHCP {pool[0]} - {pool[-1]} ({len(pool)} addresses)")2المبدّل: VLAN والمنافذ
أنشئ الشبكات الافتراضية وسمّها، ثم ضع كل منفذ في VLAN مستخدميه، واجعل المنفذ نحو الموجّه trunk يحمل كل الشبكات بوسم 802.1Q. أطفئ المنافذ غير المستخدمة وضعها في VLAN لا تُستخدم: منفذ مفتوح في الجدار باب لأي غريب.
اختبار هذه المرحلة: جهازان في VLAN 10 يصل أحدهما للآخر، وجهاز في VLAN 20 لا يصل لهما (لم نبنِ التوجيه بعد).
SW1(config)# vlan 10 SW1(config-vlan)# name STAFF SW1(config-vlan)# vlan 20 SW1(config-vlan)# name GUEST SW1(config-vlan)# vlan 30 SW1(config-vlan)# name CAMERAS SW1(config)# interface range fa0/1 - 12 SW1(config-if-range)# switchport mode access SW1(config-if-range)# switchport access vlan 10 SW1(config)# interface fa0/20 SW1(config-if)# switchport access vlan 20 SW1(config)# interface gi0/1 SW1(config-if)# switchport mode trunk SW1(config)# interface range fa0/13 - 19 SW1(config-if-range)# shutdown SW1# show vlan brief SW1# show interfaces trunk
3الموجّه: التوجيه وDHCP
الموجّه يحتاج «بابًا» في كل VLAN: واجهة فرعية لكل شبكة بوسمها وبوابتها. ثم يصبح خادم DHCP يوزع العناوين ويخبر كل جهاز ببوابته وخادم DNS.
كرر الواجهة الفرعية ومجمع DHCP لكل VLAN. الاختبار: كل جهاز يأخذ عنوانًا تلقائيًا، وجهاز الموظف يصل لجهاز الضيف (سنمنع ذلك في الخطوة التالية).
R1(config)# interface gi0/0.10 R1(config-subif)# encapsulation dot1Q 10 R1(config-subif)# ip address 192.168.10.1 255.255.255.0 R1(config)# interface gi0/0.20 R1(config-subif)# encapsulation dot1Q 20 R1(config-subif)# ip address 192.168.20.1 255.255.255.0 R1(config)# interface gi0/0 R1(config-if)# no shutdown R1(config)# ip dhcp excluded-address 192.168.10.1 192.168.10.10 R1(config)# ip dhcp pool STAFF R1(dhcp-config)# network 192.168.10.0 255.255.255.0 R1(dhcp-config)# default-router 192.168.10.1 R1(dhcp-config)# dns-server 1.1.1.1 R1# show ip dhcp binding
no shutdown على الواجهة الأم gi0/0. الواجهات الفرعية لا تعمل إن كانت الواجهة الأم مطفأة.4الأمان والاختبار والتوثيق
الآن طبّق طلب العميل: الضيف يخرج للإنترنت ولا يصل للموظفين ولا الكاميرات. ضع ACL ممتدة قريبة من المصدر، على الواجهة الفرعية للضيوف باتجاه الدخول. ثم أغلق Telnet واجعل الإدارة بـ SSH فقط. وأخيرًا اكتب مصفوفة اختبار: من يجب أن يصل لمن، وماذا حدث فعلًا.
ترتيب الأسطر مهم: ACL تُقرأ من الأعلى، وفي آخرها «منع كل شيء» ضمنيًا، لذلك نضع permit في النهاية. كلمة المرور هنا مثال فقط.
R1(config)# ip access-list extended GUEST-IN R1(config-ext-nacl)# deny ip 192.168.20.0 0.0.0.255 192.168.10.0 0.0.0.255 R1(config-ext-nacl)# deny ip 192.168.20.0 0.0.0.255 192.168.30.0 0.0.0.255 R1(config-ext-nacl)# permit ip any any R1(config)# interface gi0/0.20 R1(config-subif)# ip access-group GUEST-IN in R1(config)# ip domain-name office.example R1(config)# crypto key generate rsa modulus 2048 R1(config)# ip ssh version 2 R1(config)# username admin secret Str0ng-Example! R1(config)# line vty 0 4 R1(config-line)# login local R1(config-line)# transport input ssh
سطر FAIL هنا يعني أن سطر منع الكاميرات نُسي أو جاء بعد permit. اكتب نتائجك الحقيقية في observed.
# The test matrix: what should happen, then what your pings showed.
expected = {("STAFF", "GUEST"): True, ("GUEST", "STAFF"): False,
("GUEST", "CAMERAS"): False, ("GUEST", "INTERNET"): True,
("STAFF", "CAMERAS"): True}
observed = {("STAFF", "GUEST"): True, ("GUEST", "STAFF"): False,
("GUEST", "CAMERAS"): True, ("GUEST", "INTERNET"): True,
("STAFF", "CAMERAS"): True}
for (src, dst), want in expected.items():
got = observed[(src, dst)]
mark = "PASS" if got == want else "FAIL"
print(f"{mark} {src:<6} -> {dst:<9} expected {'reach' if want else 'blocked':<7} got {'reach' if got else 'blocked'}")مثال محلول
المسألة: بعد البناء، جهاز ضيف أخذ عنوان 169.254.12.7 ولا يتصفح. أجهزة الموظفين تعمل. أين المشكلة؟
الحل: عنوان 169.254.x.x يعني أن الجهاز لم يصل لخادم DHCP أصلًا. اصعد سلّم التشخيص: (1) المنفذ connected؟ (2) show vlan brief: هل منفذ الضيف في VLAN 20؟ (3) show interfaces trunk: هل VLAN 20 مسموحة على الـ trunk؟ (4) هل توجد الواجهة الفرعية gi0/0.20 بالوسم الصحيح؟ (5) هل يوجد مجمع DHCP للشبكة 192.168.20.0؟ في هذه الحالة كان المجمع موجودًا لكن الـ trunk يسمح بـ VLAN 10 و30 فقط. بعد switchport trunk allowed vlan add 20 أخذ الجهاز 192.168.20.11.
خرافة مقابل حقيقة
| الخرافة | الحقيقة |
|---|---|
| مختبر المحاكاة لا يُحسب خبرة. | مشروع موثّق في Packet Tracer يثبت أنك تخطط وتبني وتختبر، وهو ما يسأل عنه المقابِل. |
| VLAN وحدها تكفي لعزل الضيوف. | ما إن يوجه الموجّه بينها حتى تتصل. العزل الحقيقي يحتاج ACL أو جدارًا ناريًا. |
| التوثيق رفاهية بعد العمل. | هو جزء من العمل؛ بدونه لا يستطيع أحد إصلاح الشبكة بعدك، ولا أنت بعد ستة أشهر. |
أين تقابله في العمل
🏢المكاتب الصغيرة
هذا التصميم نفسه يعمل في آلاف العيادات والمكاتب والمحلات.
🎓المقابلة الأولى
«اشرح مشروعًا بنيته» سؤال مضمون؛ هذا جوابك.
🧪الاستعداد لـ CCNA
يغطي VLAN والتوجيه بين VLAN وDHCP وACL وSSH عمليًا.
اختبر فهمك
جهاز أخذ عنوان 169.254.x.x. ماذا يعني ذلك؟
هذا عنوان يعطيه الجهاز لنفسه حين لا يجد DHCP.
أين تضع ACL ممتدة تمنع الضيوف من الموظفين؟
الممتدة تحدد المصدر والوجهة بدقة، فتوضع قرب المصدر لترمي المرور مبكرًا.
ACL فيها permit ip any any في السطر الأول ثم سطرا deny. ماذا يحدث؟
ACL تُقرأ من الأعلى وتتوقف عند أول تطابق.
ما فائدة Router-on-a-stick؟
واجهات فرعية بوسوم 802.1Q على كابل trunk واحد.
لماذا transport input ssh؟
SSH مشفر؛ Telnet يكشف كل ما تكتبه لمن يلتقط المرور.
بطاقات مراجعة سريعة
تحقق من فهمك
لماذا نختبر بعد كل مرحلة بدل الاختبار مرة في النهاية؟
لأن الخطأ يكون في آخر خطوة فقط، فتجده في دقائق. في النهاية يختلط عشرون احتمالًا.
العميل يريد لاحقًا أن تصل كاميرات VLAN 30 لخادم تسجيل في VLAN 10 فقط. ماذا تضيف؟
ACL على الواجهة الفرعية للكاميرات: يسمح من 192.168.30.0/24 إلى عنوان الخادم فقط، ويمنع باقي 192.168.10.0/24، ثم يسمح بما تحتاجه الكاميرات غير ذلك أو يمنعه.
ماذا تضع في README المشروع؟
الطلب، والطوبولوجيا (صورة)، وجدول العناوين، والقرارات وأسبابها، ومصفوفة الاختبار، وما ستحسّنه لو كان المكتب أكبر.
مصادر هذا الدرس
مرتّبة بالنوع. ابدأ بالتوثيق الرسمي إذا تبي المرجع الدقيق، وبالمقال أو الفيديو إذا تبي الشرح أولًا.
فيديو1
خلّصت الدرس؟
سجّل الدخول ليُحفظ تقدّمك.