Hôm nay mình muốn chia sẻ một chút về Network Automation với Python Netmiko — một chủ đề khá thú vị cho những bạn đang học Network, DevOps hoặc Automation.
Trước đây khi cấu hình thiết bị mạng, mình thường làm theo cách truyền thống: SSH vào switch/router, sau đó gõ từng dòng lệnh cấu hình. Cách này dễ hiểu và phù hợp khi hệ thống nhỏ. Nhưng khi số lượng thiết bị nhiều hơn, hoặc cấu hình có tính lặp lại, việc làm thủ công bắt đầu có nhiều vấn đề.
Ví dụ đơn giản: cần tạo nhiều VLAN trên switch.
Nếu làm tay, mình phải tạo từng VLAN, vào từng interface VLAN, gán IP, bật interface, rồi kiểm tra lại kết quả. Với vài VLAN thì ổn, nhưng nếu phải làm cho hàng chục VLAN hoặc nhiều switch khác nhau thì rất dễ mất thời gian và dễ sai sót.
Đây là lúc Network Automation trở nên hữu ích.
Thay vì ngồi gõ từng dòng lệnh, mình có thể viết một script Python để tự động SSH vào thiết bị và gửi các lệnh cấu hình cần thiết.
Một thư viện khá phổ biến để làm việc này là Netmiko.
Netmiko là gì?
Netmiko là thư viện Python hỗ trợ kết nối SSH tới các thiết bị mạng như Cisco, Juniper, Huawei, MikroTik… Sau khi kết nối thành công, Python có thể gửi lệnh cấu hình hoặc lệnh kiểm tra trạng thái thiết bị.
Nói đơn giản hơn, Netmiko giúp mình biến những thao tác cấu hình thủ công trên CLI thành một đoạn script có thể chạy tự động.
Ví dụ luồng xử lý sẽ như sau:
Máy tính chạy Python
→ Kết nối SSH tới switch
→ Gửi danh sách lệnh cấu hình
→ Switch thực thi lệnh
→ Python lấy kết quả kiểm tra và in ra màn hình
Một ví dụ rất đơn giản về ý tưởng:
from netmiko import ConnectHandler
device = {
"device_type": "cisco_ios",
"ip": "<SWITCH_IP>",
"username": "<USERNAME>",
"password": "<PASSWORD>",
"secret": "<ENABLE_SECRET>",
}
connect = ConnectHandler(**device)
connect.enable()
for vlan_id in range(10, 31):
commands = [
f"vlan {vlan_id}",
f"interface vlan {vlan_id}",
f"ip address 172.16.{vlan_id}.1 255.255.255.0",
"no shutdown"
]
connect.send_config_set(commands)
result = connect.send_command("show ip interface brief")
print(result)
connect.disconnect()
Điểm hay ở đây nằm ở vòng lặp:
for vlan_id in range(10, 31):
Thay vì phải viết lệnh cho từng VLAN một cách thủ công, vòng lặp sẽ tự động chạy từ VLAN 10 đến VLAN 30. Với mỗi VLAN, script sẽ tự tạo ra nhóm lệnh tương ứng và gửi xuống switch.
Ví dụ khi vlan_id = 10, script sẽ hiểu là cần tạo VLAN 10 và gán IP tương ứng cho interface VLAN 10.
Khi vlan_id = 11, script tiếp tục làm tương tự cho VLAN 11.
Cứ như vậy cho đến VLAN cuối cùng.
Nhờ cách làm này, những công việc có tính lặp lại cao sẽ được xử lý nhanh hơn, đồng nhất hơn và ít bị lỗi do thao tác thủ công.
Mình rút ra được gì từ bài lab này?
Điều đầu tiên là automation không phải thứ gì quá xa vời. Chỉ cần hiểu cơ bản về Python, SSH và cách thiết bị mạng nhận lệnh CLI là đã có thể bắt đầu tự động hóa các tác vụ đơn giản.
Điều thứ hai là Netmiko rất phù hợp cho người mới học Network Automation. Cú pháp khá dễ tiếp cận, cách kết nối rõ ràng và có thể thấy kết quả trực tiếp trên thiết bị sau khi chạy script.
Bài lab này tuy nhỏ nhưng giúp mình hiểu rõ hơn cách Python có thể hỗ trợ công việc của Network Engineer hoặc DevOps Engineer. Những thao tác lặp đi lặp lại trên thiết bị mạng hoàn toàn có thể được tự động hóa bằng script, giúp tiết kiệm thời gian và giảm lỗi cấu hình.
Nói ngắn gọn, Netmiko là một bước khởi đầu rất tốt để tiếp cận Network Automation.
Trước đây khi cấu hình thiết bị mạng, mình thường làm theo cách truyền thống: SSH vào switch/router, sau đó gõ từng dòng lệnh cấu hình. Cách này dễ hiểu và phù hợp khi hệ thống nhỏ. Nhưng khi số lượng thiết bị nhiều hơn, hoặc cấu hình có tính lặp lại, việc làm thủ công bắt đầu có nhiều vấn đề.
Ví dụ đơn giản: cần tạo nhiều VLAN trên switch.
Nếu làm tay, mình phải tạo từng VLAN, vào từng interface VLAN, gán IP, bật interface, rồi kiểm tra lại kết quả. Với vài VLAN thì ổn, nhưng nếu phải làm cho hàng chục VLAN hoặc nhiều switch khác nhau thì rất dễ mất thời gian và dễ sai sót.
Đây là lúc Network Automation trở nên hữu ích.
Thay vì ngồi gõ từng dòng lệnh, mình có thể viết một script Python để tự động SSH vào thiết bị và gửi các lệnh cấu hình cần thiết.
Một thư viện khá phổ biến để làm việc này là Netmiko.
Netmiko là gì?
Netmiko là thư viện Python hỗ trợ kết nối SSH tới các thiết bị mạng như Cisco, Juniper, Huawei, MikroTik… Sau khi kết nối thành công, Python có thể gửi lệnh cấu hình hoặc lệnh kiểm tra trạng thái thiết bị.
Nói đơn giản hơn, Netmiko giúp mình biến những thao tác cấu hình thủ công trên CLI thành một đoạn script có thể chạy tự động.
Ví dụ luồng xử lý sẽ như sau:
Máy tính chạy Python
→ Kết nối SSH tới switch
→ Gửi danh sách lệnh cấu hình
→ Switch thực thi lệnh
→ Python lấy kết quả kiểm tra và in ra màn hình
Một ví dụ rất đơn giản về ý tưởng:
from netmiko import ConnectHandler
device = {
"device_type": "cisco_ios",
"ip": "<SWITCH_IP>",
"username": "<USERNAME>",
"password": "<PASSWORD>",
"secret": "<ENABLE_SECRET>",
}
connect = ConnectHandler(**device)
connect.enable()
for vlan_id in range(10, 31):
commands = [
f"vlan {vlan_id}",
f"interface vlan {vlan_id}",
f"ip address 172.16.{vlan_id}.1 255.255.255.0",
"no shutdown"
]
connect.send_config_set(commands)
result = connect.send_command("show ip interface brief")
print(result)
connect.disconnect()
Điểm hay ở đây nằm ở vòng lặp:
for vlan_id in range(10, 31):
Thay vì phải viết lệnh cho từng VLAN một cách thủ công, vòng lặp sẽ tự động chạy từ VLAN 10 đến VLAN 30. Với mỗi VLAN, script sẽ tự tạo ra nhóm lệnh tương ứng và gửi xuống switch.
Ví dụ khi vlan_id = 10, script sẽ hiểu là cần tạo VLAN 10 và gán IP tương ứng cho interface VLAN 10.
Khi vlan_id = 11, script tiếp tục làm tương tự cho VLAN 11.
Cứ như vậy cho đến VLAN cuối cùng.
Nhờ cách làm này, những công việc có tính lặp lại cao sẽ được xử lý nhanh hơn, đồng nhất hơn và ít bị lỗi do thao tác thủ công.
Mình rút ra được gì từ bài lab này?
Điều đầu tiên là automation không phải thứ gì quá xa vời. Chỉ cần hiểu cơ bản về Python, SSH và cách thiết bị mạng nhận lệnh CLI là đã có thể bắt đầu tự động hóa các tác vụ đơn giản.
Điều thứ hai là Netmiko rất phù hợp cho người mới học Network Automation. Cú pháp khá dễ tiếp cận, cách kết nối rõ ràng và có thể thấy kết quả trực tiếp trên thiết bị sau khi chạy script.
Bài lab này tuy nhỏ nhưng giúp mình hiểu rõ hơn cách Python có thể hỗ trợ công việc của Network Engineer hoặc DevOps Engineer. Những thao tác lặp đi lặp lại trên thiết bị mạng hoàn toàn có thể được tự động hóa bằng script, giúp tiết kiệm thời gian và giảm lỗi cấu hình.
Nói ngắn gọn, Netmiko là một bước khởi đầu rất tốt để tiếp cận Network Automation.