إعداد الشبكة
إعداد الشبكة
الشبكة هي الجهاز الدوراني لكل خادم إنتاجي. واجهة مُهيَّأة بشكل خاطئ، أو محلل DNS خاطئ، أو إدخال غير متوقع في جدول التوجيه، سيُعطِّل الخدمات بصمت — لا تعطُّل، لا ملفات نواة، فقط نقاط نهاية غير قابلة للوصول في الساعة الثالثة صباحاً. تُزوِّدك هذه الدرس بالنموذج الذهني الكامل ومجموعة أوامر عملية تستخدمها مهندسو DevOps الكبار لإعداد الشبكة وفحصها وتشخيص أخطائها على الخوادم المادية والآلات الافتراضية ومثيلات السحابة.
الأمر ip: أداتك الأساسية
الأمر ip من حزمة iproute2 هو البديل الحديث لأدوات ifconfig وroute وarp المُهمَلة منذ وقت طويل. تُشحَن به كل التوزيعات الكبرى وصور السحابة الافتراضية الرسمية. لا تستخدم ifconfig — فهو يُخفي العناوين الثانوية، ويتجاهل جداول التوجيه الحديثة، ولا يُثبَّت أصلاً على الصور المُبسَّطة.
يعتمد الأمر ip قواعد نحو متسقة من نوع كائن-فعل: ip <كائن> <فعل>. الكائنات الأساسية هي: link (واجهات الطبقة الثانية)، وaddr (عناوين IP)، وroute (جدول التوجيه)، وneigh (ذاكرة ARP/NDP).
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/.
مثال Netplan — خادم بعنوان IP ثابت على واجهة وDHCP على أخرى:
NetworkManager عبر nmcli — الأسلوب المُفضَّل في الأتمتة:
أسماء المضيفين وتحليل DNS
يتدفق تحليل الأسماء في لينكس عبر سلسلة محلل متعددة الطبقات. فهم هذه السلسلة ضروري لتشخيص أعطال اكتشاف الخدمات في الإنتاج:
/etc/hosts— جدول ثابت، يُفحَص أولاً بشكل افتراضي. مفيد للتجاوزات المحلية وأسماء مضيفي الحاويات، لكنه كابوس صيانة على نطاق واسع.- NSS (خدمة تبديل الأسماء) — مُهيَّأة في
/etc/nsswitch.conf. يتحكم السطرhosts:في ترتيب التحليل، وعادةً يكونfiles dns myhostname. - محلل DNS — يستعلم خوادم الأسماء المُدرَجة في
/etc/resolv.conf. على الأنظمة الحديثة يُدار هذا الملف بواسطةsystemd-resolvedويكون رابطاً رمزياً إلى/run/systemd/resolve/stub-resolv.conf.
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 بها لكل واجهة.
التطبيق العملي: تشخيص عطل شبكي
حين لا يمكن الوصول إلى خدمة، تعامل مع هذا النموذج الذهني طبقةً طبقةً:
- هل الواجهة مفعَّلة؟
ip link show <if>— ابحث عنLOWER_UP. - هل لديها العنوان الصحيح؟
ip addr show <if>. - هل المسار صحيح؟
ip route get <destination>. - هل ARP/L2 يعمل؟
ip neigh show— هل MAC البوابة مُحلَّل؟ - هل DNS يُحلِّل؟
dig <hostname>— قارن معdig @8.8.8.8 <hostname>لعزل مشكلات المحلل المحلي. - هل المنفذ مفتوح؟
ss -tulnp | grep <port>على الخادم؛nc -zv <host> <port>من العميل. - هل جدار حماية يحجب؟
iptables -L -n -vأوnft list ruleset— سيتناوله درس تقوية الأمان.
ss بدلاً من netstat: netstat مُهمَل وكثيراً ما لا يُثبَّت على الصور المُبسَّطة. ss (إحصاءات المقابس) أسرع، موجود دائماً، ويُظهِر العملية المالكة عبر -p. الأعلام -tulnp تعني: TCP + UDP، الاستماع فقط، رقمي (بلا DNS)، مع العمليات. احفظ هذه المجموعة — ستشغِّلها عشرات المرات يومياً.