معماری قدیمی و جدید تنظیم کارت شبکه در لینوکس؛ از Network Scripts تا NetworkManager

مقدمه

اگر سال‌ها با سرورهای لینوکسی کار کرده باشید، احتمالاً با فایل‌هایی مانند ifcfg-eth0 و دستورهایی مثل ifup و ifdown سروکار داشته‌اید. این روش سال‌ها یکی از روش‌های استاندارد مدیریت شبکه در توزیع‌هایی مانند CentOS بود.

اما با ورود نسل جدید توزیع‌های لینوکسی مانند AlmaLinux، Rocky Linux و نسخه‌های جدید RHEL، معماری مدیریت شبکه تغییر کرده است. امروزه NetworkManager به روش اصلی مدیریت شبکه تبدیل شده و درک تفاوت آن با معماری قدیمی برای مدیران سرور، به‌خصوص در محیط‌های هاستینگ و مجازی‌سازی، اهمیت زیادی دارد.

در این مقاله تفاوت این دو معماری را بررسی می‌کنیم و می‌بینیم چرا در سیستم‌های جدید بهتر است مدیریت شبکه را بر پایه NetworkManager انجام دهیم.


معماری قدیمی شبکه در لینوکس چگونه بود؟

در سیستم‌هایی مانند CentOS 6 و CentOS 7، تنظیمات شبکه معمولاً بر پایه مجموعه‌ای از فایل‌های configuration و سرویس network انجام می‌شد.

مهم‌ترین فایل‌ها معمولاً در مسیر زیر قرار داشتند:

/etc/sysconfig/network-scripts/

برای مثال:

/etc/sysconfig/network-scripts/ifcfg-eth0

این فایل مشخص می‌کرد کارت شبکه چگونه باید پیکربندی شود.

یک نمونه تنظیمات قدیمی برای یک IP استاتیک می‌توانست چنین ساختاری داشته باشد:

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none

IPADDR=192.0.2.10
PREFIX=24
GATEWAY=192.0.2.1

DNS1=8.8.8.8
DNS2=1.1.1.1

در این معماری، مسیر کلی تقریباً به شکل زیر بود:

ifcfg-eth0
     │
     ▼
network service
     │
     ▼
Linux Kernel
     │
     ▼
Network Interface

برای اعمال تغییرات نیز معمولاً از دستورهایی مانند زیر استفاده می‌شد:

systemctl restart network

یا:

ifdown eth0
ifup eth0

این روش ساده و قابل فهم بود و سال‌ها در سرورهای لینوکسی مورد استفاده قرار گرفت.


NetworkManager چیست؟

NetworkManager یک سرویس مدیریت شبکه در لینوکس است که وظیفه مدیریت Connectionهای شبکه و اعمال تنظیمات مربوط به آنها را بر عهده دارد.

در توزیع‌های جدید لینوکس، NetworkManager به بخش اصلی معماری شبکه تبدیل شده است.

برای مثال در AlmaLinux 9 معمولاً ساختار کلی به این شکل است:

                 NetworkManager
                       │
        ┌──────────────┼──────────────┐
        ▼              ▼              ▼
     Ethernet         VLAN          Bridge
        │
        ▼
   Network Interface
        │
        ▼
   Linux Kernel

NetworkManager فقط برای تنظیم IP نیست؛ بلکه می‌تواند مواردی مانند موارد زیر را نیز مدیریت کند:

  • Ethernet
  • DHCP
  • Static IP
  • Routing
  • VLAN
  • Bonding
  • Bridge
  • VPN
  • DNS
  • چندین Connection Profile

به همین دلیل NetworkManager را نباید صرفاً یک جایگزین ساده برای سرویس network دانست؛ بلکه یک معماری کامل‌تر برای مدیریت شبکه است.


تفاوت Network Interface و Connection Profile

یکی از نکات مهم در معماری جدید، تفاوت میان Network Interface و Connection Profile است.

برای مثال ممکن است یک کارت شبکه با نام:

ens18

داشته باشیم.

این همان Network Interface است.

اما NetworkManager تنظیمات آن را در قالب یک Connection Profile مدیریت می‌کند.

برای مشاهده Connectionها می‌توان از دستور زیر استفاده کرد:

nmcli connection show

و برای مشاهده وضعیت کارت‌های شبکه:

nmcli device status

بنابراین در معماری جدید باید این دو مفهوم را از هم جدا کنیم:

Connection Profile
       │
       ▼
 Network Interface
       │
       ▼
   Network Card

این تفاوت در محیط‌هایی که دارای Bridge، VLAN، Bond یا چندین کارت شبکه هستند اهمیت بیشتری پیدا می‌کند.


فایل‌های ifcfg چه شدند؟

یکی از مهم‌ترین تغییرات در نسل جدید لینوکس، تغییر روش ذخیره Connection Profileها است.

در معماری قدیمی، مدیر سیستم معمولاً با فایل‌هایی مانند:

/etc/sysconfig/network-scripts/ifcfg-eth0

کار می‌کرد.

اما در معماری جدید NetworkManager، Connection Profileها معمولاً در مسیر زیر قرار می‌گیرند:

/etc/NetworkManager/system-connections/

برای مثال:

/etc/NetworkManager/system-connections/ens18.nmconnection

بنابراین در سیستم‌های جدید، فایل‌های ifcfg-* دیگر مرکز اصلی معماری شبکه نیستند.

نکته مهم این است که وجود یک فایل ifcfg-* در یک سیستم جدید لزوماً به این معنی نیست که سیستم از معماری قدیمی استفاده می‌کند. NetworkManager در برخی نسخه‌ها و محیط‌ها می‌تواند با فرمت‌های قدیمی نیز تعامل داشته باشد.

بنابراین باید سرویس مدیریت شبکه را ملاک قرار داد، نه صرفاً نام فایل‌های موجود در سیستم.


روش جدید تنظیم IP در لینوکس

در سیستم‌های مبتنی بر NetworkManager، روش استاندارد مدیریت شبکه استفاده از nmcli است.

برای مشاهده Connectionها:

nmcli connection show

برای مشاهده وضعیت Interfaceها:

nmcli device status

برای مثال، فرض کنید کارت شبکه ens18 باشد و بخواهیم یک IP استاتیک برای آن تعریف کنیم:

nmcli connection modify ens18 \
ipv4.method manual \
ipv4.addresses 192.0.2.10/24 \
ipv4.gateway 192.0.2.1 \
ipv4.dns "8.8.8.8 1.1.1.1"

سپس Connection را فعال می‌کنیم:

nmcli connection up ens18

و وضعیت را بررسی می‌کنیم:

ip addr
ip route
nmcli device status

چرا معماری جدید اهمیت بیشتری دارد؟

ممکن است در نگاه اول تصور کنیم NetworkManager فقط یک روش جدید برای نوشتن IP و Gateway است؛ اما تفاوت واقعی بسیار بیشتر از این است.

در یک سرور مدرن ممکن است چنین ساختاری داشته باشیم:

Physical NIC
      │
      ▼
     Bond
      │
      ▼
    Bridge
      │
 ┌────┼────┐
 ▼    ▼    ▼
VM1  VM2  VM3

یا:

Physical NIC
      │
      ▼
    VLAN
      │
      ├── Management
      ├── Storage
      └── Public Network

مدیریت چنین ساختاری با معماری‌های قدیمی پیچیده‌تر بود، در حالی که NetworkManager برای مدیریت Connectionهای مختلف طراحی شده است.


NetworkManager در سرورهای مجازی‌سازی

این موضوع برای مدیران سرورهایی که از KVM، Virtualizor یا SolusVM استفاده می‌کنند اهمیت ویژه‌ای دارد.

فرض کنیم یک سرور فیزیکی داریم:

              Physical Server
                     │
                  NIC eth0
                     │
                     ▼
                  Bridge
                     │
          ┌──────────┼──────────┐
          ▼          ▼          ▼
         VPS1       VPS2       VPS3

در این ساختار، کارت شبکه فیزیکی، Bridge و ماشین‌های مجازی باید به شکل صحیح با یکدیگر ارتباط داشته باشند.

NetworkManager می‌تواند Connectionهای مربوط به این اجزا را مدیریت کند.

به همین دلیل در سرورهای جدید، بهتر است مدیر سیستم قبل از ایجاد تغییرات شبکه، معماری واقعی Interfaceها و Connectionها را بررسی کند.

دستورهای مهم عبارت‌اند از:

nmcli device status
nmcli connection show
ip addr
ip route
ss -lntup

این دستورات در کنار یکدیگر تصویر مناسبی از وضعیت شبکه سرور ارائه می‌کنند.


آیا باید NetworkManager را در AlmaLinux غیرفعال کنیم؟

یکی از عادت‌هایی که از دوران CentOS 6 و CentOS 7 باقی مانده، غیرفعال کردن NetworkManager است.

در سیستم‌های جدید، این کار معمولاً رویکرد مناسبی نیست.

اگر سرور شما AlmaLinux 9 یا AlmaLinux 10 است، بهتر است معماری شبکه را بر اساس NetworkManager طراحی و مدیریت کنید.

ابتدا وضعیت سرویس را بررسی کنید:

systemctl status NetworkManager

سپس Connectionها را مشاهده کنید:

nmcli connection show

و وضعیت Interfaceها را بررسی کنید:

nmcli device status

در چنین محیطی بهتر است به جای تلاش برای بازگرداندن معماری قدیمی، روش جدید را به‌درستی یاد بگیریم.


مزایای NetworkManager

NetworkManager چند مزیت مهم نسبت به روش سنتی دارد.

۱. مدیریت یکپارچه

تنظیمات شبکه از طریق یک سیستم مدیریتی واحد کنترل می‌شوند.

۲. پشتیبانی بهتر از ساختارهای پیچیده

مواردی مانند:

  • Bonding
  • Bridge
  • VLAN
  • VPN
  • Routing
  • چند کارت شبکه

به شکل یکپارچه‌تری مدیریت می‌شوند.

۳. مدیریت Dynamic

NetworkManager می‌تواند تغییرات شبکه را بدون وابستگی به روش‌های قدیمی مدیریت کند.

۴. مناسب‌تر برای سیستم‌های مدرن

AlmaLinux، Rocky Linux و نسخه‌های جدید RHEL بر اساس معماری مدرن NetworkManager طراحی شده‌اند.


مقایسه معماری قدیمی و جدید

ویژگیمعماری قدیمیمعماری جدید
نمونه سیستمCentOS 6/7AlmaLinux 8/9/10
سرویس اصلیnetworkNetworkManager
ابزار اصلیifup/ifdownnmcli
فایل‌های رایجifcfg-*.nmconnection
مسیر قدیمیnetwork-scripts
مسیر Connectionهاsystem-connections
Static IPifcfg-*Connection Profile
DHCPnetwork scriptsNetworkManager
VLANسنتییکپارچه
Bridgeسنتییکپارچه
Bondingسنتییکپارچه
VPNمحدودتریکپارچه‌تر
مناسب برای معماری‌های جدیدکمتربیشتر

نکته مهم برای مدیران سرور

مهم‌ترین نکته این است که NetworkManager را فقط به عنوان یک دستور جدید برای تنظیم IP در نظر نگیریم.

تغییر اصلی، تغییر معماری است.

در روش قدیمی، ذهنیت مدیر سرور بیشتر این بود:

ifcfg-eth0
     ↓
network service
     ↓
eth0

اما در معماری جدید بهتر است چنین دیدگاهی داشته باشیم:

NetworkManager
      │
      ├── Connection Profile
      │       │
      │       └── Ethernet
      │
      ├── Connection Profile
      │       │
      │       └── Bridge
      │
      ├── Connection Profile
      │       │
      │       └── VLAN
      │
      └── Connection Profile
              │
              └── Bond

این مدل ذهنی، هنگام عیب‌یابی مشکلات شبکه بسیار کمک‌کننده است.


برای سرورهای هاستینگ کدام روش بهتر است؟

اگر در حال مدیریت یک زیرساخت هاستینگ هستید و سرورهای شما بر پایه AlmaLinux 9 یا 10 هستند، توصیه منطقی این است که معماری شبکه را بر اساس NetworkManager طراحی کنید.

به‌خصوص اگر سرور دارای موارد زیر باشد:

  • چند کارت شبکه
  • IPهای متعدد
  • VLAN
  • Bridge
  • KVM
  • Virtualizor
  • SolusVM
  • شبکه Management
  • شبکه Storage
  • شبکه Public

در این شرایط، برگشتن به روش‌های قدیمی معمولاً مشکل را ساده‌تر نمی‌کند و حتی می‌تواند باعث ایجاد ناسازگاری میان ابزارهای مختلف مدیریت شبکه شود.


جمع‌بندی

مدیریت شبکه در لینوکس از معماری سنتی network-scripts به سمت معماری مبتنی بر NetworkManager حرکت کرده است.

در سیستم‌های قدیمی مانند CentOS 7، فایل‌هایی مانند:

ifcfg-eth0

و سرویس:

network

بخش اصلی مدیریت شبکه بودند.

در سیستم‌های جدید مانند AlmaLinux 9 و AlmaLinux 10، NetworkManager و Connection Profileها نقش اصلی را دارند و ابزارهایی مانند:

nmcli
ip

برای مدیریت و عیب‌یابی شبکه اهمیت بیشتری پیدا کرده‌اند.

بنابراین اگر از CentOS 7 به AlmaLinux 9 یا 10 مهاجرت کرده‌اید، بهتر است فقط فایل‌های تنظیمات را تغییر ندهید؛ بلکه مدل ذهنی خود درباره مدیریت شبکه را نیز از network-scripts به NetworkManager تغییر دهید.

این تغییر به‌خصوص در سرورهای هاستینگ و مجازی‌سازی که از Bridge، VLAN، Bonding و ماشین‌های مجازی استفاده می‌کنند، اهمیت بسیار زیادی دارد.