إدارة أنظمة لينكس

إعداد الشبكة

18 دقيقة الدرس 6 من 28

إعداد الشبكة

الشبكة هي الجهاز الدوراني لكل خادم إنتاجي. واجهة مُهيَّأة بشكل خاطئ، أو محلل DNS خاطئ، أو إدخال غير متوقع في جدول التوجيه، سيُعطِّل الخدمات بصمت — لا تعطُّل، لا ملفات نواة، فقط نقاط نهاية غير قابلة للوصول في الساعة الثالثة صباحاً. تُزوِّدك هذه الدرس بالنموذج الذهني الكامل ومجموعة أوامر عملية تستخدمها مهندسو DevOps الكبار لإعداد الشبكة وفحصها وتشخيص أخطائها على الخوادم المادية والآلات الافتراضية ومثيلات السحابة.

الأمر ip: أداتك الأساسية

الأمر ip من حزمة iproute2 هو البديل الحديث لأدوات ifconfig وroute وarp المُهمَلة منذ وقت طويل. تُشحَن به كل التوزيعات الكبرى وصور السحابة الافتراضية الرسمية. لا تستخدم ifconfig — فهو يُخفي العناوين الثانوية، ويتجاهل جداول التوجيه الحديثة، ولا يُثبَّت أصلاً على الصور المُبسَّطة.

يعتمد الأمر ip قواعد نحو متسقة من نوع كائن-فعل: ip <كائن> <فعل>. الكائنات الأساسية هي: link (واجهات الطبقة الثانية)، وaddr (عناوين IP)، وroute (جدول التوجيه)، وneigh (ذاكرة ARP/NDP).

# --- الواجهات (طبقة الربط) --- ip link show # جميع الواجهات: الحالة، MTU، MAC ip link show eth0 # تفاصيل واجهة واحدة ip link set eth0 up # تفعيل الواجهة ip link set eth0 down # إيقاف الواجهة ip link set eth0 mtu 9000 # ضبط إطارات jumbo (لشبكات 10GbE/25GbE في مراكز البيانات) # --- عناوين IP --- ip addr show # جميع العناوين على جميع الواجهات ip addr show eth0 # عناوين eth0 فقط ip addr add 192.168.1.10/24 dev eth0 # إضافة عنوان (مؤقت — يُمحى عند إعادة التشغيل) ip addr del 192.168.1.10/24 dev eth0 # حذف عنوان # --- جدول التوجيه --- ip route show # جدول التوجيه الكامل ip route show default # البوابة الافتراضية فقط ip route add default via 192.168.1.1 # إضافة مسار افتراضي ip route add 10.0.0.0/8 via 10.8.0.1 dev eth1 # إضافة مسار محدد (مثل شبكة VPN) ip route del 10.0.0.0/8 # حذف مسار ip route get 8.8.8.8 # أي واجهة وبوابة ستُستخدم للوصول لهذا الوجهة؟ # --- ذاكرة ARP / الجيران --- ip neigh show # جدول ARP (تعيينات MAC <-> IP) ip neigh flush dev eth0 # مسح ذاكرة ARP على واجهة
نصيحة احترافية — ip route get: حين لا تستطيع خدمة الوصول إلى نقطة نهاية بعيدة، شغِّل ip route get <remote-ip> قبل أي خطوة أخرى. سيخبرك بالضبط أي عنوان IP المصدر وأي واجهة ستستخدمها لينكس للوصول إلى تلك الوجهة. في الشركات الكبيرة التي تحتوي على بطاقات شبكة متعددة، يُعدّ عدم تناسق جدول التوجيه سبباً شائعاً وسهل التفويت للأعطال.

فهم واجهات الشبكة

على خادم لينكس حديث ستصادف أنواعاً متعددة من واجهات الشبكة:

  • بطاقات الشبكة المادية: تُسمَّى وفق أسماء الواجهات الشبكية القابلة للتنبؤ (PNI) — مثل eno1 (على اللوحة الأم)، وenp3s0 (ناقل/فتحة PCI)، وens3 (فتحة hot-plug). جاءت PNI للقضاء على التسمية العشوائية القديمة eth0/eth1.
  • واجهات السحابة/الافتراضية: AWS تُسمِّيها ens3/eth0؛ GCP تُسمِّيها ens4، وتعتمد على برنامج تشغيل النواة.
  • واجهة الاسترداد: lo — دائماً 127.0.0.1/8. الخدمات المرتبطة بـ127.0.0.1 لا يمكن الوصول إليها إلا محلياً.
  • جسور Docker/الحاويات: docker0 وcni0 وbr-xxxx — جسور افتراضية تُنشئها بيئات تشغيل الحاويات.
  • Bonding/Teaming: دمج بطاقتَي شبكة أو أكثر في واجهة منطقية واحدة للتكرار أو تجميع النطاق الترددي.
  • VLANs: واجهات فرعية مُوسَمة، مثل eth0.100.
مفهوم أساسي — الأعلام مهمة: عند تشغيل ip link show، ابحث عن الأعلام بين الأقواس الزاويّة: UP تعني أن الواجهة مفعَّلة إدارياً؛ LOWER_UP تعني رصد إشارة فيزيائية (الكابل موصول أو الشبكة اللاسلكية متصلة). بطاقة الشبكة المتذبذبة تُظهِر UP مع تناوب LOWER_UP/NO-CARRIER — مشكلة أجهزة لا برمجيات.

الإعداد الدائم: Netplan و NetworkManager

التغييرات التي تُجريها بالأمر ip هي مؤقتة — تختفي عند إعادة التشغيل. يُدار الإعداد الدائم للشبكة بواسطة أحد مكدَّسَين حسب توزيعتك:

  • Netplan (Ubuntu 17.10+ وUbuntu Server افتراضياً) — تعريفات YAML في /etc/netplan/؛ يُولِّد Netplan إعدادات للمُصيِّر الخلفي (إما networkd أو NetworkManager) ويُطبِّقها.
  • NetworkManager (Red Hat/CentOS/Fedora، واختيارياً Ubuntu Desktop) — يُدار عبر nmcli أو nmtui أو ملفات الاتصال في /etc/NetworkManager/system-connections/.
Network configuration stack layers Ubuntu Server / Debian YAML in /etc/netplan/*.yaml Netplan (translator) netplan apply systemd-networkd renderer: networkd RHEL / Fedora / Rocky Connection profiles / nmcli NetworkManager nmcli / nmtui Linux Kernel Network Stack
كلٌّ من Netplan (Ubuntu) و NetworkManager (RHEL/Rocky) يُهيِّئان في نهاية المطاف نفس مكدّس شبكة نواة لينكس.

مثال Netplan — خادم بعنوان IP ثابت على واجهة وDHCP على أخرى:

# /etc/netplan/01-netcfg.yaml network: version: 2 renderer: networkd ethernets: enp3s0: # IP ثابت للبطاقة الأساسية (للشبكة العامة) addresses: - 203.0.113.10/24 routes: - to: default via: 203.0.113.1 nameservers: addresses: [1.1.1.1, 8.8.8.8] enp4s0: # DHCP للبطاقة الداخلية/الإدارية dhcp4: true dhcp6: false
# التحقق من صحة YAML دون تطبيقه netplan try # يُطبِّق لمدة 120 ثانية؛ يتراجع إن لم تُؤكِّد (الأكثر أماناً للاختبار) netplan generate # توليد إعدادات الخلفية فقط دون تطبيق netplan apply # تطبيق فوري (بلا تراجع — استخدمه عند الثقة) # على Ubuntu، بعد تعديل ملف Netplan، يُفضَّل دائماً: netplan try --timeout 30 # اضغط Enter للقبول، أو انتظر التراجع التلقائي

NetworkManager عبر nmcli — الأسلوب المُفضَّل في الأتمتة:

# عرض جميع الاتصالات (النشطة وغير النشطة) nmcli connection show # عرض الأجهزة النشطة وحالتها nmcli device status # إنشاء اتصال جديد بعنوان IP ثابت على enp3s0 nmcli connection add type ethernet ifname enp3s0 con-name prod-eth \ ipv4.addresses 10.0.1.50/24 \ ipv4.gateway 10.0.1.1 \ ipv4.dns "1.1.1.1 8.8.8.8" \ ipv4.method manual # تفعيل الاتصال nmcli connection up prod-eth # تعديل اتصال موجود (مثل تغيير DNS) nmcli connection modify prod-eth ipv4.dns "8.8.8.8 8.8.4.4" nmcli connection reload # حذف ملف اتصال nmcli connection delete prod-eth
تحذير إنتاجي — مثيلات السحابة: على الآلات الافتراضية السحابية (AWS EC2 وGCP وAzure)، لا تُغيِّر أبداً بطاقة الشبكة الأساسية إلى IP ثابت يدوياً. تُدير خدمة بيانات التعريف وcloud-init الـDHCP؛ تجاوز هذا يُعطِّل التواصل مع وكيل السحابة، وتسليم مفاتيح SSH، ومراقبة المثيل. إن احتجت IP ثابتاً على مثيل سحابي، خصِّص Elastic IP (على AWS) أو IP داخلي ثابت عبر لوحة تحكم السحابة — لا تُغيِّر إعدادات DHCP على مستوى نظام التشغيل.

أسماء المضيفين وتحليل DNS

يتدفق تحليل الأسماء في لينكس عبر سلسلة محلل متعددة الطبقات. فهم هذه السلسلة ضروري لتشخيص أعطال اكتشاف الخدمات في الإنتاج:

  1. /etc/hosts — جدول ثابت، يُفحَص أولاً بشكل افتراضي. مفيد للتجاوزات المحلية وأسماء مضيفي الحاويات، لكنه كابوس صيانة على نطاق واسع.
  2. NSS (خدمة تبديل الأسماء) — مُهيَّأة في /etc/nsswitch.conf. يتحكم السطر hosts: في ترتيب التحليل، وعادةً يكون files dns myhostname.
  3. محلل DNS — يستعلم خوادم الأسماء المُدرَجة في /etc/resolv.conf. على الأنظمة الحديثة يُدار هذا الملف بواسطة systemd-resolved ويكون رابطاً رمزياً إلى /run/systemd/resolve/stub-resolv.conf.
# تعيين اسم مضيف النظام أو تغييره hostnamectl set-hostname prod-api-01.us-east-1.internal hostnamectl status # عرض أسماء المضيف الثابتة والعابرة والجميلة # فحص /etc/hosts cat /etc/hosts # فحص resolv.conf الفعّال cat /etc/resolv.conf # غالباً رابط رمزي على أنظمة systemd-resolved resolvectl status # حالة systemd-resolved الكاملة: DNS لكل واجهة وحالة DNSSEC resolvectl query github.com # تحليل اسم عبر systemd-resolved (مع معلومات تشخيص) # تشخيص DNS dig github.com # إخراج كامل لاستعلام DNS (استخدم هذا لا nslookup) dig github.com @1.1.1.1 # إجبار محلل محدد (تجاوز الذاكرة المؤقتة المحلية) dig +short github.com # عنوان IP فقط dig -x 8.8.8.8 # بحث عكسي dig github.com MX # استعلام عن نوع سجل محدد # فحوصات الاتصال الشبكي السريعة ping -c 3 8.8.8.8 # إمكانية الوصول للطبقة الثالثة (ICMP) traceroute -n 8.8.8.8 # المسار إلى الوجهة (-n لتجنب بحث DNS العكسي) ss -tulnp # جميع المنافذ الاستماع مع العمليات المالكة (يحل محل netstat)
مفهوم أساسي — systemd-resolved ومحلل الشريحة: على Ubuntu 18.04+ وأنظمة RHEL الحديثة، يُشير /etc/resolv.conf إلى 127.0.0.53:53 وهو محلل الشريحة الذي يُشغِّله systemd-resolved. يمنحك ذلك DNS لكل واجهة وDNSSEC والتخزين المؤقت. إن استبدلت /etc/resolv.conf بملف عادي يُشير إلى خادم DNS مؤسسي، تفقد كل ذلك. الطريقة الصحيحة لإعداد DNS هي عبر Netplan (خاصية nameservers:) أو nmcli حتى يتعلم systemd-resolved بها لكل واجهة.

التطبيق العملي: تشخيص عطل شبكي

حين لا يمكن الوصول إلى خدمة، تعامل مع هذا النموذج الذهني طبقةً طبقةً:

  1. هل الواجهة مفعَّلة؟ ip link show <if> — ابحث عن LOWER_UP.
  2. هل لديها العنوان الصحيح؟ ip addr show <if>.
  3. هل المسار صحيح؟ ip route get <destination>.
  4. هل ARP/L2 يعمل؟ ip neigh show — هل MAC البوابة مُحلَّل؟
  5. هل DNS يُحلِّل؟ dig <hostname> — قارن مع dig @8.8.8.8 <hostname> لعزل مشكلات المحلل المحلي.
  6. هل المنفذ مفتوح؟ ss -tulnp | grep <port> على الخادم؛ nc -zv <host> <port> من العميل.
  7. هل جدار حماية يحجب؟ iptables -L -n -v أو nft list ruleset — سيتناوله درس تقوية الأمان.
نصيحة احترافية — ss بدلاً من netstat: netstat مُهمَل وكثيراً ما لا يُثبَّت على الصور المُبسَّطة. ss (إحصاءات المقابس) أسرع، موجود دائماً، ويُظهِر العملية المالكة عبر -p. الأعلام -tulnp تعني: TCP + UDP، الاستماع فقط، رقمي (بلا DNS)، مع العمليات. احفظ هذه المجموعة — ستشغِّلها عشرات المرات يومياً.