网络自动化[1] - 使用华为模拟器eNSP搭建网络自动化场景

675 阅读4分钟

eNSP安装

eNSP的安装过程省略,才接触eNSP时,安装会遇到许多问题,这里给出我目前能够正常使用的相关软件版本:

  • eNSP 1.3.00.100 V100R003C00 SPC100 (目前eNSP官网已经不再进行更新)
  • VirtualBox Version 5.2.40 r137108
  • Npcap 1.10
  • WinPcap 4.1.3

eNSP第一次新建拓扑前,记得先注册设备:

  • 右上角找到“菜单‘,然后选中”工具“,单击”注册设备“
  • 勾选所有设备,然后点击”注册“

使用VirtualBox安装自动化Ubuntu 18.04 | 20.04

  • 打开VirtualBox,在右上角单击”New“

  • 分配内存大小 — 根据电脑配置,为虚拟机分配内存,1G或2G都行(当然笔者宿主机内存较大,选择了4G),然后Next继续
  • 选择VM,选中”Create a virtual hard disk now“,单击”Create“
  • 后面的几步都选择默认勾选 — ”VDI“ + ”Dynamic allocated“
  • 分配存储大小,建议配置15G左右,分配太小可能会无法安装,单击”Create“后退回到主界面
  • 这时选中你刚创建的ubuntu主机,然后单击上方菜单的”Start“运行
  • 此时弹出运行界面,你需要选择你要安装的镜像的路径
  • 后续就会进入ubuntu的安装步骤(此处省略ubuntu后续安装步骤)

配置Ubuntu远程客户端

这里以ubuntu 18.04为例

  • 重新设置ubuntu 18.04的国内镜像源并刷新列表进行更新

    【Ubuntu】Ubuntu 18.04 LTS 更换国内源--解决终端下载速度慢的问题

  • 安装Python和相关依赖

    apt-get install python -y
    apt-get install build-essential libssl-dev libffi-dev -y
    apt-get install python-pip -y
    apt-get install python3-pip -y
    
  • 安装paramiko和netmiko

    pip install cryptography
    pip install paramiko
    pip install netmiko
    pip3 install paramiko
    pip3 install netmiko
    

使用Telnet来配置S3700

  • 设置Cloud

端口增加完成后,在端口映射入端口和出端口选择不同端口(顺序不影响),然后勾选双向通道,单击”增加“,此时端口映射表会增加一对端口。

  • Cloud设置完毕后,Cloud可以与SW1进行连接了,下图为测试拓扑

  • 在SW1上配置telnet用户与密码(默认开启telnet)

    aaa
     local-user sht1 password cipher Huawei
     local-user sht1 privilege level 15
     local-user sht1 service-type telnet
    #
    interface Vlanif1
     ip address 192.168.50.1 255.255.255.0
    #
    user-interface vty 0 4
     authentication-mode aaa
     user privilege level 15
     protocol inbound all
    
  • 在Ubuntu 18.04上配置telent01.py脚本用于批量创建vlan

    • Python 3.6 脚本测试

      #!/usr/bin/env python3
      import getpass
      import telnetlib
      
      HOST = "192.168.50.1"
      user = "sht1"
      password = getpass.getpass()
      
      tn = telnetlib.Telnet(HOST)
      
      tn.read_until(b"Username:")
      tn.write(user.encode('ascii') + b"\n")
      if password:
          tn.read_until(b"Password:")
          tn.write(password.encode('ascii') + b"\n")
      
      tn.write(b"system\n")
      tn.write(b"vlan 2\n")
      tn.write(b"quit\n")
      tn.write(b"vlan 3\n")
      tn.write(b"quit\n")
      tn.write(b"vlan 4\n")
      tn.write(b"quit\n")
      tn.write(b"vlan 5\n")
      tn.write(b"quit\n")
      tn.write(b"return\n")
      tn.write(b"quit\n")
      
      print(tn.read_all().decode('ascii'))
      
    • Python 2.7 脚本测试

      #!/usr/bin/env python
      import getpass
      import time
      import telnetlib
      
      HOST = "192.168.50.1"
      user = "sht1"
      password = getpass.getpass()
      
      tn = telnetlib.Telnet(HOST)
      
      tn.read_until("Username:")
      tn.write(user + "\n")
      if password:
          tn.read_until("Password:")
          tn.write(password + "\n")
      
      tn.write("system\n")
      tn.write("vlan 6\n")
      tn.write("q\n")
      tn.write("vlan 7\n")
      tn.write("q\n")
      tn.write("vlan 8\n")
      tn.write("q\n")
      tn.write("vlan 9\n")
      tn.write("q\n")
      tn.write("vlan 10\n")
      tn.write("q\n")
      tn.write("return\n")
      tn.write("q\n")
      
      print tn.read_all()
      
  • 验证脚本配置是否在SW1上生效

    [SW1]display vlan 
    The total number of vlans is : 10
    --------------------------------------------------------------------------------
    U: Up;         D: Down;         TG: Tagged;         UT: Untagged;
    MP: Vlan-mapping;               ST: Vlan-stacking;
    #: ProtocolTransparent-vlan;    *: Management-vlan;
    --------------------------------------------------------------------------------
    
    VID  Type    Ports                                                          
    --------------------------------------------------------------------------------
    1    common  UT:Eth0/0/1(U)     Eth0/0/2(D)     Eth0/0/3(D)     Eth0/0/4(D)     
                    Eth0/0/5(D)     Eth0/0/6(D)     Eth0/0/7(D)     Eth0/0/8(D)     
                    Eth0/0/9(D)     Eth0/0/10(D)    Eth0/0/11(D)    Eth0/0/12(D)    
                    Eth0/0/13(D)    Eth0/0/14(D)    Eth0/0/15(D)    Eth0/0/16(D)    
                    Eth0/0/17(D)    Eth0/0/18(D)    Eth0/0/19(D)    Eth0/0/20(D)    
                    Eth0/0/21(D)    Eth0/0/22(D)    GE0/0/1(D)      GE0/0/2(D)      
    
    2    common  
    3    common  
    4    common  
    5    common  
    6    common  
    7    common  
    8    common  
    9    common  
    10   common  
    
    VID  Status  Property      MAC-LRN Statistics Description      
    --------------------------------------------------------------------------------
    
    1    enable  default       enable  disable    VLAN 0001                         
    2    enable  default       enable  disable    VLAN 0002                         
    3    enable  default       enable  disable    VLAN 0003                         
    4    enable  default       enable  disable    VLAN 0004                         
    5    enable  default       enable  disable    VLAN 0005                         
    6    enable  default       enable  disable    VLAN 0006                         
    7    enable  default       enable  disable    VLAN 0007                         
    8    enable  default       enable  disable    VLAN 0008                         
    9    enable  default       enable  disable    VLAN 0009                         
    10   enable  default       enable  disable    VLAN 0010
    
  • 虽然配置是完成了,但是在运行脚本的过程中也遇到了问题,目前该报错还没有解决(可以用异常处理使得报错不显示,正常对设备配置),希望有大佬能够帮助解决

    下面是报错:

    Traceback (most recent call last):
      File "./telnet01.py", line 29, in <module>
        print(tn.read_all().decode('ascii'))
      File "/usr/lib/python3.6/telnetlib.py", line 333, in read_all
        self.fill_rawq()
      File "/usr/lib/python3.6/telnetlib.py", line 524, in fill_rawq
        buf = self.sock.recv(65535)
    ConnectionResetError: [Errno 104] Connection reset by peer
    
    Traceback (most recent call last):
      File "./telnet02.py", line 34, in <module>
        print tn.read_all()
      File "/usr/lib/python2.7/telnetlib.py", line 385, in read_all
        self.fill_rawq()
      File "/usr/lib/python2.7/telnetlib.py", line 576, in fill_rawq
        buf = self.sock.recv(65535)
    socket.error: [Errno 104] Connection reset by peer
    

写在最后

文章中可能存在需要错误,部分内容也含有笔者自己的观点,希望大佬们能够多多指正,也欢迎各位积极讨论。