🚀 Chương 3: Từ CLI sang RESTCONF & NETCONF – API hóa thiết bị Cisco IOS XE
Bạn có từng nghĩ: “Ước gì mình có thể cấu hình router bằng file JSON như dev làm web?”
🎯 RESTCONF và NETCONF chính là giải pháp. Đây là hai giao thức tầng ứng dụng được Cisco tích hợp vào IOS XE, cho phép bạn cấu hình thiết bị và đọc trạng thái một cách có cấu trúc, chuẩn hóa, dễ tích hợp.
🧱 RESTCONF vs NETCONF – khác biệt cốt lõi
➡ RESTCONF gần với thế giới web, dễ dùng hơn cho DevOps.
➡ NETCONF mạnh hơn khi cần transaction, rollback, hoặc áp dụng cấu hình theo phiên (session-based).
⚙️ Bật RESTCONF trên IOS XE
Đơn giản vài lệnh CLI:
bash
Copy
Edit
conf t restconf end
Kiểm tra bằng cách truy cập trình duyệt:
https://<router-ip>/restconf/data/
Nếu trình duyệt trả về JSON hoặc XML → RESTCONF đã sẵn sàng!
🌐 Cấu trúc URL của RESTCONF
RESTCONF tuân theo chuẩn RFC 8040, sử dụng URL có dạng:
/restconf/data/<yang-model>/<object>
Ví dụ: Đọc hostname của thiết bị:
GET /restconf/data/Cisco-IOS-XE-native:native/hostname
Yêu cầu được gửi bằng curl hoặc Python requests:
curl -k -u admin:cisco123 \ https://10.10.20.1/restconf/data/Cis...ative/hostname
🧪 Thay đổi cấu hình bằng RESTCONF
Cập nhật hostname:
PUT /restconf/data/Cisco-IOS-XE-native:native/hostname
Payload (JSON):
json
Copy
Edit
{ "Cisco-IOS-XE-native:hostname": "VNPRO-AUTOMATION" }
Gửi qua curl:
bash
Copy
Edit
curl -X PUT -k -u admin:cisco123 \ -H "Content-Type: application/yang-data+json" \ -d '{"Cisco-IOS-XE-native:hostname": "VNPRO-AUTOMATION"}' \ https://10.10.20.1/restconf/data/Cis...ative/hostname
📦 Lấy danh sách interface bằng RESTCONF
curl -k -u admin:cisco123 \ https://10.10.20.1/restconf/data/iet...ces:interfaces
Output trả về:
{ "interfaces": { "interface": [ { "name": "GigabitEthernet1", "enabled": true, "ipv4": { "address": [ { "ip": "192.168.1.1", "netmask": "255.255.255.0" } ] } } ] } }
👉 Bạn có thể duyệt cấu trúc dữ liệu như làm với object JSON trong Python hoặc JavaScript.
💡 Cấu hình interface bằng RESTCONF
Tạo mới một interface loopback:
curl -X PUT -k -u admin:cisco123 \ -H "Content-Type: application/yang-data+json" \ -d '{ "interface": { "name": "Loopback100", "description": "Created by RESTCONF", "type": "iana-if-type:softwareLoopback", "enabled": true, "ipv4": { "address": [ { "ip": "10.100.100.1", "netmask": "255.255.255.255" } ] } } }' \ https://10.10.20.1/restconf/data/iet...ce=Loopback100
🔐 Xác thực API – dùng Basic Auth hoặc Token
📘 NETCONF – dành cho hệ thống cần kiểm soát cấu hình mạnh mẽ
Nếu bạn cần tự động hóa cấu hình phức tạp, hoặc tích hợp với Ansible, hãy dùng NETCONF.
Bật NETCONF:
conf t netconf-yang
Kết nối bằng thư viện ncclient của Python:
from ncclient import manager with manager.connect(host="10.10.20.1", port=830, username="admin", password="cisco123", hostkey_verify=False) as m: netconf_reply = m.get_config(source="running") print(netconf_reply.xml)
🎯 Khi nào nên dùng RESTCONF, khi nào nên dùng NETCONF?
🚀 Tổng kết
RESTCONF và NETCONF trên IOS XE chính là API chuẩn hóa để bạn xây pipeline tự động hóa mạng một cách chính thống, không còn “vọc kiểu hacker” nữa.
Bạn có thể:
📣 Anh em đã thử RESTCONF hoặc NETCONF chưa? Comment chia sẻ nhé, hoặc gửi yêu cầu mình làm mẫu cho switch/router của anh em!
Bạn có từng nghĩ: “Ước gì mình có thể cấu hình router bằng file JSON như dev làm web?”
🎯 RESTCONF và NETCONF chính là giải pháp. Đây là hai giao thức tầng ứng dụng được Cisco tích hợp vào IOS XE, cho phép bạn cấu hình thiết bị và đọc trạng thái một cách có cấu trúc, chuẩn hóa, dễ tích hợp.
🧱 RESTCONF vs NETCONF – khác biệt cốt lõi
Giao thức nền | HTTP/HTTPS | SSH |
Định dạng dữ liệu | JSON, XML | XML |
Giao tiếp | RESTful (GET/POST/PUT/DELETE) | RPC (Remote Procedure Call) |
Mô hình dữ liệu | YANG | YANG |
Dễ học | Cao | Trung bình |
➡ RESTCONF gần với thế giới web, dễ dùng hơn cho DevOps.
➡ NETCONF mạnh hơn khi cần transaction, rollback, hoặc áp dụng cấu hình theo phiên (session-based).
⚙️ Bật RESTCONF trên IOS XE
Đơn giản vài lệnh CLI:
bash
Copy
Edit
conf t restconf end
Kiểm tra bằng cách truy cập trình duyệt:
https://<router-ip>/restconf/data/
Nếu trình duyệt trả về JSON hoặc XML → RESTCONF đã sẵn sàng!
🌐 Cấu trúc URL của RESTCONF
RESTCONF tuân theo chuẩn RFC 8040, sử dụng URL có dạng:
/restconf/data/<yang-model>/<object>
Ví dụ: Đọc hostname của thiết bị:
GET /restconf/data/Cisco-IOS-XE-native:native/hostname
Yêu cầu được gửi bằng curl hoặc Python requests:
curl -k -u admin:cisco123 \ https://10.10.20.1/restconf/data/Cis...ative/hostname
🧪 Thay đổi cấu hình bằng RESTCONF
Cập nhật hostname:
PUT /restconf/data/Cisco-IOS-XE-native:native/hostname
Payload (JSON):
json
Copy
Edit
{ "Cisco-IOS-XE-native:hostname": "VNPRO-AUTOMATION" }
Gửi qua curl:
bash
Copy
Edit
curl -X PUT -k -u admin:cisco123 \ -H "Content-Type: application/yang-data+json" \ -d '{"Cisco-IOS-XE-native:hostname": "VNPRO-AUTOMATION"}' \ https://10.10.20.1/restconf/data/Cis...ative/hostname
📦 Lấy danh sách interface bằng RESTCONF
curl -k -u admin:cisco123 \ https://10.10.20.1/restconf/data/iet...ces:interfaces
Output trả về:
{ "interfaces": { "interface": [ { "name": "GigabitEthernet1", "enabled": true, "ipv4": { "address": [ { "ip": "192.168.1.1", "netmask": "255.255.255.0" } ] } } ] } }
👉 Bạn có thể duyệt cấu trúc dữ liệu như làm với object JSON trong Python hoặc JavaScript.
💡 Cấu hình interface bằng RESTCONF
Tạo mới một interface loopback:
curl -X PUT -k -u admin:cisco123 \ -H "Content-Type: application/yang-data+json" \ -d '{ "interface": { "name": "Loopback100", "description": "Created by RESTCONF", "type": "iana-if-type:softwareLoopback", "enabled": true, "ipv4": { "address": [ { "ip": "10.100.100.1", "netmask": "255.255.255.255" } ] } } }' \ https://10.10.20.1/restconf/data/iet...ce=Loopback100
🔐 Xác thực API – dùng Basic Auth hoặc Token
- Basic Auth: đơn giản, dùng username/password mã hóa Base64
- Token-based Auth: áp dụng cho nền tảng như Cisco DNA Center hoặc thiết bị hỗ trợ token RESTCONF
📘 NETCONF – dành cho hệ thống cần kiểm soát cấu hình mạnh mẽ
Nếu bạn cần tự động hóa cấu hình phức tạp, hoặc tích hợp với Ansible, hãy dùng NETCONF.
Bật NETCONF:
conf t netconf-yang
Kết nối bằng thư viện ncclient của Python:
from ncclient import manager with manager.connect(host="10.10.20.1", port=830, username="admin", password="cisco123", hostkey_verify=False) as m: netconf_reply = m.get_config(source="running") print(netconf_reply.xml)
🎯 Khi nào nên dùng RESTCONF, khi nào nên dùng NETCONF?
- 🟢 RESTCONF: nhanh, nhẹ, dễ dùng → phù hợp cho DevOps, demo nhanh
- 🟢 NETCONF: mạnh mẽ, dùng được với rollback, batch update → phù hợp cho hệ thống lớn, production
🚀 Tổng kết
RESTCONF và NETCONF trên IOS XE chính là API chuẩn hóa để bạn xây pipeline tự động hóa mạng một cách chính thống, không còn “vọc kiểu hacker” nữa.
Bạn có thể:
- ✅ Đọc trạng thái interface, hostname
- ✅ Tạo, chỉnh sửa cấu hình qua JSON/XML
- ✅ Tích hợp với Ansible, Terraform, Jenkins, GitLab CI
📣 Anh em đã thử RESTCONF hoặc NETCONF chưa? Comment chia sẻ nhé, hoặc gửi yêu cầu mình làm mẫu cho switch/router của anh em!