NETCONF، YANG، و پایتون: پیکربندی برنامه‌ای شبکه در مقیاس

REST API ها و فرمت‌های JSON/YAML که پیش‌تر در این مجموعه پوشش داده شدند یک رویکرد به اتوماسیون شبکه را نشان می‌دهند، اما NETCONF و YANG یک جایگزین ساختاریافته‌تر و مبتنی‌بر-استاندارد فراهم می‌کنند که به‌طور خاص برای پیکربندی دستگاه شبکه ساخته شده. این مقاله توضیح می‌دهد چه چیزی NETCONF را از یک REST API ساده متمایز می‌کند، اینکه مدل‌های YANG چگونه دقیقاً تعریف می‌کنند داده پیکربندی چگونه به‌نظر می‌رسد را پوشش می‌دهد، و استفاده از پایتون برای تعامل برنامه‌ای با دستگاه‌های شبکه را مرور می‌کند.

پروتکل NETCONFمدل‌های داده YANGاتوماسیون شبکه پایتون

~6 دقیقه مطالعه · آخرین به‌روزرسانی ۲۱ شهریور ۱۴۰۵

چرا NETCONF در کنار REST API ها وجود دارد

رویکرد REST API که پیش‌تر در این مجموعه درباره اصول اتوماسیون شبکه بحث شد برای بسیاری موارد استفاده خوب کار می‌کند، اما در ابتدا برای خدمات وب عمومی طراحی شد نه به‌طور خاص پیکربندی دستگاه شبکه. NETCONF (Network Configuration Protocol) از ابتدا به‌طور خاص برای پیکربندی دستگاه‌های شبکه ساخته شد، با قابلیت‌هایی که شکاف‌هایی که یک REST API عمومی ذاتاً فراهم نمی‌کند را برطرف می‌کنند.

قابلیت‌های کلیدی که NETCONF بومی فراهم می‌کند

تغییرات پیکربندی تراکنشی: NETCONF از یک
  datastore پیکربندی "candidate" پشتیبانی می‌کند،
  جداگانه از پیکربندی در حال اجرا -- تغییرات
  می‌توانند ساخته، تأیید، و فقط به‌عنوان یک
  تراکنش اتمی واحد وقتی درست تأیید شدند
  اعمال شوند، به‌جای اعمال فوری و جداگانه تغییرات

قابلیت rollback داخلی: NETCONF از توانایی
  بازگشت خودکار به یک پیکربندی قبلی اگر یک
  تغییر صراحتاً در یک بازه زمانی مشخص تأیید نشود
  پشتیبانی می‌کند، که در برابر یک تغییر
  پیکربندی که به‌طور غیرمنتظره اتصال خود دستگاه
  را می‌شکند محافظت می‌کند

اعتبارسنجی داده ساختاریافته: داده پیکربندی
  در برابر یک اسکیمای رسمی (YANG، که در ادامه
  بحث می‌شود) پیش از اعمال‌شدن تأیید می‌شود،
  و بسیاری خطاهای پیکربندی را پیش از رسیدن
  اصلاً به دستگاه می‌گیرد

این قابلیت‌ها مستقیماً ریسک‌های عملیاتی واقعی‌ای را برطرف می‌کنند که تغییرات پیکربندی مبتنی‌بر-REST ساده ذاتاً از آن‌ها محافظت نمی‌کنند — قابلیت rollback به‌ویژه یک مسئله کلاسیک و دردناک را حل می‌کند: یک تغییر پیکربندی فرستاده‌شده از راه دور که دقیقاً همان اتصال مدیریتی مورد نیاز برای رفعش را می‌شکند.

YANG: زبان مدل‌سازی داده زیربنای NETCONF

YANG (Yet Another Next Generation) یک زبان مدل‌سازی داده است که دقیقاً تعریف می‌کند یک قطعه از داده پیکربندی یا عملیاتی چگونه به‌نظر می‌رسد — ساختار، مقادیر معتبر، و محدودیت‌هایش — و اسکیمایی که NETCONF برای تأیید داده استفاده می‌کند را فراهم می‌کند.

مثال مدل YANG ساده‌شده، که ساختار پیکربندی
یک اینترفیس را تعریف می‌کند:

container interface {
  leaf name {
    type string;
  }
  leaf enabled {
    type boolean;
    default true;
  }
  leaf mtu {
    type uint16 {
      range "68..9216";
    }
  }
}

-- این مدل YANG تعریف می‌کند یک اینترفیس یک
-- نام دارد (متن)، یک وضعیت فعال (درست/نادرست،
-- پیش‌فرض درست)، و یک مقدار MTU که باید درون
-- یک بازه معتبر خاص بیفتد -- یک تلاش برای
-- تنظیم MTU به 100000 فوراً به‌عنوان نامعتبر
-- طبق این اسکیما رد می‌شد، پیش از رسیدن
-- اصلاً به پیکربندی واقعی دستگاه

این تعریف اسکیمای رسمی چیزی است که به ابزارها اجازه می‌دهد داده پیکربندی را به‌طور خودکار تأیید کنند و پیام‌های خطای معنادار و خاصی وقتی چیزی اشتباه باشد فراهم کنند — بهبودی قابل‌توجه نسبت به کشف یک اشتباه پیکربندی فقط پس از اینکه یک دستگاه یک دستور بدفرم را با یک خطای عمومی رد می‌کند.

یک تبادل پیکربندی NETCONF

RPC (Remote Procedure Call) ساده‌شده NETCONF
که یک تغییر پیکربندی اینترفیس را درخواست می‌کند:

<rpc>
  <edit-config>
    <target><candidate/></target>
    <config>
      <interface>
        <name>GigabitEthernet0/1</name>
        <description>Uplink to Core</description>
        <enabled>true</enabled>
      </interface>
    </config>
  </edit-config>
</rpc>

-- NETCONF از XML به‌جای JSON که معمولاً در
-- REST API ها استفاده می‌شود، که پیش‌تر در
-- این مجموعه بحث شد، استفاده می‌کند، هرچند
-- مدل داده YANG زیربنایی همچنین می‌تواند در
-- JSON نمایش داده شود وقتی از پروتکل مرتبط
-- RESTCONF استفاده می‌شود، که مفاهیم
-- NETCONF/YANG را روی یک رابط سبک-REST
-- آشناتر اعمال می‌کند

استفاده از پایتون برای تعامل با دستگاه‌های شبکه

پایتون به زبان برنامه‌نویسی غالب برای اتوماسیون شبکه تبدیل شده، هم برای تعامل مستقیم NETCONF و هم برای کار با REST API هایی که پیش‌تر در این مجموعه بحث شد، عمدتاً به‌دلیل کتابخانه‌های بالغی که جزئیات پروتکل زیربنایی را مدیریت می‌کنند.

مثال پایتون ساده‌شده با استفاده از کتابخانه
ncclient برای NETCONF:

from ncclient import manager

with manager.connect(host='192.168.1.1', port=830,
                      username='admin', password='cisco',
                      hostkey_verify=False) as m:
    config = m.get_config(source='running')
    print(config)

-- این به یک دستگاه از طریق NETCONF متصل می‌شود
-- و کل پیکربندی در حال اجرایش را به‌عنوان
-- داده ساختاریافته بازیابی می‌کند، که سپس می‌تواند
-- به‌طور برنامه‌ای تجزیه، تغییر، و تأیید شود،
-- به‌جای تجزیه دستی خروجی متن خام CLI به شیوه‌ای
-- که یک اسکریپت اتوماسیون sản‌کردن-صفحه سنتی
-- نیاز داشت

مثال پایتون ساده‌شده با استفاده از کتابخانه
requests برای یک فراخوانی REST API، که مفاهیم
پوشش‌داده‌شده پیش‌تر در این مجموعه درباره اصول
اتوماسیون را به کد واقعی کاری متصل می‌کند:

import requests

response = requests.get(
    'https://192.168.1.1/restconf/data/interfaces',
    auth=('admin', 'cisco'),
    verify=False
)
print(response.json())

چرا داده ساختاریافته بر Screen-Scraping غالب است

رویکرد اتوماسیون قدیمی‌تر (screen-scraping):
فرستادن یک دستور CLI معمولی مانند "show
interfaces"، سپس نوشتن کد تجزیه-متن شکننده
برای استخراج مقادیر خاص از خروجی قابل‌فهم-
برای-انسان -- این هروقت یک به‌روزرسانی
نرم‌افزار فاصله‌گذاری، عبارت‌بندی، یا فرمت
خروجی را حتی کمی تغییر دهد می‌شکند

رویکرد مدرن (NETCONF/RESTCONF):
دریافت مستقیم داده از‌قبل-ساختاریافته (XML یا
JSON)، با مقادیر در فیلدهای به‌روشنی-برچسب‌گذاری‌شده
-- مصون در برابر تغییرات فرمت‌بندی، چون
ساختار داده خودش، نه چیدمان بصری، چیزی است
که کد اتوماسیون به آن متکی است

این تمایز صرفاً موضوع راحتی نیست — اتوماسیون screen-scraping به‌طرز بدنامی در محیط‌های تولیدی شکننده است، چون حتی یک تغییر کوچک آرایشی در فرمت‌بندی خروجی CLI در یک به‌روزرسانی نرم‌افزار می‌تواند بی‌سروصدا اسکریپت‌های اتوماسیونی که ماه‌ها به‌درستی کار می‌کردند را بشکند، حالت شکستی که فرمت‌های داده ساختاریافته به‌طور خاص برای حذف آن طراحی شده‌اند.

چرا این سطح از پیچیدگی اتوماسیون اهمیت دارد

حرکت از اتوماسیون پایه REST/JSON، پوشش‌داده‌شده پیش‌تر در این مجموعه، به‌سمت NETCONF/YANG نشان‌دهنده بلوغ در اینکه پیکربندی شبکه چقدر جدی به‌عنوان یک مسئله مهندسی نرم‌افزار رفتار می‌شود است — با تأیید داده رسمی، ایمنی تراکنشی، و قابلیت‌های rollback خودکار که بهترین شیوه‌ها از استقرار نرم‌افزار به‌طور گسترده‌تر را منعکس می‌کند. درک هر دو رویکرد، و به‌طور خاص چرا ساختار و مکانیزم‌های ایمنی اضافی NETCONF برای تغییرات شبکه تولیدی در مقیاس اهمیت دارند، دانش ضروری‌ای برای هرکسی است که اتوماسیون را برای شبکه‌هایی که یک تغییر پیکربندی شکست‌خورده ریسک عملیاتی واقعی دارد طراحی می‌کند.

نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

عیب‌یابی سیستماتیک شبکه: یک روش‌شناسی که همه‌چیز را به هم پیوند می‌دهد

هر پروتکل و فناوری‌ای که در سراسر این مجموعه پوشش داده شد فقط زمانی مفید است که یک مسئله شامل آن واقعاً بتواند تحت فشار دنیای واقعی به‌طور کارآمد تشخیص و رفع شود. این مقاله یک روش‌شناسی عیب‌یابی سیستماتیک ساخته‌شده حول لایه‌های OSI ارائه می‌دهد، اعمالش روی یک مسئله اتصال واقع‌بینانه را مرور می‌کند، و نشان می‌دهد دستورات تأیید خاصی که در سراسر این کل مجموعه پوشش داده شدند چگونه در یک فرآیند تشخیصی ساختاریافته جا می‌گیرند.

ادامه

اصول IPsec VPN: امن‌سازی ترافیک در سراسر شبکه‌های نامورد‌اعتماد

اتصال دو سایت در سراسر اینترنت عمومی ترافیک را در معرض رهگیری قرار می‌دهد مگر اینکه به‌درستی رمزگذاری شود، و IPsec چارچوب استانداردی برای ساخت تونل‌های امن و احراز‌هویت‌شده بین سایت‌ها فراهم می‌کند. این مقاله فرآیند مذاکره دومرحله‌ای IKE را توضیح می‌دهد، تمایز بین پروتکل‌های AH و ESP را پوشش می‌دهد، پیکربندی یک VPN سایت-به-سایت پایه IPsec را مرور می‌کند، و دستورات تأیید ضروری را پوشش می‌دهد.

ادامه

اصول MPLS: توضیح سوئیچینگ برچسب

مسیریابی IP سنتی نیازمند این است که هر روتر در طول یک مسیر یک جستجوی کامل جدول مسیریابی روی هر بسته انجام دهد، اما MPLS رویکردی اساساً متفاوت را با گرفتن آن تصمیم فوروارد‌کردن یک‌بار و متصل‌کردن یک برچسب ساده که هر روتر بعدی می‌تواند به‌جای آن استفاده کند اتخاذ می‌کند. این مقاله مفهوم اصلی سوئیچینگ-برچسب را توضیح می‌دهد، اینکه پروتکل توزیع برچسب چگونه جداول فوروارد‌کردن برچسبی که این را ممکن می‌کنند می‌سازد را مرور می‌کند، و بهره‌های عملی‌ای که MPLS در شبکه‌های ارائه‌دهنده واقعی فراهم می‌کند را پوشش می‌دهد.

ادامه

Route Reflector و Confederation های BGP: مقیاس‌دهی iBGP فراتر از Full Mesh

نیازمندی full-mesh iBGP، که به‌طور مختصر پیش‌تر در این مجموعه ذکر شد، با رشد یک سیستم خودمختار به یک مسئله جدی مقیاس‌دهی تبدیل می‌شود، که نیازمند تعدادی جلسه است که به‌طور درجه‌دوم با تعداد روتر افزایش می‌یابد. این مقاله دقیقاً توضیح می‌دهد چرا full mesh مقیاس‌پذیر نیست، اینکه route reflector ها چگونه این را با شل‌کردن قوانین معمول انتشار-مسیر BGP حل می‌کنند مرور می‌کند، و confederation ها را به‌عنوان یک رویکرد جایگزین که یک AS واحد را به سیستم‌های خودمختار زیرمجموعه کوچک‌تر تقسیم می‌کند پوشش می‌دهد.

ادامه

بررسی عمیق انواع ناحیه OSPF: Stub، Totally Stubby، و NSSA

طراحی OSPF چندناحیه‌ای پایه، که پیش‌تر در این مجموعه پوشش داده شد، از قبل اندازه پایگاه‌داده را با نگه‌داشتن LSA های جزئی نوع ۱ و ۲ محلی به ناحیه خودشان کاهش می‌دهد، اما انواع ناحیه تخصصی OSPF فراتر می‌روند، و به‌طور خاص LSA های خارجی نوع ۵ را هدف قرار می‌دهند. این مقاله انواع LSA که باید برای ساخت هر نوع ناحیه تخصصی سرکوب شوند را توضیح می‌دهد، پیکربندی نواحی stub، totally stubby، و not-so-stubby را مرور می‌کند، و مبادلات خاصی که هر انتخاب طراحی شامل می‌شود را پوشش می‌دهد.

ادامه

دستکاری مسیر BGP: Route Map ها و Community ها برای مهندسی ترافیک

الگوریتم انتخاب بهترین-مسیر پایه BGP، که پیش‌تر در این مجموعه پوشش داده شد، از یک توالی ثابت از ویژگی‌ها پیروی می‌کند، اما شبکه‌های واقعی نیاز دارند به‌طور فعال روی اینکه کدام مسیر انتخاب می‌شود تأثیر بگذارند به‌جای پذیرش منفعلانه نتیجه پیش‌فرض. این مقاله توضیح می‌دهد route map ها چگونه اطلاعات مسیریابی BGP را فیلتر و تغییر می‌دهند، Local Preference و MED را به‌عنوان دو اهرم اصلی برای تأثیرگذاری روی انتخاب مسیر پوشش می‌دهد، و community های BGP را به‌عنوان یک مکانیزم تگ‌گذاری انعطاف‌پذیر برای هماهنگی سیاست در سراسر کل شبکه معرفی می‌کند.

ادامه