思科模拟器(SDN控制器使用教程二)

思科模拟器(SDN控制器使用教程二)

写在前面:
笔者在2021年5月份发布了一篇关于思科模拟器SDN控制器的使用教程,得到了大家的喜欢,这是笔者更新这篇文章的动力。在以后只要是有时间笔者就会多更新一点关于这方面的文章,和大家一起学习SDN相关技术。笔者技术能力有限,可能不是特别专业,如果在文中有什么错误,希望大家能够指出,笔者也希望和大家一起进步。在过去的两年里,笔者经历了一些生活的变故,以为不会在从事网络相关行业了,可命运弄人在从校园走出后还是从事了网络相关行业更准确的说是通信相关行业(笔者目前就职于某运营商从事网络、无线、通信相关的工作)。在工作过程中接触到了SD-WAN相关技术,奈何华为目前暂不支持SDN相关的模拟设备,无法和大家分享华为相关的技术。在接下来的日子里笔者也会不断学习来储备自己的知识。目前笔者具有华为HCIP(数通方向)软考的网络工程师软考软件设计师RedHat网络学院认证,在某运行商和浪潮xx公司以及本地几家科技公司从事过运维、等保测评等工作。目前准备学习网络安全方向,如果后面有朋友想在考证方面咨询,也会进行积极的回复,笔者在低谷时得到了许许多多的好心人帮助,也希望自己能够为一些想从事网络方面的朋友提供力所能及的帮助。笔者并非机构,也会不定期更新文章。关于思科的SDN模拟器也更新到此,如果有英文能力好一点的朋友能够更深入的带着大家学习。希望大家不喜勿喷。

一、实验拓扑

在这里插入图片描述

各个设备配置:在各个设备中,配置了一个用户,用户名和密码为:adminadmin。为了后面在Web管理中作为管理设备的凭证。

路由器配置Lo:1.1.1.1路由器配置

hostname Router
username admin privilege 15 secret 5 $1$mERr$vTbHul1N28cEp8lkLqr0f/
interface Loopback0
 ip address 1.1.1.1 255.255.255.255
interface GigabitEthernet0/0
 ip address 10.0.0.1 255.255.255.0
 duplex auto
 speed auto
interface GigabitEthernet0/1
 ip address 192.168.1.1 255.255.255.0
 duplex auto
 speed auto
interface GigabitEthernet0/2
 ip address 10.0.1.1 255.255.255.0
 duplex auto
 speed auto
router ospf 1
 log-adjacency-changes
 network 192.168.1.0 0.0.0.255 area 0
 network 10.0.0.0 0.0.0.255 area 0
 network 1.1.1.1 0.0.0.0 area 0
 network 10.0.1.0 0.0.0.255 area 0

路由器配置Lo:3.3.3.3路由器配置

hostname R1
username admin privilege 15 secret 5 $1$mERr$vTbHul1N28cEp8lkLqr0f/
interface Loopback0
 ip address 3.3.3.3 255.255.255.255
interface FastEthernet0/0
 ip address 10.0.1.2 255.255.255.0
 duplex auto
 speed auto
router ospf 1
 log-adjacency-changes
 network 10.0.1.0 0.0.0.255 area 0
 network 3.3.3.3 0.0.0.0 area 0

核心交换机配置

hostname Switch
username admin secret 5 $1$mERr$vTbHul1N28cEp8lkLqr0f/
interface Loopback0
 ip address 2.2.2.2 255.255.255.255
interface GigabitEthernet1/0/1
 switchport access vlan 10
 switchport mode access
interface GigabitEthernet1/0/2
 switchport access vlan 100
 switchport mode access
interface GigabitEthernet1/0/3
 switchport access vlan 200
 switchport mode access
interface Vlan10
 mac-address 0002.4a7e.d901
 ip address 192.168.1.2 255.255.255.0
interface Vlan100
 mac-address 0002.4a7e.d902
 ip address 192.168.100.1 255.255.255.0
interface Vlan200
 mac-address 0002.4a7e.d903
 ip address 172.16.0.1 255.255.255.0
router ospf 1
 log-adjacency-changes
 network 192.168.1.0 0.0.0.255 area 0
 network 0.0.0.0 255.255.255.255 area 0
 network 192.168.100.0 0.0.0.255 area 0
 network 172.16.0.0 0.0.0.255 area 0

二层交换机配置

hostname Switch
username admin secret 5 $1$mERr$vTbHul1N28cEp8lkLqr0f/
interface FastEthernet0/24
 switchport access vlan 100
 switchport mode access
interface Vlan100
 ip address 172.16.0.2 255.255.255.0
ip default-gateway 172.16.0.1

二、在Web平台中添加凭证

​ **打开Web管理界面我这里是监听了58001端口。这里可以参考之前的文章。**添加设备登陆凭证,用于SDN控制器管理网络设备。
在这里插入图片描述

在Web管理页面中添加登录凭证
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加之后的效果图:
在这里插入图片描述

三、添加设备

​ **添加设备通过之前添加的登陆凭证以及设备的管理IP地址进行设备管理。在之前,需要把设备做到全互联,在这里我用的是OSPF进行设备互联。**如果管理失败,那么检查登陆凭证与管理IP地址的路由是否可达。
在这里插入图片描述
在这里插入图片描述

添加完成之后可以查看设备的状态(如下图)

在下图中,Collection Status有两种不同的状态:ManagedUnsupported。官方也没有解释两种状态,如果是有知道的朋友可以联系。但是据我判断Managed状态才是正常的。
在这里插入图片描述
在上述中,对于Unsupported状态的设备,在设备详细页面中,可以看到对应的信息,如下图:
在这里插入图片描述

添加成功之后在主页就可以看到设备设备状态:主机网络设备

在这里插入图片描述
在这里插入图片描述

四、通过Python进行简单的网络管理

在上面对此步骤进行了铺垫,我们可以在控制器页面找到对应的API文档,API文档位于控制器页面的API Docs。SDN控制器提供了REST API来进行访问。这里REST API只是通过REST标准提供的访问方式。不需要纠结。以后笔者给大家出一个REST API的笔记。无外乎就是getpostdelete等访问方式。在下面我通过Pycharm来进行操作。大家可以自己选择python的IDE。电脑必须安装Python3以及Python的requests库
在这里插入图片描述
以下是官方提供的demo:

​ 不管是通过API做什么操作,获取网络设备信息等,都需要登陆获取token,以保障访问者身份的合法性。

import json
import requests

def main():
    #获取Token
    securityUrl = "http://localhost:58001/api/v1/ticket"
    securityData = json.dumps({"username": "admin", "password": "admin"})
    securityHeader = {'Content-type': 'application/json'}
    r = requests.post(securityUrl, data=securityData, headers=securityHeader)
    print(r.text)
if __name__ == "__main__":
    main()
securityUrl = "http://localhost:58001/api/v1/ticket"
securityData = json.dumps({"username": "admin", "password": "admin"})

http://localhost:58001是自己Web访问的地址,每个人怎样访问的通过这个地址调用API。在加上/api/v1/ticket

securityData是一个用户名、密码的JSON数据,通过POST请求将JSON发送到服务器。以下是访问图。

上述代码执行结果:

serviceTicket:是SDN控制器返回的token,如果用户名密码提供的不正确,则不能正确返回。

{
    "response": {
        "idleTimeout": 900,
        "serviceTicket": "NC-14-45f8c34ac99b4b8c9617-nbi",
        "sessionTimeout": 3600
    },
    "version": "1.0"
}

错误的返回结果如下:

{
    "response": {
        "detail": "Bad credentials",
        "errorCode": "TICKET_BAD_USER",
        "message": "Invalid user credentials. Provide valid user credentials."
    },
    "version": "1.0"
}
我们通过官方提供的API来对查看网络设备信息。

在每次操作时,我们需要在请求头中携带获取到的token。官方提供的方式如下:

在每次的请求头中添加x-auth-token字段。值为http://localhost:58001/api/v1/ticket获取到的token。

apiAccessHeader = {}
apiAccessHeader['content-type'] = 'application/json'
apiAccessHeader['x-auth-token'] = token
r = requests.get('http://localhost:58000/api/v1/network-device', headers=apiAccessHeader)
以下是根据API文档进行操作:

获取主机

import json
import requests

def main():
    # 获取token
    securityUrl = "http://localhost:58001/api/v1/ticket"
    securityData = json.dumps({"username": "admin", "password": "admin"})
    securityHeader = {'Content-type': 'application/json'}
    r = requests.post(securityUrl, data=securityData, headers=securityHeader)
    token = r.json()["response"]["serviceTicket"]
    # 获取主机
    apiAccessHeader = {}
    apiAccessHeader['content-type'] = 'application/json'
    apiAccessHeader['x-auth-token'] = token
    r = requests.get('http://localhost:58001/api/v1/host', headers=apiAccessHeader);
    print(json.dumps(r.json(), indent=2))
if __name__ == "__main__":
    main()

放回结果

{
  "response": [
    {
      "connectedAPMacAddress": "",
      "connectedAPName": "",
      "connectedInterfaceName": "GigabitEthernet1/0/2",
      "connectedNetworkDeviceIpAddress": "2.2.2.2",
      "connectedNetworkDeviceName": "Switch",
      "hostIp": "192.168.100.100",
      "hostMac": "00D0.5895.E815",
      "hostName": "PC0",
      "hostType": "Pc",
      "id": "PTT0810MH0S-uuid",
      "lastUpdated": "2023-12-14 19:02:46",
      "pingStatus": "SUCCESS"
    }
  ],
  "version": "1.0"
}

通过IP地址获取网络设备

import json
import requests


def main():
    # 获取token
    securityUrl = "http://localhost:58001/api/v1/ticket"
    securityData = json.dumps({"username": "admin", "password": "admin"})
    securityHeader = {'Content-type': 'application/json'}
    r = requests.post(securityUrl, data=securityData, headers=securityHeader)
    token = r.json()["response"]["serviceTicket"]
    # 通过IP地址获取网络设备
    apiAccessHeader = {}
    apiAccessHeader['content-type'] = 'application/json'
    apiAccessHeader['x-auth-token'] = token
    r = requests.get('http://localhost:58001/api/v1/network-device/ip-address/1.1.1.1', headers=apiAccessHeader);
    print(json.dumps(r.json(), indent=2))

if __name__ == "__main__":
    main()

返回结果:

{
    "collectionStatus": "Unsupported",
    "errorDescription": "",
    "globalCredentialId": "2016d592-7451-4828-80ea-dc812718334b",
    "id": "FTX1524TRW4-uuid",
    "interfaceCount": "5",
    "inventoryStatusDetail": "Unsupported",
    "ipAddresses": [
        "10.0.0.1",
        "192.168.1.1",
        "10.0.1.1"
    ],
    "lastUpdateTime": "13",
    "lastUpdated": "2023-12-14 19:06:46",
    "macAddress": "00E0.B0BA.ED72",
    "managementIpAddress": "1.1.1.1",
    "platformId": "",
    "productId": "",
    "reachabilityFailureReason": "NOT_VALIDATED",
    "reachabilityStatus": "Reachable",
    "serialNumber": "",
    "type": "",
    "upTime": ""
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值