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.

Announcement

Collapse
No announcement yet.

Lab : Sử dụng RESTCONF kết nối Router IOS XE ( Phần 1 )

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Lab : Sử dụng RESTCONF kết nối Router IOS XE ( Phần 1 )

    Sơ đồ :


    Bảng địa chỉ :


    Mục tiêu
    • Part 1: Xây dựng mạng và kiểm tra kết nối
    • Part 2: Cấu hình thiết bị IOS XE cho kết nối RESTCONF
    • Part 3: Mở và cấu hình Postman
    • Part 4: Sử dụng Postman để gửi yêu cầu GET
    • Part 5: Sử dụng Postman để gửi yêu cầu PUT
    • Part 6: Dùng Python Script để gửi yêu cầu GET
    • Part 7: Dùng Python Script để gửi yêu cầu PUT
    Bối cảnh/ Tổng quan

    Giao thức RESTCONF là một tập hợp con của NETCONF. RESTCONF cho phép thực hiện các cuộc gọi API RESTful đến thiết bị IOS XE. Dữ liệu được API trả về có thể là XML hoặc JSON. Trong nửa đầu của lab này, chúng ta sẽ sử dụng chương trình Postman để xây dựng và gửi các yêu cầu API đến dịch vụ RESTCONF đang chạy trên R1. Trong nửa sau của lab, chúng ta sẽ tạo các script Python để thực hiện các tác vụ giống như Postman.

    Các tài nguyên cần thiết
    • 1 Router (Cisco 4221 with Cisco IOS XE Release 16.9.4 universal image or comparable)
    • 1 Switch
    • 1 PC (Choice of operating system with Cisco Networking Academy CCNP VM running in a virtual machine client and terminal emulation program)
    • Cáp Ethernet
    Hướng dẫn

    Part 1: Xây dựng mạng và kiểm tra kết nối

    Trong Phần 1, bạn sẽ nối cáp các thiết bị, khởi động Python VM và cấu hình R1 để truy cập NETCONF và RESTCONF qua kết nối SSH. Sau đó, bạn sẽ xác minh kết nối giữa Python VM và R1, kiểm tra kết nối SSH với R1.

    Step 1: Cắm dây cho mạng như trên sơ đồ.

    Kết nối các thiết bị như thể hiện trong sơ đồ cấu trúc liên kết và cáp nếu cần.

    Step 2: Mở CCNP VM.

    Ghi chú: Nếu bạn chưa hoàn thành Lab - Cài đặt Máy ảo CCNP, hãy thực hiện ngay trước khi tiếp tục với lab này.
    a. Mở VirtualBox. Bắt đầu máy ảo CCNP VM.
    b. Nhập mật khẩu StudentPass để đăng nhập vào máy ảo nếu cần.

    Step 3: Cấu hình R1.

    Kết nối với màn hình điều khiển của R1 và cấu hình các cài đặt cơ bản cho lab như sau:
    Code:
    [FONT=Courier New]enable[/FONT]
    [FONT=Courier New]configure terminal[/FONT]
    [FONT=Courier New]hostname R1[/FONT]
    [FONT=Courier New]no ip domain lookup[/FONT]
    [FONT=Courier New]line con 0[/FONT]
    [FONT=Courier New]logging synchronous[/FONT]
    [FONT=Courier New]exec-timeout 0 0[/FONT]
    [FONT=Courier New]line vty 0 15[/FONT]
    [FONT=Courier New]exec-t 0 0[/FONT]
    [FONT=Courier New]logg sync[/FONT]
    [FONT=Courier New]login local[/FONT]
    [FONT=Courier New]transport input ssh[/FONT]
    [FONT=Courier New]!Configure SSH which is required for NETCONF and RESTCONF access[/FONT]
    [FONT=Courier New]ip domain name example.netacad.com[/FONT]
    [FONT=Courier New]crypto key generate rsa modulus 2048[/FONT]
    [FONT=Courier New]username cisco privilege 15 password cisco123![/FONT]
    [FONT=Courier New]interface GigabitEthernet0/0/1[/FONT]
    [FONT=Courier New]description Link to PC[/FONT]
    [FONT=Courier New]ip address 192.168.1.1 255.255.255.0[/FONT]
    [FONT=Courier New]no shutdown[/FONT]
    [FONT=Courier New]!Configure a DHCP server to assign IPv4 addressing to the CCNP VM[/FONT]
    [FONT=Courier New]ip dhcp excluded-address 192.168.1.1 192.168.1.10[/FONT]
    [FONT=Courier New]ip dhcp pool LAN[/FONT]
    [FONT=Courier New]network 192.168.1.0 /24[/FONT]
    [FONT=Courier New]default-router 192.168.1.1[/FONT]
    [FONT=Courier New]domain-name example.netacad.com[/FONT]
    [FONT=Courier New]end[/FONT]
    [FONT=Courier New]copy run start[/FONT]
    Step 4: Kiểm tra CCNP VM có thể ping default gateway.

    a. Trong CCNP VM, mở cửa sổ terminal.

    b. Kiểm tra CCNP VM được kết nối với R1 bằng cách nhập địa chỉ IP để xác minh rằng CCNP VM đã nhận địa chỉ IP từ máy chủ DHCP hoặc bằng cách ping R1 ở 192.168.1.1. Nhập Ctrl + C để thoát ra khỏi ping, như thể hiện trong ví dụ đầu ra bên dưới.
    Code:
    [FONT=Courier New]student@Ubuntu-Master:~$ [B]ip address[/B][/FONT]
    [FONT=Courier New]1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000[/FONT]
    [FONT=Courier New]link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00[/FONT]
    [FONT=Courier New]inet 127.0.0.1/8 scope host lo[/FONT]
    [FONT=Courier New]valid_lft forever preferred_lft forever[/FONT]
    [FONT=Courier New]inet6 ::1/128 scope host[/FONT]
    [FONT=Courier New]valid_lft forever preferred_lft forever[/FONT]
    [FONT=Courier New]2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000[/FONT]
    [FONT=Courier New]link/ether 00:50:56:b3:72:3b brd ff:ff:ff:ff:ff:ff[/FONT]
    [FONT=Courier New]inet 192.168.1.15/24 brd 192.168.1.255 scope global dynamic noprefixroute ens160[/FONT]
    [FONT=Courier New]valid_lft 79564sec preferred_lft 79564sec[/FONT]
    [FONT=Courier New]inet6 fe80::1ae4:952f:402d:6b1/64 scope link noprefixroute[/FONT]
    [FONT=Courier New]valid_lft forever preferred_lft forever[/FONT]
    [FONT=Courier New]3: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000[/FONT]
    [FONT=Courier New]link/ether 00:50:56:b3:26:b6 brd ff:ff:ff:ff:ff:ff[/FONT]
    [FONT=Courier New]inet 192.168.50.183/24 brd 192.168.50.255 scope global dynamic noprefixroute ens192[/FONT]
    [FONT=Courier New]valid_lft 70687sec preferred_lft 70687sec[/FONT]
    [FONT=Courier New]inet6 fe80::4c87:a2b3:aa9:5470/64 scope link noprefixroute[/FONT]
    [FONT=Courier New]valid_lft forever preferred_lft forever[/FONT]
    
    [FONT=Courier New]student@Ubuntu-Master:~$ [B]ping 192.168.1.1[/B][/FONT]
    [FONT=Courier New]PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.[/FONT]
    [FONT=Courier New]64 bytes from 192.168.1.1: icmp_seq=1 ttl=255 time=0.703 ms[/FONT]
    [FONT=Courier New]64 bytes from 192.168.1.1: icmp_seq=2 ttl=255 time=0.748 ms[/FONT]
    [FONT=Courier New]64 bytes from 192.168.1.1: icmp_seq=3 ttl=255 time=0.757 ms[/FONT]
    [FONT=Courier New]^C[/FONT]
    [FONT=Courier New]--- 192.168.1.1 ping statistics ---[/FONT]
    [FONT=Courier New]3 packets transmitted, 3 received, 0% packet loss, time 2033ms[/FONT]
    [FONT=Arial]rtt min/avg/max/mdev = 0.703/0.736/0.757/0.023 ms[/FONT]
    c. Nếu máy ảo CCNP chưa nhận được địa chỉ IPv4, hãy kiểm tra các kết nối vật lý của bạn giữa PC và R1. Ngoài ra, xác minh rằng R1 được cấu hình đúng theo bước trước đó.

    Step 5: Thiết lập kết nối SSH đến R1.

    a. Mở PuTTY SSH Client.
    b. Nhập địa chỉ IPv4 cho default gateway, 192.168.1.1, và nhấn Open.
    c. Bạn sẽ có thể đăng nhập vào R1 bằng tên người dùng cisco và mật khẩu cisco123!. Nếu không, hãy xác minh rằng cấu hình SSH của bạn là chính xác trên R1.


    Part 2: Cấu hình thiết bị IOS XE để truy cập RESTCONF

    Trong Phần 2, bạn sẽ cấu hình R1 để chấp nhận các thông báo RESTCONF. Bạn cũng sẽ bắt đầu dịch vụ HTTPS trên R1.

    Step 1: Xác minh RESTCONF đang chạy trên R1.

    RESTCONF có thể đã chạy nếu một học viên khác kích hoạt nó hoặc nếu phiên bản iOS mới hơn kích hoạt theo mặc định. Từ thiết bị đầu cuối PuTTY, bạn có thể sử dụng lệnh show platform software yang-management process để xem liệu tất cả các trình tiện ích được liên kết với dịch vụ RESTCONF có đang chạy không.
    Code:
    [FONT=Courier New]R1# [B]show platform software yang-management process[/B][/FONT]
    [FONT=Courier New]confd : Not Running[/FONT]
    [FONT=Courier New]nesd : Not Running[/FONT]
    [FONT=Courier New]syncfd : Not Running[/FONT]
    [FONT=Courier New]ncsshd : Not Running[/FONT]
    [FONT=Courier New]dmiauthd : Not Running[/FONT]
    [FONT=Courier New]nginx : Not Running[/FONT]
    [FONT=Courier New]ndbmand : Not Running[/FONT]
    [FONT=Courier New]pubd : Not Running[/FONT]
    Ghi chú: Mục đích và chức năng của tất cả các trình tiện ích nằm ngoài phạm vi của khóa học này.

    Step 2: Bật và kiểm tra dịch vụ RESTCONF.

    a. Nhập lệnh cấu hình restconf để kích hoạt dịch vụ RESTCONF trên R1.
    Code:
    [FONT=Courier New]R1(config)# [B]restconf[/B][/FONT]
    b. Xác minh rằng các trình tiện ích RESTCONF cần thiết hiện đang chạy. Hãy nhớ rằng ncsshd là dịch vụ NETCONF, có thể đang chạy trên thiết bị của bạn. Chúng tôi không cần nó cho lab này. Tuy nhiên, bạn cần nginx, đó là máy chủ HTTPS. Điều này sẽ cho phép thực hiện các cuộc gọi REST API đến dịch vụ RESTCONF.
    Code:
    [FONT=Courier New]R1(config)#[B] exit[/B][/FONT]
    [FONT=Courier New]R1# [B]show platform software yang-management process[/B][/FONT]
    [FONT=Courier New]confd : Running[/FONT]
    [FONT=Courier New]nesd : Running[/FONT]
    [FONT=Courier New]syncfd : Running[/FONT]
    [FONT=Courier New]ncsshd : Not Running[/FONT]
    [FONT=Courier New]dmiauthd : Running[/FONT]
    [FONT=Courier New]nginx : Not Running[/FONT]
    [FONT=Courier New]ndbmand : Running[/FONT]
    [FONT=Courier New]pubd : Running[/FONT]
    Step 3: Bật và kiểm tra dịch vụ HTTPS .

    a. Nhập các lệnh cấu hình toàn cầu sau để kích hoạt server HTTPS và chỉ định rằng xác thực máy chủ nên sử dụng cơ sở dữ liệu cục bộ.
    Code:
    [FONT=Courier New]R1# [B]configure terminal[/B][/FONT]
    [FONT=Courier New]R1(config)# [B]ip http secure-server[/B][/FONT]
    [FONT=Courier New]R1(config)# [B]ip http authentication local[/B][/FONT]
    b. Kiểm tra server HTTPS (nginx) đang chạy.
    Code:
    [FONT=Courier New]R1(config)#[B] exit[/B][/FONT]
    [FONT=Courier New]R1# [B]show platform software yang-management process[/B][/FONT]
    [FONT=Courier New]confd : Running[/FONT]
    [FONT=Courier New]nesd : Running[/FONT]
    [FONT=Courier New]syncfd : Running[/FONT]
    [FONT=Courier New]ncsshd : Not Running[/FONT]
    [FONT=Courier New]dmiauthd : Running[/FONT]
    [FONT=Courier New]nginx : Running[/FONT]
    [FONT=Courier New]ndbmand : Running[/FONT]
    [FONT=Courier New]pubd : Running[/FONT]


    Part 3: Mở và cấu hình Postman

    Trong Phần 3, bạn sẽ mở Postman, vô hiệu hóa chứng chỉ SSL và khám phá giao diện người dùng.

    Step 1: Mở Postman.

    a. Trong máy ảo CCNP VM, mở ứng dụng Postman.
    b. Khi mới mở Postman lần đầu, nó sẽ yêu cầu bạn tạo một tài khoản hoặc đăng nhập. Ở dưới cùng của cửa sổ, bạn cũng có thể nhấp vào dòng Skip để bỏ qua đăng nhập. Không cần đăng nhập để sử dụng ứng dụng này.

    Step 2: Vô hiệu hóa chức năng xác thực chứng chỉ SSL.
    ​​​​​​
    Theo mặc định, Postman đã bật xác minh chứng nhận SSL. Bạn sẽ không sử dụng chứng chỉ SSL với R1; do đó, bạn cần tắt tính năng này.
    a. Nhấn File > Settings.
    b. Dưới tab General, chỉnh SSL certificate verification thành OFF.
    c. Đóng Settings dialog box.


    Part 4: Sử dụng Postman để gửi yêu cầu GET
    ​​​​​​
    Trong Phần 4, bạn sẽ sử dụng Postman để gửi yêu cầu GET đến R1 để xác minh rằng bạn có thể kết nối với dịch vụ RESTCONF.

    Step 1: Khai thác giao diện người dùng.
    ​​​​​​
    a. Ở trung tâm, chúng ta sẽ thấy Launchpad. Bạn có thể khám phá khu vực này nếu muốn.
    b. Nhấp vào dấu cộng (+) bên cạnh tab Launchpad để mở yêu cầu GET . Giao diện này là nơi bạn sẽ thực hiện tất cả công việc của mình trong lab này.

    Step 2: Nhập URL cho R1.

    a. Loại yêu cầu đã được đặt thành GET.
    b. Trong trường request URL, nhập vào URL sẽ được sử dụng để truy cập dịch vụ RESTCONF đang chạy trên R1:
    Code:
    [FONT=Courier New]https://192.168.1.1/restconf/[/FONT]
    Step 3: Nhập thông tin xác thực.

    Bên dưới trường URL, sẽ có các tab như Params, Authorization, Headers, Body, Pre-request Script, and Test. Trong bài lab này, chúng ta sẽ sử dụng Authorization, Headers, và Body.
    a. Nhấn tab Authorization.
    b. Trong Type, nhấn dấu mũi tên xuống kế bên “Inherit auth from parent” và chọn Basic Auth.
    c. Phần Username và Password, nhập thông tin xác thực đã được cáu hình trên R1 ở Part 1:
    Username: cisco
    Password: cisco123!

    Step 4: Thêm thông tin xác thực vào request headers.
    ​​​​​​
    a. Nhân nút Preview Request. Điều này sẽ thêm thông tin xác thực vào tiêu đề yêu cầu.
    b. Nhấn Headers. Sau đó mở rộng trường Temporary Headers. Chúng ta có thể xác minh rằng Authorization key có giá trị Basic sẽ được sử dụng để xác thực yêu cầu khi được gửi tới R1.

    Step 5: Đặt JSON làm kiểu dữ liệu để gửi và nhận trên R1.

    Chúng ta có thể gửi và nhận dữ liệu từ R1 ở định dạng JSON hoặc XML. Trong bài lab này, chúng ta sẽ dùng JSON.
    a. Phía trên khu vực Temporary Headers là khu vực Headers. Nhấp vào trường Key và nhập Content-Type cho loại khóa. Trong trường Value, nhập application/ yang-data+json. Điều này bảo Postman gửi dữ liệu JSON đến R1.
    b. Bên dưới Content-Type, thêm cặp key/value. Trường Key là Accept và trường Value là application/yang-data+json.

    Ghi chú: Chúng ta có thể thay đổi application/yang-data+json thành application/yang-data+xml để gửi và nhận dữ liệu XML thay cho dữ liệu JSON nếu cần thiết.

    Step 6: Gửi API request đến R1.

    Postman bây giờ có tất cả thông tin cần thiết để gửi yêu cầu GET. Nhấp vào Send. Bên dưới Temporary Headers, chúng ta sẽ thấy phản hồi JSON sau đây từ R1. Nếu không, hãy xác minh rằng bạn đã hoàn thành các bước trước đó trong phần này của lab và cấu hình chính xác SSH trong Phần 1 và RESTCONF trong Part 2.
    Code:
    [FONT=Courier New]{[/FONT]
    [FONT=Courier New]"ietf-restconf:restconf": {[/FONT]
    [FONT=Courier New]"data": {},[/FONT]
    [FONT=Courier New]"operations": {},[/FONT]
    [FONT=Courier New]"yang-library-version": "2016-06-21"[/FONT]
    [FONT=Courier New]}[/FONT]
    [FONT=Courier New]}[/FONT]
    JSON response này xác minh rằng Postman hiện có thể gửi các yêu cầu REST API khác tới R1.

    Step 7: Sử dụng GET request để thu thập thông tin của tất cả các cổng trên R1.

    a. Bây giờ chúng ta đã có GET request thành công, bạn có thể sử dụng nó làm mẫu (template) cho các yêu cầu bổ sung. Ở đầu Postman, bên cạnh tab Launchpad, nhấp chuột phải vào tab GET mà bạn vừa sử dụng và chọn Duplicate Current Tab.
    b. Sử dụng ietf-interfaces mô hình YANG để thu thập thông tin cổng. Trong URL, thêm data/ietf-interfaces:interfaces:
    Code:
    [FONT=Courier New]https://192.168.1.1/restconf/data/ietf-interfaces:interfaces[/FONT]
    c. Nhấn Send. Chúng ta sẽ thấy JSON response từ R1 tương tự như đầu ra được hiển thị bên dưới. Đầu ra có thể khác nhau tùy thuộc vào router cụ thể.
    Code:
    [FONT=Courier New]{[/FONT]
    [FONT=Courier New]"ietf-interfaces:interfaces": {[/FONT]
    [FONT=Courier New]"interface": [[/FONT]
    [FONT=Courier New]{[/FONT]
    [FONT=Courier New]"name": "GigabitEthernet0",[/FONT]
    [FONT=Courier New]"type": "iana-if-type:ethernetCsmacd",[/FONT]
    [FONT=Courier New]"enabled": false,[/FONT]
    [FONT=Courier New]"ietf-ip:ipv4": {},[/FONT]
    [FONT=Courier New]"ietf-ip:ipv6": {}[/FONT]
    [FONT=Courier New]},[/FONT]
    [FONT=Courier New]{[/FONT]
    [FONT=Courier New]"name": "GigabitEthernet0/0/0",[/FONT]
    [FONT=Courier New]"type": "iana-if-type:ethernetCsmacd",[/FONT]
    [FONT=Courier New]"enabled": false,[/FONT]
    [FONT=Courier New]"ietf-ip:ipv4": {},[/FONT]
    [FONT=Courier New]"ietf-ip:ipv6": {}[/FONT]
    [FONT=Courier New]},[/FONT]
    [FONT=Courier New]{[/FONT]
    [FONT=Courier New]"name": "GigabitEthernet0/0/1",[/FONT]
    [FONT=Courier New]"description": "Link to PC",[/FONT]
    [FONT=Courier New]"type": "iana-if-type:ethernetCsmacd",[/FONT]
    [FONT=Courier New]"enabled": true,[/FONT]
    [FONT=Courier New]"ietf-ip:ipv4": {[/FONT]
    [FONT=Courier New]"address": [[/FONT]
    [FONT=Courier New]{[/FONT]
    [FONT=Courier New]"ip": "192.168.1.1",[/FONT]
    [FONT=Courier New]"netmask": "255.255.255.0"[/FONT]
    [FONT=Courier New]}[/FONT]
    [FONT=Courier New]][/FONT]
    [FONT=Courier New]},[/FONT]
    [FONT=Courier New]"ietf-ip:ipv6": {}[/FONT]
    [FONT=Courier New]}[/FONT]
    [FONT=Courier New]][/FONT]
    [FONT=Courier New]}[/FONT]
    [FONT=Courier New]}[/FONT]
    Step 8: Sử dụng GET request cho cổng chỉ định trên R1.
    ​​​​​​
    Trong lab này, chỉ cổng GigabitEthernet 0/0/0 là được cấu hình. Để chỉ định cổng này, mở rộng URL để chỉ nhận thông tin cổng.
    a. Ghi lại GET request bước trước.
    b. Thêm interface= tham số để chỉ định một cổng và nhập tên của cổng. Tuy nhiên, lưu ý rằng bạn cần sử dụng mã HTML% 2F cho các dấu gạch chéo về phía trước trong tên giao diện. Vì vậy, 0/0/1 trở thành 0%2F0%2F1.
    Code:
    [FONT=Courier New]https://192.168.1.1/restconf/data/ietf-interfaces:interfaces/interface=GigabitEthernet0[B]%2F[/B]0[B]%2F[/B]1[/FONT]
    Ghi chú: URL trên nên được ghi chung trên một dòng.

    c. Nhấn Send. Chúng ta sẽ thấy phản hồi JSON từ R1 tương tự như đầu ra bên dưới. Đầu ra có thể khác nhau tùy thuộc vào router cụ thể.
    Code:
    [FONT=Courier New]{[/FONT]
    [FONT=Courier New]"ietf-interfaces:interface": {[/FONT]
    [FONT=Courier New]"name": "GigabitEthernet0/0/1",[/FONT]
    [FONT=Courier New]"description": "Link to PC",[/FONT]
    [FONT=Courier New]"type": "iana-if-type:ethernetCsmacd",[/FONT]
    [FONT=Courier New]"enabled": true,[/FONT]
    [FONT=Courier New]"ietf-ip:ipv4": {[/FONT]
    [FONT=Courier New]"address": [[/FONT]
    [FONT=Courier New]{[/FONT]
    [FONT=Courier New]"ip": "192.168.1.1",[/FONT]
    [FONT=Courier New]"netmask": "255.255.255.0"[/FONT]
    [FONT=Courier New]}[/FONT]
    [FONT=Courier New]][/FONT]
    [FONT=Courier New]},[/FONT]
    [FONT=Courier New]"ietf-ip:ipv6": {}[/FONT]
    [FONT=Courier New]}[/FONT]
    [FONT=Courier New]}[/FONT]
    Hết phần 1.

    Ở phần tiếp theo chúng ta sẽ sử dụng Postman để gửi PUT Request và sử dụng Python để gửi PUT, GET Request.

    Thank you.
    Nguồn : VNPRO
Working...
X