Geleneksel ağ yönetiminde switch ve router gibi cihazlara tek tek SSH ile bağlanarak konfigürasyon yapmak oldukça zaman alıcı ve hata yapmaya açık bir süreçtir. Özellikle yüzlerce hatta binlerce cihazdan oluşan kurumsal ağlarda manuel yönetim hem operasyonel maliyetleri artırır hem de yönetilebilirliği zorlaştırır.
Bu noktada Network Automation kavramı devreye girer. Ağ otomasyonu sayesinde ağ cihazları programatik olarak yönetilebilir, konfigürasyonlar merkezi olarak uygulanabilir ve operasyonel süreçler büyük ölçüde hızlandırılabilir.
Python programlama dili, güçlü kütüphaneleri sayesinde ağ otomasyonunda en yaygın kullanılan araçlardan biridir. Özellikle Netmiko ve NAPALM kütüphaneleri Cisco cihazları ile otomasyon sağlamak için oldukça popülerdir.
Bu makalede aşağıdaki konular detaylı şekilde ele alınacaktır:
- Network Automation kavramı
- Python ile ağ otomasyonu
- Netmiko kullanımı
- NAPALM kullanımı
- Cisco cihazlarda otomatik konfigürasyon
- Otomasyon mimarisi
- Gerçek kullanım senaryoları
Network Automation Nedir?
Network Automation, ağ cihazlarının yönetiminin manuel işlemler yerine yazılım araçları ile otomatik hale getirilmesidir.
Bu yaklaşım sayesinde:
- İnsan hatası azalır
- Konfigürasyonlar standart hale gelir
- Ağ yönetimi hızlanır
- Büyük ölçekli ağlar kolay yönetilir
Python ile Network Automation
Python ağ otomasyonu için en popüler dildir çünkü:
- öğrenmesi kolaydır
- güçlü kütüphanelere sahiptir
- geniş bir topluluğu vardır
Network Automation için en çok kullanılan Python kütüphaneleri:
|
Kütüphane |
Temel Amaç (Ne Yapar?) |
Öne Çıkan Özelliği |
|
Netmiko |
SSH üzerinden cihaz yönetimi |
Çok fazla cihaz desteği (Multi-vendor) ve kolay CLI komut gönderimi. |
|
NAPALM |
Çoklu vendor otomasyonu |
Farklı marka cihazlardan (Cisco, Juniper, Arista) aynı komutla veri çekme (Getters). |
|
Paramiko |
Düşük seviye SSH bağlantısı |
Netmiko'nun temelidir; SSHv2 protokolü üzerinde tam kontrol sağlar. |
|
Nornir |
Otomasyon Framework |
Python ile yazılmış, hızlı, envanter yönetimi olan ve paralel işlem yapabilen framework. |
|
PyATS |
Test Otomasyonu |
Cisco tarafından geliştirilen, ağın durumunu doğrulamak ve test etmek için kullanılan devasa kütüphane. |
|
Scapy |
Paket Analizi |
Ağ paketlerini oluşturma, yakalama ve manipüle etme (Low-level packet manipulation). |
|
Ansible |
Konfigürasyon Yönetimi |
(Python tabanlı) Agentless, YAML dosyaları ile deklaratif konfigürasyon sağlar. |
Netmiko Nedir?
Netmiko, Python tabanlı bir SSH otomasyon kütüphanesidir. Cisco, Juniper, Arista gibi birçok vendor cihazı destekler.
Netmiko sayesinde:
- SSH bağlantısı kurabilir
- komut çalıştırabilir
- konfigürasyon gönderebilir
- çıktı alabiliriz
Netmiko; farklı üreticilere ait cihazlarla kurulacak SSH oturumlarını, prompt geçişlerini ve veri akışını otomatik olarak yöneterek bağlantı karmaşıklığını ortadan kaldırır. Ancak yapılandırma aşamasında, cihazın kendi işletim sistemine (IOS, Junos vb.) özgü komut diziminin (syntax) kullanıcı tarafından tanımlanması gerekir.
Netmiko Kurulumu
Kuruluma geçmeden önce Windows ya da linux Python kurulu olması gerekmektedir. Windows için Anaconda yazılımı doğrudan indirip kurabilir veya Python for Windows olarak indirip kurabilirsiniz.
Kütüphane Kurulumları :
pip install netmiko
Netmiko ile Cisco Switch'e Bağlanma
from netmiko import ConnectHandler
device = {
"device_type": "cisco_ios",
"host": "192.168.1.10",
"username": "admin",
"password": "Cisco123"
}
connection = ConnectHandler(**device)
output = connection.send_command("show ip interface brief")
print(output)
Script çalıştırıldığında Python otomatik olarak switch'e bağlanır ve komutu çalıştırır.
Birden Fazla Switch Yönetimi
Gerçek ağlarda genellikle birden fazla cihaz bulunur.
Python listesi kullanarak birden fazla cihaz yönetilebilir:
from netmiko import ConnectHandler
devices = [
{"device_type":"cisco_ios","host":"192.168.1.10","username":"admin","password":"Cisco123"},
{"device_type":"cisco_ios","host":"192.168.1.11","username":"admin","password":"Cisco123"},
{"device_type":"cisco_ios","host":"192.168.1.12","username":"admin","password":"Cisco123"}
]
for device in devices:
connection = ConnectHandler(**device)
output = connection.send_command("show version")
print(output)
Bu script aynı anda birden fazla switch'ten bilgi alabilir.
Otomatik VLAN Oluşturma
Python ile birden fazla switch'te VLAN oluşturulabilir:
from netmiko import ConnectHandler
# Cihaz listesi (Gerçek senaryoda bu bir Excel veya TXT dosyasından okunur)
switches = [
{'device_type': 'cisco_ios', 'ip': '10.50.1.1', 'username': 'admin', 'password': 'şifre'},
{'device_type': 'cisco_ios', 'ip': '10.50.1.2', 'username': 'admin', 'password': 'şifre'},
]
vlan_commands = [
'vlan 100',
'name MISAFIR_AGI',
'state active'
]
for device in switches:
print(f"Connecting to {device['ip']}...")
try:
net_connect = ConnectHandler(**device)
output = net_connect.send_config_set(vlan_commands)
print(f"Success on {device['ip']}:\n{output}")
net_connect.save_config() # write memory yaparak ayarları kaydeder.
net_connect.disconnect()
except Exception as e:
print(f"Error on {device['ip']}: {e}")
NAPALM Nedir?
NAPALM (Network Automation and Programmability Abstraction Layer with Multivendor support), çoklu vendor desteği sağlayan bir network automation kütüphanesidir.
NAPALM sayesinde:
- Cisco
- Juniper
- Arista
- NX-OS
gibi farklı cihazlar tek bir API ile yönetilebilir.
NAPALM Kurulumu
pip install napalm
Cisco driver kurulumu:
pip install napalm-ios
NAPALM ile Switch Bilgisi Alma
from napalm import get_network_driver
driver = get_network_driver("ios")
device = driver("192.168.1.10","admin","Cisco123")
device.open()
facts = device.get_facts()
print(facts)
device.close()
Çıktı:
hostname
model
serial number
uptime
os version
NAPALM ile Konfigürasyon Yönetimi
NAPALM konfigürasyonları candidate configuration yöntemi ile yönetir.
Örnek:
device.load_merge_candidate(config="vlan 100")
device.commit_config()
Bu yöntem sayesinde:
- konfigürasyon doğrulanır
- hatalı config uygulanmaz
- rollback yapılabilir
Gerçek Hayat Senaryosu
Bir network mühendisi 200 switch'e aynı VLAN'ı eklemek istiyor.
Manuel yöntem:
200 cihaz
200 SSH
200 config
Otomasyon yöntemi:
1 Python script
200 cihaz
10 saniye
Network Automation Avantajları
Network automation kullanmanın birçok avantajı vardır
|
Avantaj |
Açıklama |
Operasyonel Etki |
|
Hız |
Konfigürasyonlar ve güncellemeler tüm cihazlara saniyeler içinde uygulanır. |
Manuel işlem sürelerini %90'a varan oranda azaltır. |
|
Standartlaştırma |
Tüm ağ cihazları önceden belirlenmiş şablonlara göre aynı konfigürasyonu alır. |
Ağda "konfigürasyon kirliliği" (config drift) oluşmasını engeller. |
|
Hata Azaltma |
Tekrarlayan görevlerde yorgunluk veya dikkatsizlik kaynaklı insan hatası minimize edilir. |
Yanlış komut yazımı nedeniyle oluşan kesinti riskini (downtime) düşürür. |
|
Ölçeklenebilirlik |
10 cihazı yönetmekle 1000 cihazı yönetmek arasında efor farkı kalmaz. |
Büyük ve karmaşık ağların yönetimini sürdürülebilir kılar. |
|
Görünürlük |
Cihaz durumları ve loglar otomatik olarak toplanıp raporlanabilir. |
Envanter takibi ve sorun giderme süreçlerini hızlandırır. |
Python tabanlı otomasyon araçları, modern ağ yönetiminin vazgeçilmez bir parçası haline gelmiştir. Netmiko ve NAPALM gibi kütüphaneler sayesinde ağ cihazlarının yönetimi kolaylaşmakta, konfigürasyon süreçleri hızlanmakta ve operasyonel hatalar önemli ölçüde azaltılmaktadır.
Network automation teknolojileri, özellikle büyük ölçekli kurumsal ağlarda verimliliği artıran ve yönetim süreçlerini modernleştiren önemli bir yaklaşım olarak öne çıkmaktadır.
"Check-and-Confirm" Mantığı
Otomasyonun en büyük riski yanlış komutu tüm ağa basmaktır. Profesyonel bir script'te her zaman şu adımlar olmalı:
- Connectivity Check: Ping atarak cihazın ayakta olduğunu doğrula.
- Pre-Check: Komutu göndermeden önce mevcut durumu kontrol et.
- Execution: Komutu gönder.
- Post-Check: Değişikliğin uygulandığını teyit et.
Örnek Bir Scprit : Kullanıcı oluşturcak , vlan ekleyip kontrol edip save yapıp çıkacak.
from netmiko import ConnectHandler
from napalm import get_network_driver
# cihaz bilgileri
device = {
"device_type": "cisco_ios",
"host": "192.168.1.10",
"username": "admin",
"password": "Cisco123",
}
print("SSH ile switch'e bağlanılıyor...")
connection = ConnectHandler(**device)
# gönderilecek konfigürasyon
config_commands = [
"username enable_akedemi privilege 15 secret Enable2026!",
"vlan 10",
"name SERVER",
"vlan 20",
"name OGRENCI"
]
print("Konfigürasyon uygulanıyor...")
output = connection.send_config_set(config_commands)
print(output)
print("Konfigürasyon kaydediliyor...")
connection.save_config()
connection.disconnect()
print("Netmiko işlemleri tamamlandı")
# -----------------------------------
# NAPALM doğrulama kısmı
# -----------------------------------
print("\nNAPALM ile doğrulama başlıyor...")
driver = get_network_driver("ios")
napalm_device = driver(
hostname="192.168.1.10",
username="admin",
password="Cisco123"
)
napalm_device.open()
# VLAN kontrolü
vlans = napalm_device.get_vlans()
print("\nVLAN kontrolü:")
for vlan_id in ['10','20']:
if vlan_id in vlans:
print(f"VLAN {vlan_id} bulundu → {vlans[vlan_id]['name']}")
else:
print(f"VLAN {vlan_id} bulunamadı")
# running config kontrolü
running = napalm_device.get_config()['running']
print("\nKullanıcı kontrolü:")
if "enable_akedemi" in running:
print("enable_akedemi kullanıcısı oluşturuldu")
napalm_device.close()
print("\nAutomation başarıyla tamamlandı.")
