Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Bài 3:

    🚀 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
    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!


    Đặng Quang Minh, CCIEx2#11897 (Enterprise Infrastructure, Wireless), DEVNET, CCSI#31417

    Email : dangquangminh@vnpro.org
    https://www.facebook.com/groups/vietprofessional/
Working...
X