Nếu phải tạo 20 VLAN trên một Switch, chắc chắn bạn sẽ không thấy đây là việc khó.
Nhưng nếu là...
100 Switch.
Mỗi Switch cần tạo 20 VLAN.
Mỗi VLAN phải gán IP khác nhau.
Mọi cấu hình phải giống nhau.
Lúc này câu chuyện không còn là biết cấu hình Cisco IOS nữa.
Mà là...
Làm sao để máy tính cấu hình thay mình?
Đó chính là lúc Network Automation bắt đầu.
Trong bài Lab này chúng ta sẽ sử dụng Python kết hợp thư viện Netmiko để SSH vào Switch Cisco và tự động thực hiện toàn bộ quá trình cấu hình.
Mục tiêu bài Lab
Sau khi hoàn thành bài thực hành, chương trình Python sẽ tự động:
Kết nối SSH đến Switch Cisco.
Đăng nhập vào chế độ Privileged EXEC.
Tạo VLAN từ 10 đến VLAN 30.
Cấu hình địa chỉ IP cho từng Interface VLAN.
Hiển thị kết quả cấu hình cuối cùng.
Toàn bộ công việc vốn phải nhập hàng chục dòng lệnh sẽ được thực hiện chỉ bằng một lần chạy chương trình.
Mô hình Lab
PC- Python-Netmiko------------>Cisco Switch - IOS -192.168.1.1
PC đóng vai trò Automation Host.
Switch Cisco là thiết bị được điều khiển thông qua giao thức SSH.
Bước 1 - Chuẩn bị môi trường Python
Trước tiên cần cài đặt thư viện Netmiko.
pip install netmiko
Hoặc với Python 3:
pip3 install netmiko --user
Netmiko thực chất là một thư viện được xây dựng trên Paramiko nhằm đơn giản hóa việc kết nối SSH tới các thiết bị mạng như Cisco, Juniper, Arista, Huawei...
Điểm mạnh của Netmiko là:
Không phải tự xử lý SSH.
Không phải chờ Prompt.
Không phải tự gửi từng ký tự.
Chỉ cần truyền danh sách câu lệnh cấu hình.
Bước 2 - Chuẩn bị Switch
Switch cần được cấu hình cơ bản trước khi có thể Automation.
Ví dụ:
interface vlan 1
ip address 192.168.1.1 255.255.255.0
no shutdown
Sau đó bật SSH.
username admin password 123
ip domain-name vnpro.local
crypto key generate rsa
ip ssh version 2
line vty 0 4
login local
transport input ssh
Đây là bước mà khá nhiều người mới học DevNet thường bỏ sót.
Python không thể điều khiển Switch nếu thiết bị chưa cho phép SSH.
Bước 3 - Khai báo thông tin thiết bị
Trong Netmiko, thiết bị thường được khai báo dưới dạng Dictionary.
from netmiko import ConnectHandler
SW1 = {
"device_type":"cisco_ios",
"ip":"192.168.1.1",
"username":"admin",
"password":"123",
"secret":"password"
}
Mỗi khóa trong Dictionary đều mang ý nghĩa riêng:
device_type xác định loại hệ điều hành.
ip là địa chỉ quản trị.
username/password dùng để SSH.
secret là Enable Password.
Sau đó kết nối:
net_connect = ConnectHandler(**SW1)
net_connect.enable()
Dấu ** dùng để giải nén Dictionary thành các tham số truyền vào hàm ConnectHandler.
Đây là cú pháp rất phổ biến trong Python và xuất hiện thường xuyên khi làm Automation.
Bước 4 - Tự động tạo VLAN
Thay vì viết:
vlan 10
vlan 11
...
vlan 30
Python chỉ cần một vòng lặp.
for n in range(10,31):
taoVlan = [
"vlan " + str(n)
]
net_connect.send_config_set(taoVlan)
Ở đây:
range(10,31)
sẽ sinh ra:
10
11
12
...
30
Mỗi lần lặp chương trình sẽ gửi một lệnh cấu hình xuống Switch.
Bước 5 - Tự động gán IP cho Interface VLAN
Sau khi VLAN được tạo, tiếp tục cấu hình Interface VLAN.
ipVlan = [
"interface vlan " + str(n),
"ip address 172.16."+str(n)+".1 255.255.255.0",
"no shutdown"
]
net_connect.send_config_set(ipVlan)
Ví dụ khi n = 20, Python sẽ sinh ra:
interface vlan 20
ip address 172.16.20.1 255.255.255.0
no shutdown
Điều đặc biệt ở đây là lập trình viên không cần viết riêng từng VLAN.
Chương trình sẽ tự sinh câu lệnh dựa trên giá trị của biến n.
Đây chính là tư duy cốt lõi của Network Automation.
Bước 6 - Kiểm tra kết quả
Sau khi cấu hình xong, Netmiko còn có thể thực thi các lệnh Show.
output = net_connect.send_command(
"show ip interface brief | include Vlan"
)
print(output)
Kết quả trả về sẽ hiển thị toàn bộ các Interface VLAN vừa được tạo.
Ví dụ:
Vlan10
Vlan11
Vlan12
...
Vlan30
Điều này giúp chương trình vừa cấu hình vừa tự xác minh kết quả mà không cần người quản trị đăng nhập kiểm tra thủ công.
Chương trình hoàn chỉnh
from netmiko import ConnectHandler
SW1 = {
"device_type":"cisco_ios",
"ip":"192.168.1.1",
"username":"admin",
"password":"123",
"secret":"password"
}
net_connect = ConnectHandler(**SW1)
net_connect.enable()
for n in range(10,31):
taoVlan = [
"vlan " + str(n)
]
ipVlan = [
"interface vlan " + str(n),
"ip address 172.16."+str(n)+".1 255.255.255.0",
"no shutdown"
]
net_connect.send_config_set(taoVlan)
net_connect.send_config_set(ipVlan)
output = net_connect.send_command(
"show ip interface brief | include Vlan"
)
print(output)
Kết luận
Bài Lab này tuy đơn giản nhưng lại là một trong những bài thực hành quan trọng nhất khi bắt đầu học Cisco DevNet.
Qua bài Lab, chúng ta hiểu được quy trình làm việc của một chương trình Automation:
Kết nối tới thiết bị.
Xác thực thông tin đăng nhập.
Gửi lệnh cấu hình.
Thu thập kết quả.
Kiểm tra trạng thái sau cấu hình.
Đây cũng chính là nền tảng để phát triển các hệ thống tự động hóa lớn hơn như:
Triển khai cấu hình hàng trăm thiết bị cùng lúc.
Backup cấu hình định kỳ.
Kiểm tra tính tuân thủ (Compliance).
Audit cấu hình.
Zero Touch Provisioning.
Tích hợp với Ansible, REST API, Nornir hoặc Cisco DNA Center.
Khi đã nắm vững Netmiko, bước tiếp theo của DevNet sẽ là xây dựng các chương trình Automation có khả năng tương tác với API và quản lý hạ tầng mạng ở quy mô doanh nghiệp.LAB
Nhưng nếu là...
100 Switch.
Mỗi Switch cần tạo 20 VLAN.
Mỗi VLAN phải gán IP khác nhau.
Mọi cấu hình phải giống nhau.
Lúc này câu chuyện không còn là biết cấu hình Cisco IOS nữa.
Mà là...
Làm sao để máy tính cấu hình thay mình?
Đó chính là lúc Network Automation bắt đầu.
Trong bài Lab này chúng ta sẽ sử dụng Python kết hợp thư viện Netmiko để SSH vào Switch Cisco và tự động thực hiện toàn bộ quá trình cấu hình.
Mục tiêu bài Lab
Sau khi hoàn thành bài thực hành, chương trình Python sẽ tự động:
Kết nối SSH đến Switch Cisco.
Đăng nhập vào chế độ Privileged EXEC.
Tạo VLAN từ 10 đến VLAN 30.
Cấu hình địa chỉ IP cho từng Interface VLAN.
Hiển thị kết quả cấu hình cuối cùng.
Toàn bộ công việc vốn phải nhập hàng chục dòng lệnh sẽ được thực hiện chỉ bằng một lần chạy chương trình.
Mô hình Lab
PC- Python-Netmiko------------>Cisco Switch - IOS -192.168.1.1
PC đóng vai trò Automation Host.
Switch Cisco là thiết bị được điều khiển thông qua giao thức SSH.
Bước 1 - Chuẩn bị môi trường Python
Trước tiên cần cài đặt thư viện Netmiko.
pip install netmiko
Hoặc với Python 3:
pip3 install netmiko --user
Netmiko thực chất là một thư viện được xây dựng trên Paramiko nhằm đơn giản hóa việc kết nối SSH tới các thiết bị mạng như Cisco, Juniper, Arista, Huawei...
Điểm mạnh của Netmiko là:
Không phải tự xử lý SSH.
Không phải chờ Prompt.
Không phải tự gửi từng ký tự.
Chỉ cần truyền danh sách câu lệnh cấu hình.
Bước 2 - Chuẩn bị Switch
Switch cần được cấu hình cơ bản trước khi có thể Automation.
Ví dụ:
interface vlan 1
ip address 192.168.1.1 255.255.255.0
no shutdown
Sau đó bật SSH.
username admin password 123
ip domain-name vnpro.local
crypto key generate rsa
ip ssh version 2
line vty 0 4
login local
transport input ssh
Đây là bước mà khá nhiều người mới học DevNet thường bỏ sót.
Python không thể điều khiển Switch nếu thiết bị chưa cho phép SSH.
Bước 3 - Khai báo thông tin thiết bị
Trong Netmiko, thiết bị thường được khai báo dưới dạng Dictionary.
from netmiko import ConnectHandler
SW1 = {
"device_type":"cisco_ios",
"ip":"192.168.1.1",
"username":"admin",
"password":"123",
"secret":"password"
}
Mỗi khóa trong Dictionary đều mang ý nghĩa riêng:
device_type xác định loại hệ điều hành.
ip là địa chỉ quản trị.
username/password dùng để SSH.
secret là Enable Password.
Sau đó kết nối:
net_connect = ConnectHandler(**SW1)
net_connect.enable()
Dấu ** dùng để giải nén Dictionary thành các tham số truyền vào hàm ConnectHandler.
Đây là cú pháp rất phổ biến trong Python và xuất hiện thường xuyên khi làm Automation.
Bước 4 - Tự động tạo VLAN
Thay vì viết:
vlan 10
vlan 11
...
vlan 30
Python chỉ cần một vòng lặp.
for n in range(10,31):
taoVlan = [
"vlan " + str(n)
]
net_connect.send_config_set(taoVlan)
Ở đây:
range(10,31)
sẽ sinh ra:
10
11
12
...
30
Mỗi lần lặp chương trình sẽ gửi một lệnh cấu hình xuống Switch.
Bước 5 - Tự động gán IP cho Interface VLAN
Sau khi VLAN được tạo, tiếp tục cấu hình Interface VLAN.
ipVlan = [
"interface vlan " + str(n),
"ip address 172.16."+str(n)+".1 255.255.255.0",
"no shutdown"
]
net_connect.send_config_set(ipVlan)
Ví dụ khi n = 20, Python sẽ sinh ra:
interface vlan 20
ip address 172.16.20.1 255.255.255.0
no shutdown
Điều đặc biệt ở đây là lập trình viên không cần viết riêng từng VLAN.
Chương trình sẽ tự sinh câu lệnh dựa trên giá trị của biến n.
Đây chính là tư duy cốt lõi của Network Automation.
Bước 6 - Kiểm tra kết quả
Sau khi cấu hình xong, Netmiko còn có thể thực thi các lệnh Show.
output = net_connect.send_command(
"show ip interface brief | include Vlan"
)
print(output)
Kết quả trả về sẽ hiển thị toàn bộ các Interface VLAN vừa được tạo.
Ví dụ:
Vlan10
Vlan11
Vlan12
...
Vlan30
Điều này giúp chương trình vừa cấu hình vừa tự xác minh kết quả mà không cần người quản trị đăng nhập kiểm tra thủ công.
Chương trình hoàn chỉnh
from netmiko import ConnectHandler
SW1 = {
"device_type":"cisco_ios",
"ip":"192.168.1.1",
"username":"admin",
"password":"123",
"secret":"password"
}
net_connect = ConnectHandler(**SW1)
net_connect.enable()
for n in range(10,31):
taoVlan = [
"vlan " + str(n)
]
ipVlan = [
"interface vlan " + str(n),
"ip address 172.16."+str(n)+".1 255.255.255.0",
"no shutdown"
]
net_connect.send_config_set(taoVlan)
net_connect.send_config_set(ipVlan)
output = net_connect.send_command(
"show ip interface brief | include Vlan"
)
print(output)
Kết luận
Bài Lab này tuy đơn giản nhưng lại là một trong những bài thực hành quan trọng nhất khi bắt đầu học Cisco DevNet.
Qua bài Lab, chúng ta hiểu được quy trình làm việc của một chương trình Automation:
Kết nối tới thiết bị.
Xác thực thông tin đăng nhập.
Gửi lệnh cấu hình.
Thu thập kết quả.
Kiểm tra trạng thái sau cấu hình.
Đây cũng chính là nền tảng để phát triển các hệ thống tự động hóa lớn hơn như:
Triển khai cấu hình hàng trăm thiết bị cùng lúc.
Backup cấu hình định kỳ.
Kiểm tra tính tuân thủ (Compliance).
Audit cấu hình.
Zero Touch Provisioning.
Tích hợp với Ansible, REST API, Nornir hoặc Cisco DNA Center.
Khi đã nắm vững Netmiko, bước tiếp theo của DevNet sẽ là xây dựng các chương trình Automation có khả năng tương tác với API và quản lý hạ tầng mạng ở quy mô doanh nghiệp.LAB