راهنمای عملی برای مهندسان زیرساخت در سال ۲۰۲۵
آیا هنوز هم برای گرفتن بکاپ یا اعمال یک ACL ساده، روی تکتک دستگاهها SSH میزنید؟ اگر پاسخ مثبت است، وقتش رسیده که شیوه کار خود را بهروز کنید. در دنیای شبکههای امروز که دستگاهها هر روز بزرگتر و پیچیدهتر میشوند، مدیریت دستی روترها و سوییچهای سیسکو نه تنها زمانبر است، بلکه دروازه ورود خطای انسانی (Human Error) است.
اتوماسیون شبکه دیگر یک گزینه فانتزی نیست؛ در سال ۲۰۲۵، یک ضرورت است. در این مقاله یاد میگیریم چگونه با دو ابزار قدرتمند—Python (برای شخصیسازی) و Ansible (برای مدیریت انبوه)—کانفیگ دستگاههای سیسکو خود را متحول کنید.
بخش اول: 🐍 Python، چاقوی سوئیسی مهندس شبکه
پایتون، به دلیل سادگی، خوانایی بالا و اکوسیستم کتابخانهای فوقالعادهاش (مانند Netmiko و NAPALM)، تبدیل به زبان اصلی مهندسان شبکه شده است.
۱. چرا پایتون ستاره اتوماسیون است؟
- پایین آوردن خط شروع: نیاز به دانش برنامهنویسی پیچیده ندارد.
- کتابخانههای اختصاصی: پشتیبانی عالی از Cisco IOS، NX-OS، Juniper، Mikrotik و تقریباً هر دستگاه دیگری.
- انعطافپذیری کامل: مناسب برای ساخت ابزارهای سفارشی داخلی و اسکریپتهای یکبار مصرف.
۲. سناریوی نجاتبخش: گرفتن بکاپ کانفیگ تمام سوییچها
اینجا یک سناریوی حیاتی را بررسی میکنیم: گرفتن بکاپ شبانه از کانفیگ تمام دستگاهها. با استفاده از کتابخانه Netmiko این کار از یک کابوس دستی به یک فرایند چند ثانیهای تبدیل میشود.
🔹نصب Netmiko:
pip install netmiko
(توجه: در محیط واقعی ازEnvironment File برای Password استفاده کنید!)
from netmiko import ConnectHandler
devices = [
{
"device_type": "cisco_ios",
"host": "192.168.10.1",
"username": "admin",
"password": "AdminPass123"
},
{
"device_type": "cisco_ios",
"host": "192.168.10.2",
"username": "admin",
"password": "AdminPass123"
}
]
for device in devices:
print(f"Connecting to {device['host']} and backing up...")
try:
connection = ConnectHandler(**device)
output = connection.send_command("show running-config")
filename = f"{device['host']}_backup.txt"
with open(filename, "w") as f:
f.write(output)
print(f"✅ Backup saved successfully: {filename}")
connection.disconnect()
except Exception as e:
print(f"❌ Error connecting to {device['host']}: {e}")
۳. فرماندهی کانفیگ (اعمال تغییرات انبوه)
فرض کنید باید یک سری تنظیمات امنیتی (مثل تنظیم SSH) را روی ۵۰ دستگاه اعمال کنید. به جای SSH زدن ۵۰ بار، فقط یک بار پایتون را اجرا کنید:
commands = [
"ip domain-name example.com",
"crypto key generate rsa modulus 2048",
"ip ssh version 2"
]
connection = ConnectHandler(**device)
output = connection.send_config_set(commands)
print(output)
connection.save_config() # حتماً پس از تغییرات ذخیره کنید!
connection.disconnect()
نکته کلیدی: تابع ()send_config_set به طور خودکار به حالت Global Mode میرود و دستورات را اعمال میکند. این کار ساعتها کار دستی را به چند ثانیه تبدیل میکند!
بخش دوم: ⚙️ Ansible، قهرمان اتوماسیون Agentless
Ansible ابزاری Agentless است، یعنی روی روتر یا سوییچ شما نیازی به نصب هیچ نرمافزاری نیست. این ابزار از طریق SSH وصل میشود و تنظیمات را اجرا میکند. این ویژگی، Ansible را برای پیادهسازی سریع و مدیریت هزاران دستگاه ایدهآل کرده است.
۱. ابزارهای مورد نیاز
- پایتون ۳ (Ansible به پایتون نیاز دارد).
- نصب Ansible (روی سیستم عامل لینوکس یا ویندوز/WSL).
- فعال بودن SSH روی دستگاههای سیسکو (همانطور که در مقاله قبلی تنظیم کردیم).
🔹نصب Ansible :
در سیستم عامل لینوکس بر پایه دبین (اوبونتو ، دبین ، مینت و …)
sudo apt update
sudo apt install ansible -y
۲. ساختن لیست دستگاهها (Inventory File)
Ansible نیاز دارد بداند با کدام دستگاهها کار دارد. این لیست در فایل hosts.ini ذخیره میشود:
[cisco]
192.168.10.1
192.168.10.2
[cisco:vars]
ansible_user=admin
ansible_password=AdminPass123
ansible_network_os=ios
ansible_connection=network_cli
توضیح متغیرها:
- [cisco] یک گروه دلخواه است.
- ansible_network_os=ios به Ansible میگوید که با سیسکو IOS کار دارد.
۳. اجرای ساده یک فرمان Show (Ad-hoc Command)
برای تست اتصال یا اجرای سریع یک دستور، از Ad-hoc استفاده میکنیم:
ansible cisco -m ios_command -a "commands='show version'" -k
نکته: سوییچ -k یا –ask-pass برای پرسیدن پسورد استفاده میشود.
۴. شاهکار اتوماسیون: ساخت VLAN با Playbook
Playbookها فایلهای YAML هستند که وظایف ما را تعریف میکنند. این مثال نشان میدهد که چگونه میتوانیم VLAN 50 و VLAN 60 را روی تمام سوییچهای گروه [cisco] ایجاد کنیم.
🔹 فایل Playbook: vlan_setup.yml
---
- name: Create VLANs on Cisco switches
hosts: cisco
gather_facts: no # برای شبکهها این گزینه را خاموش کنید تا سریعتر باشد
tasks:
- name: Create VLAN 50 for Users
ansible.netcommon.cli_config:
config: |
vlan 50
name Users_VLAN
exit
- name: Create VLAN 60 for Servers
ansible.netcommon.cli_config:
config: |
vlan 60
name Servers_VLAN
exit
🔹 اجرای Playbook:
ansible-playbook vlan_setup.yml -k
مقایسه نهایی: Python یا Ansible؟
| ویژگی | 🐍 Python (Netmiko) | ⚙️ Ansible (ios_config) |
| هدف اصلی | ابزار نویسی، اسکریپتهای سفارشی، جمعآوری داده خاص | مدیریت پیکربندی، همسانسازی وضعیت (State Management) |
| پیچیدگی یادگیری | متوسط (نیاز به منطق برنامهنویسی) | ساده (یادگیری ساختار YAML و ماژولها) |
| بهترین سناریو | ساخت پورتال داخلی، مانیتورینگ سفارشی، تعامل با API | اجرای یکسانسازی کانفیگ روی صدها دستگاه، Rollback |
| قابلیت Rollback | باید توسط کدنویس پیادهسازی شود. | قابلیت داخلی Check Mode و Rollback دارد. |
حکم نهایی: اگر وظیفهتان یکسانسازی و مدیریت پیکربندی در مقیاس بزرگ است، Ansible ابزار بهتری است. اگر باید ابزاری مخصوص و شخصیسازی شده برای شرکت خود بسازید، پایتون را انتخاب کنید.
🎯 جمعبندی: اتوماسیون، نه یک انتخاب، بلکه یک ضرورت!
در سال ۲۰۲۵، مدیر شبکهای که از اتوماسیون استفاده نمیکند، عملاً در حال اتلاف وقت است. یادگیری پایتون و Ansible یک سرمایهگذاری بلندمدت است که مستقیماً به کاهش خطاها، افزایش سرعت پیادهسازی و استانداردسازی امنیت شبکه منجر میشود.
بهترین سناریوهای اتوماسیون در شبکههای Cisco:
- بکاپ خودکار کانفیگها و ردیابی تغییرات (Change Tracking).
- اعمال یکپارچه تنظیمات امنیتی (Banners, SSH, AAA) روی تمام دستگاهها.
- پیادهسازی سریع VLANها، Trunking و پروتکلهای مسیریابی.
- رولاوت آپدیتهای نرمافزار (IOS Upgrade) بدون خطای انسانی.
- چک کردن سلامت دستگاهها (Validate Check) قبل و بعد از اعمال تغییرات.
آیا آمادهاید تا از پشت کیبورد دستی خداحافظی کنید و وارد دنیای مهندسی شبکه مدرن شوید؟