분류없음2017.03.08 12:36

안녕하세요.


이번 포스팅은 간단한 동영상으로 올려봅니다.


앞으로 포스팅을 위해서 준비 중인(?) ACI와 관련한 간단한 동영상입니다.


ACI에서 EPG를 생성하고, Contract을 생성하고, Contract을 맺어주기 위한 작업을 JSON을 통해서 진행을 하는 내용입니다.

다만, JSON을 생성하는 것을 EPG와 Contract를 변수로 하여,

Ansible을 통해서 변수로 지정된 EPG와 Contract을 생성 및 연결하는 JSON을 생성하고 이를 통해서 ACI에 적용합니다.

JSON을 수동으로 변경해서 만드는 것에 비해서 잘못 수정할 부분이나,

보다 많은 부분에 적용해야 하는 경우가 발생하는 경우에 조금 유용하게 사용할 수 있지 않을까 싶습니다.

물론 이 방법 이외에도 추가적으로 보다 유연하고 편리하게 사용하게 사용하기 위한 방법들에 대해서는 고민 중입니다.

 

 






Posted by 네떡지기
분류없음2016.12.23 08:50

 

안녕하세요.

네떡지기입니다.


본 블로그에서 나름 오랜(?)기간 포스팅 했었던.. 시리즈인..

Nexus 기초 따라잡기에 대한 PDF판을 공개합니다.


아무래도 시간이 좀 지난거라서 달라진 부분들도  있을꺼고,

미처 잘못 작성된 것을 수정하지 못한 부분들도 있을 수 있습니다.


하지만, 커다란 맥락에서는 큰 부분이 달라지지는 않았으리라.. 생각하고..

달라지는 부분들도 기존의 것들을 알고 있어야 할 것이라고 생각하기 때문에...


2016년 크리스마스를 앞두고... PDF판으로 공개를 합니다.

표지,간지를 포함하여.. 무려. 192페이지에 달하는...


누군가에게는... 도움이 되기를 바라며... ^^

 

p.s. 2016년에는.. 기존의 포스팅과 더불어... 또 다른.. 장기 시리즈가 시작되지 않을까? 싶습니다..

 

 

 

 

Nexus_기초따라잡기(공개).z01

Nexus_기초따라잡기(공개).z02

Nexus_기초따라잡기(공개).zip


Posted by 네떡지기
DevOps/Automation2015.03.23 21:24

 


 

Automation for Networker로 다시 또, 오랜만에 포스팅을 하게 됩니다.

이번 포스팅은 Automation Tool인 Ansible을 활용하여 Cisco 장비를 제어하는 예제입니다.

기본 Ansible을 활용하여 Cisco 장비를 제어하는 것은 NX-API를 사용하는 데, NX-API는 제한적으로만 장비에서 지원되기 때문에

아직까지는 사용하는 데 있어서 제한이 있습니다.

이를 위해 SNMP를 사용하여 장비를 제어할 수 있도록 해주는 라이브러리를 사용하여 Ansbile로 시스코 장비를 다뤄봅니다.

 

원래 지난 Automation for Networker 5에 이어서 Arista 장비에 대한 예제를 다루려고 했으나,

네트워크 타임즈에 2월호부터 기고 중인 Programmability for Networker의 4월호(드디어 마지막. ㅠㅠ)의 내용들로 이루어지기

때문에 Arista 장비의 포스팅은 4월달에 포스팅 예정입니다. ^^;

 



Automation Tool인 Ansible을 활용한 Cisco IOS 장비 제어


 

Cisco 장비의 경우에는 Nexus에서 NX-API를 활용하여 Ansible을 통한 장비 제어가 가능하다.

하지만 NX-API를 사용할 수 없는 일반 IOS에서도 SNMP를 사용하여 Cisco 장비를 제어할 수 있도록 제공해주는 라이브러리가 있다.

Git-hub에서 아래의 링크에서 라이브러리를 다운 받으면, 시스코 장비에서 SNMP 설정만으로 Ansible을 통한 제어가 가능하다.

물론 현재는 Alpha Version의 코드이기 때문에 제약사항과 정상적으로 구동이 되지 않는 점이 있기는 하다.

하지만 추가적으로 개선이 될 부분이기도 하며, 또한 코드를 직접 개선하여 사용도 가능하다.  

 

※ 라이브러리 다운받기  https://github.com/networklore/ansible-cisco-snmp

 

 

 

 

그럼 ansible cisco snmp 라이브러리로 실제 시스코 장비를 제어해보자.

우선 시스코 장비에 Ansible을 사용해서 제어할 SNMP의 설정이 필요로 하다.

 

Cisco 장비 설정 (SNMP v2 기준)

  snmp-server community zigisnmp RW

 

단, 시스코 장비에는 기존에 설정하던, 단 한 줄의 snmp 설정만 해주면 된다.

이제 Ansible 서버에서 Playbook을 만들어 보자.

여기에서는 2개의 에제를 다룰 것이며, 각 에제는 별도의 라이브러리를 사용하여 시스코 장비를 제어하게 된다.

 

 


 

 

예제 1 : cisco_snmp_interfae 라이브러리 사용하기 


 

첫 번째 예제는 cisco_snmp_interface를 활용한 Playbook이다.

snmp v2를 사용하기 때문에, 버전은 2c로 지정을 하고 community 값은 시스코 장비에서 설정한 값을 지정한다.

그리고 interface를 제어하기 위하여 어떤 Interface를 제어할지 인터페이스를 지정한다.

원하는 description을 넣을 수 있으며, Interface 상태를 Admin Up/Down을 할 수도 있다.

 


그럼 이제 해당 Playbook을 Ansible 서버에서 실행해보자..

아래와 같이 Playbook을 실행하면

changed=1로 표기되면서 정상적으로 task가 수행되어 변경되었다는 것을 알 수 있다.

 

이제 실제 장비에서 원하는 설정이 되었는지 확인한다.

아래의 sh int desc은 Ansible에서 Playbook을 실행하기 전과 후의 상태이다.

G0/2의 상태가 up/up 이고, description이 없었다가

이후에 G0/2의 상태가 admin down / down으로 변경되고 Interface의 description가 생긴 것을 볼 수 있다.

실제 장비의 로그에서도 snmp에 의해서 설정이 변경된 걸 알 수 있다. (10.1.1.100은 Ansible 서버이다)

 

 

 


예제 2 : cisco_snmp_vlan 라이브러리 사용하기 


첫 번째 예제가 Interface 라이브러리를 사용한 것에 비해, 두 번째는 vlan 라이브러리를 사용해서 제어해 본다.

Playbook 파일을 보면, 나머지는 거의 동일하지만, vlan 관련된 부분만 다르다.

여기서 다루는 2번째 예제는 2개의 task를 수행하게 된다.

 

첫 번째는 Task는 VLAN을 생성한다.

생성하고자 하는 vlan_id와 vlan_name을 지정한다. 그리고 상태(state)에 Present로 지정하게 되면 기존에 있으면

원하는 설정을 변경할 수 있고, 기존에 없던 vlan이면 새로운 vlan을 생성하게 된다.

 

두 번째 Task는 VLAN을 삭제한다.

삭제하고자 하는 vlan_id를 지정하고 상태(state)를 absent로 지정하면 해당 vlan_id는 삭제가 된다.

 

 

 

마찬가지로 Playbook을 실행하면 각각 2개의 Task가 정상적으로 changed 되었다고 표기된 것을 볼 수 있다.

 

 

 

아래는 장비에서 해당 결과를 확인하는 화면이다. 

먼저 Playbook을 실행하기 전에 5번 VLAN이 있는 것을 확인할 수 있다.

 

 

  

Playbook을 실행하게 되면,  5번 VLAN 삭제되고, VLAN 20번이 ZIGI_VLAN이라는 이름으로 생성되어 있다.


 

 

Posted by 네떡지기
DevOps/Programmability2015.02.17 20:35

NX-API

 

기존의 Python for Networker라는 주제로 포스팅하던 것을, 주제를 넓혀보고자..

Programmability for Networker로 이름을 변경하고 지속해서 시작합니다. ^^;

이번 포스팅은 Cisco의 Programmability를 지원하는 NX-API에 대한 포스팅입니다.  


 

NX-API  - Cisco Programmability

 

◈ NX-API

    - HTTP/HTTPS의 RPC 기반의 API 기능 수행

    - 'show', 'configuration', 'Linux Bash' 지원

    - JSON-RPC를 지원

    - Cisco Nexus 9000 platform 적용

 

 

◈ NX-API 동작

    - HTTP/HTTPS로 전송되며, 해당 CLI는 HTTP/HTTPS의 POST body로 encode된다.

    - Nexus 장비에서는 이러한 NX-API를 위해서 Nginx HTTP Server를 사용한다.

    - Nginx와 모든 하위 Process는 Linux cgroup의 메모리 제한 값을 초과하면, Process가 재시작 되도록 하여, 본 장비 리소스를 보호한다.

 

 

◈ NX-API 명령 포맷

    - Nexus 9000의 향상된 NX-OS CLI

    -  XML 출력,JSON 형태 출력

 

 

◈ NX-API 기능 활성화

    - NX-API feature 활성화 필요 ( Default : Disable)

NX-OS#(config)# feature nxapi

 

 

◈ NX-API Sandbox

    - HTTP/HTTPS를 사용하여, 사용자가 Cli 명령을 특정 Command Type, Output Type을 지정해서 사용할 수 있는 웹기반 인터페이스

    - NX-API Feature를 활성화 후, nxapi sandbox를 사용 할 수 있다.

NX-OS#(config)# nxapi sandbox

     - 접속 방법 : Web 브라우저에서 http://mgmt-ip  로 접속

 

 

◈ NX-API Request Element

    ○ Input

         - 1개 이상의 명령어 입력 가능. (단, 동일한 Messaage Type이어야 함 : Show, Configuration, bash)

         - Show와 Conf의 경우에는 다수의 명령어 입력 시, ';'(세미콜론)을 사용하며, 명령어와 세미콜론 사이는 1칸의 공백 필요

              ex) show interface brief ; show version  or  interface eth2/1 ; switchport ; no shut

         - Bash의 경우에는 다수의 명령어 입력 시, 마찬가지로 ';'(세미콜론)을 사용하지만, 명령어와 세미콜론 사이의 공백이 없어야 함.

             ex) cd /bootflash;mkdir zigi_dir

     

 

    ○ Type

        - cli_show : 구조화 된 결과값을 나타냄. 만약 XML을 지원하지 않는 명령 입력 시에는 error 메시지를 리턴

                              즉, 특정 명령어에 대해서만 구조화된 결과값을 나타내도록 지원. 

        - cli_show_ascii : ASCII 값으로 결과 출력.

        - cli_conf : Configuraion 명령 사용 시 사용

        - bash : Bash 명령 사용 ( NX-API에서는 non-interacitve Bash 명령을 지원)

        * 최대 10개의 Show 명령을 동시에 지원. (10개 이상 입력 시, 11번째부터는 무시 됨.)

        * ASCII의 경우에는 '|' (Pipe) 가 지원 됨. (XML의 경우에는 미 지원)

 

    ○ output_format 

        -  XML / JSON 포맷을 지원

        -  N9K는 XML을 지원하며, JSON은 XML을 전환하여 결과 값을 만든다.

   

 

◈ NX-API Response Element

     ○ version

         - NX-API Version (현재 1.0 / dCloud에서는 0.1 Version 지원)

     ○ type

         - 명령 실행 타입 (cli_show, cli_show_ascii, cli_conf, bash)

     ○ sid

         - 응답에 대한 Session ID.

         - 응답메시지가 chunked인 경우에만 유효함.

    ○ outputs

         - 요청한 전체 명령에 대한 출력 값을 감싸고 있는 Tag

         - cli_show, cli_show_ascii 의 경우에 다수의 명령어를 요청한 경우 각 개별 명령은 output tag가 붙는다.

    ○ output

         - 요청한 개별 명령에 대한 출력 값을 감싸고 있는 Tag

    ○ intput

         - 요청한 명령어

    ○ body

         - 요청한 명령어에 대한 응답

    ○ msg

         - 요청에 대한 응답의 처리 결과 메세지. code Element의 내용으로 확인 가능.

    ○ code

         - 요청에 의한 응답의 결과에 따른 Code번호.

         - NX-API에서는 표준 HTTP의 Status Code값을 사용한다.  

 

[ NX-API SandBox 실행화면 ]

 

 

◈ NX-API Sandbox 화면 구성

     ○ 상단 화면

 

 

         - 실행행하고자 하는 Command 와 Meassage format, Command Type을 지정할 수 있다.

            - POST 버튼은 위에서 지정한 Command와 Format/Type에 맞춰서 Request 코드가 만들어면서, Request가 이뤄진다.

 

    ○ 하단 좌측

 

 

 

 

            - 상단화면에서 지정한 내용에 따라서 만들어진 Request 내용을 출력

            - Python 버튼을 누르면, 해당 Request를 사용 할 수 있는 Python 코드로 생성 됨.

 

      ○ 하단 우측

 

 

         - 상단화면에서 요청한 내용에 대한 결과 값을 출력.

 

 

 

 NX-API Sandbox 실행 예제 -  JSON - cli_show

    

 

 

 NX-API Sandbox 실행 예제 -  JSON - bash

 

 

 NX-API Sandbox 실행 예제  -  Request를 Python Code로 변경

 

 

◈ NX-API Response Code

 

NX-API Response

Code

Message

SUCCESS

200

Success.      

CUST_OUTPUT_PIPED

204

Output is piped elsewhere due to request.

BASH_CMD_ERR

400

Input Bash command error.   

CHUNK_ALLOW_ONE_CMD_ERR

400

Chunking only allowed to one command. 

CLI_CLIENT_ERR

400

CLI execution error.    

CLI_CMD_ERR

400

Input CLI command error.   

IN_MSG_ERR

400

Request message is invalid.   

NO_INPUT_CMD_ERR

400

No input command.    

PERM_DENY_ERR

401

Permission denied.     

CONF_NOT_ALLOW_SHOW_ERR

405

Configuration mode does not allow show .

SHOW_NOT_ALLOW_CONF_ERR

405

Show mode does not allow configuration. 

EXCEED_MAX_SHOW_ERR

413

Maximum number of consecutive show
commands exceeded. The maximum is 10.

MSG_SIZE_LARGE_ERR

413

Response size too large.   

BACKEND_ERR

500

Backend processing error.    

FILE_OPER_ERR

500

System internal file operation error.  

LIBXML_NS_ERR

500

System internal LIBXML NS error.  

LIBXML_PARSE_ERR

500

System internal LIBXML parse error.  

LIBXML_PATH_CTX_ERR

500

System internal LIBXML path context error. 

MEM_ALLOC_ERR

500

System internal memory allocation error.  

USER_NOT_FOUND_ERR

500

User not found from input or cache.

XML_TO_JSON_CONVERT_ERR

500

XML to JSON conversion error.  

BASH_CMD_NOT_SUPPORTED_ERR

501

Bash command not supported.   

CHUNK_ALLOW_XML_ONLY_ERR

501

Chunking allows only XML output.

JSON_NOT_SUPPORTED_ERR

501

JSON not supported due to large amount of output.

MSG_TYPE_UNSUPPORTED_ERR

501

Message type not supported.   

PIPE_OUTPUT_NOT_SUPPORTED_ERR

501

Pipe operation not supported.   

PIPE_XML_NOT_ALLOWED_IN_INPUT

501

Pipe XML is not allowed in input.

RESP_BIG_JSON_NOT_ALLOWED_ERR

501

Response has large amount of output. JSON not
supported.

STRUCT_NOT_SUPPORTED_ERR

501

Structured output unsupported.    

 

 

※ 참고

http://www.google.co.kr/url?url=http://www.jedelman.com/home/introduction-to-using-cisco-nx-api&rct=j&frm=1&q=&esrc=s&sa=U&ei=R2HhVIi2Ioqa8QXqtYAw&ved=0CDMQFjAF&usg=AFQjCNE6Udq_iqse1vYQpq12BtIIiKVOXA

http://keepingitclassless.net/2014/02/cisco-aci-nexus-9000-nxapi/

http://jeffostermiller.blogspot.kr/2015/01/my-first-python-script.html#!/2015/01/my-first-python-script.html

 

Posted by 네떡지기
분류없음2015.01.26 18:39

Nexus 7000 6.2(8) Bug Issue 공유 

 

Nexus 7000 운영 중, 서버쪽에서 Polling Target IP를 중간 중간 놓치는 지속적으로 놓치는 이슈가 있었습니다.

확인해보니, Nexus 7000에서의 Mac-Address Table이 지속적으로 갱신되고 있었습니다.

Mac-Address  Table이 계속 갱신되면서, Mac-Address의 수량도 계속 오르락 내리락을 반복하였습니다.

 

이런 저런 내용들을 확인해보다 보니, 아래와 같이 TCN이 지속적으로 발생하여 Mac-Address Table이 갱신됨을 확인하였습니다.

 

Nexus# sh spanning-tree detail | inc exec|from|occur

VLAN0100 is executing the rstp compatible Spanning Tree protocol
  Number of topology changes 77117 last change occurred 0:00:01 ago
          from port-channel1
 VLAN0101 is executing the rstp compatible Spanning Tree protocol
  Number of topology changes 77203 last change occurred 0:00:01 ago
          from port-channel1
 VLAN0102 is executing the rstp compatible Spanning Tree protocol
  Number of topology changes 12746 last change occurred 0:00:00 ago
          from port-channel1
 VLAN0103 is executing the rstp compatible Spanning Tree protocol
  Number of topology changes 63911 last change occurred 0:00:01 ago
          from port-channel1

 

계속해서 TCN에 의해 지속적으로 Mac-Address Table이 갱신됩니다.

 

결론만 얘기하자면, Nexus 7000시리즈 6.2(8)에서의 OS Bug Issue였습니다.


Bug에 대한 정보는 아래와 같습니다.


DDTS No(s): 

CSCuo80937
Headline: Nexus 7000 Stuck Sending TCNs Every 35 Seconds

 

Maintenance DDTS [These are defects that did not cause this advisory, however fixes are included in the solution]:


100일 이상 Uptime 시에 해당 이슈가 발생 가능한 OS Bug로, 2014년 6월에 확인되었다고 합니다.

해당 버그는 6.2(8)a 버전에서 해결되었다고 합니다. 


동일 버전을 사용하시는 분들은 참고하시면 될 것 같습니다. 

 

 

Posted by 네떡지기
DevOps/Programmability2015.01.10 13:22

OnePK 예제

 


지난 포스팅에 이어서 Python을 사용한 OnePK 예제를 다뤄봅니다.

간략한 예제를 통해서, OnePK를 어떻게 사용할 수 있는지 알아보겠습니다.


 

 

○ OnePK 두 번째 예제

   - Network Element의 Interface 정보를 가져와서 출력해보는 예제입니다

   - Ethernet Type의 Interface 정보를 가져오고, 해당 Interface의 Description을 출력합니다

 

   ◆ 실행결과

 

 

   ◆ 소스코드

  

   - 기본 코드는 지난 포스팅인 Python for Networker Part 14(OnePK3)을 참고해주시면 됩니다.

   - Interface를 정보를 가져오기 위해서 OnePK에서 제공하는 Package중에, Interface라는 Package를 사용합니다.

   - 여기서는 NetworkInterface와 InterfaceFilter라는 Class를 사용합니다.

   - 현재 Element(Network Device)의 Interface 정보를 가져오기 위해서는 get_interface_list 메서드를 사용하게 됩니다.

   - get_interface_list 메서드를 사용하기 위해서는 InterfaceFilter를 지정해줘야 합니다

     InterfaceFilter를 지정하기 위해서, InterfaceFilter에 대한 객체를 생성하는 데

     InterfaceFilter의 객체 생성 시에는 NetworkInterface의 InterfaceTypes을 선택해야 합니다. (Default는 ONEP_IF_TYPE_ANY)

    - 코드 상에서 보면, InterfaceTypes를 사용하기 위해서 NetworkInterface Class의 InterfaceTypes라는 enum 멤버를

      intType이라는 변수에 할당하고, intType에서 Ethernet Type을 지정해서, intfilter라는 InterfaceFilter 객체를 생성합니다

      intfilter를 이용해서 원하는 Interface 리스트 정보를 가져옵니다. 

    - LIST형태로 리턴받은 NetworkInterface에서 하나씩 객체를 가져와서 Interface이름과 description을 출력한다.

    - descritpion의 경우에는 get_config() 메서드를 사용하여, InterfaceConfig 를 리턴받아서, InterfaceConfig의 메서드를 사용한다.

  

 

○ OnePK 두 번째 예제 변형-1

   - 위에서 출력한 Interface 정보를 보면, 인터페이스가 순번대로 반환되지 않기 때문에 0번 인터페이스부터 7번까지 차례대로

     출력되지 않는다.

   - 이를 해결하기 위해서 다음과 같이 코드를 한 줄 삽입하여 정렬을 하게 되면 아래의 두번째 예제 변형의 결과값처럼 차례대로

     인터페이스 정보를 출력할 수 있다.

  

 sortInt =  sorted(myInt,key=lambda intf: intf.name)

 

   ◆ 실행결과

 

 

○ OnPK 두 번째 예제 변형 -2

   - Description 이외에 추가적으로 필요한 정보는 OnePK 3번째 시간에서 얘기하였던, OnePK API에서 필요한 값을 찾아서,

    얼마든지 추가하여 정보를 알아낼 수 있다. 다음은 Interface의 상태가 Up/Down인지 확인한 내용까지 출력하였다.

 

   ◆ 실행결과

 

 

○ OnePK 세 번째 예제

   - OnePK 두 번째 예제처럼, Interface 정보를 가져올 수도 있지만, 실제 설정을 할 수 도 있다.

   - 다음은 Interface의 Description 정보를 변경한 간단한 예제이다. 

    

 

   - 위 코드의 실형결과를 보면, G0/6의 Interface의 Descritpion이 없다가 ex3.py를 실행하였을 때 설정이 되는 것을 확인하고

     다시 전체 인터페이스 정보를 출력해보면 G0/6에 정상적으로 Descritpion이 바뀐 것을 확인할 수 있다.

 

   ◆ 소스코드

         ※ 현재 포스팅된 Ex3의 예제는 결과값이 Sort를 다르게 써서, 조금 다릅니다. 변경 코드는 저녁에 이미지 교체 예정입니다

               이미지 교체 후에는 본 안내 메시지는 삭제할 예정입니다

 

   - NetwortInterface List 중에서 6번째(Index는 0부터 시작)의 Description을 set_description 메서드를 사용하여 변경합니다.

   - 변경 전/후로 Descritpion을 출력해서 결과를 확인합니다

 

 

◆ 이번 포스팅에서는 OnePK 2,3번째의 예제를 통해서 Network Element의 Interface에 대한 정보를 확인 및 설정하는 방법을

    알아 보았습니다.  2,3번 모두 기본 예제의 연장선상에 있으며 앞으로 다룰 예제들도 비슷할 것입니다

    결국 핵심은 예제가 아니라, 예제를 바탕으로 OnePK에서 제공하는 API를 잘 활용하는 방법과 아이디어가 될 것 같습니다.

 

 

Posted by 네떡지기
분류없음2014.12.16 01:17

   

 


이번 포스팅부터는 OnePK 예제를 다뤄봅니다.

본 포스팅의 예제는 원래 제목이기도 하지만, OnePK에서 지원하는 언어 중에 Python을 사용하여 진행하게 됩니다.

이번 포스팅에서는 예제를 하기 위한 다른 내용도 함께 들어가느라, 1개의 예제만 다루게 됩니다.


 

 

○ OnePK 첫 번째 예제

   - Network Element와 연결하여, 해당 Element의 정보를 가져오는 예제

 

 

  - 아래의 동영상과 같이 장비의 다양한 Element 정보를 가져올 수 있다.

 

 

  -  Source Code

 

 

  - Source Code를 보면, 매우 단순(?)합니다.

  - OnePK가 지원되는 Device와의 연결을 위해서 'IP address', 'username', 'password'가 필요로 하며,

    해당 정보를 가지고, 해당 Device에 대한 Handle을 갖는 Device라는 객체를 생성합니다.

  - 생성된 Device라는 객체에서 Connect() 메서드를 이용해서 해당 장비와 연결을 하게 됩니다.

  - 이후, elem이라는 Device의 Element 정보를 갖는 값을 이용해서 필요한 정보를 가져올 수 있게 됩니다.

  - 위의 코드만 보면, 내용을 정확히 몰라도 직관적으로 이해할 수 있을 정도로 단순합니다.

  - 제일 위에 import한 ZIGI_OnePK라는 Library를 이용해서 element에 대한 Device를 만들고 사용하는 데,

    ZIGI_OnePK는 OnePK를 사용하기 쉽게 도와주는 간단한 Library입니다.

  - 아래에서는 해당 Library에 대한 Code를 나타내고 있습니다.

 

 

 ZIGI-OnePK Library Source Code 

    - https://github.com/NetworkZIGI/OnePK

 

  - zigiElement 라는 Class와 PinningHandler라는 Class로 구성되어 있습니다.

  - zigiElement class에는 생성자 / tlsPinningConnect / Connect / DisConnet 메서드로 구성되어 있습니다.

  - OnePK 생성자에서는 접속하고자 하는 Device의 IP와 Username, Password, Pin File, Port를 입력하게 되어 있습니다.

  - OnePK는 Default로 15002를 사용하며, 다른 포트로 변경 가능합니다.

  - Pin File과 Pinning은 특정 Host가 WhiteList 기반의 TLS 인증을 하는 절차인데,

    Pin File은 Device에서 OnePK 설정을 하면 생성되는 Fingerprint 값과 Hash type, Device ID로 구성된 파일입니다.
    (실제 순서, Device ID, Hash type, Fingerprint)

    여기서는 TLS Pinning이라고 하는 TLS를 사용한 암호화 통신을 유지하며, 인증에 대한 부분만 Bypass하여 OnePK를 쉽게

    사용할 수 있는 방식으로 구성되어 있습니다.

  - 예제코드에서 다뤄지는 elem 변수는 OnePK API에서 제공되는 NetworkElement Class에 대한 객체이며,

    예제에서 다룬 속성 값들의 정보는 모두 NetworkElement Class에서 제공되는 속성 값이라고 볼 수 있습니다.

    즉, NetworkElement Class 내용을 보면 보다 많은 필요한 정보를 사용할 수 있습니다.

  - 이처럼 OnePK를 사용하기 위한 API 정보는 아래 그림과 같이 API 문서 페이지를 보면 모두 확인할 수 있습니다.

  - 초기 OnePK에서는 Vanilla TCP(일반적인 TCP 통신)를 사용하였으나,

    최신 OnePK(1.3), IOS (15.4)에서는 암호화되지 않은 통신은 Disable되고,  TLS를 사용하도록 하여 보안을 강화하였습니다.

 

 

 

 

   

 

○ OnePK Python API

https://developer.cisco.com/site/onepk/documents/api-reference/python/

 

 

 

 

 Device에서 OnePK 설정

 - OnePK 장비 설정       

ZIGI_DEVICE(config)# onep

ZIGI_DEVICE(config-onep)# transport type tls disable-remotecert-validation

 

 

 - OnePK 상태 확인

ZIGI_DEVICE#sh onep status
Status: enabled by: Config
Version: 1.2.1
Transport: tls; Status: running; Port: 15002; localcert: TP-self-signed-4294967295; client cert validation disabled
Certificate Fingerprint SHA1: 88DCF998 958884C2 1458D3A9 8637E244 A8A244E3
Transport: tipc; Status: disabled
Session Max Limit: 10
CPU Interval: 0 seconds
CPU Falling Threshold: 0%
CPU Rising Threshold: 0%
History Buffer: Enabled
History Buffer Purge: Oldest
History Buffer Size: 32768 bytes
History Syslog: Disabled
History Archived Session: 8
History Max Archive: 16
Trace buffer debugging level is info


Service Set: Base               State: Enabled     Version 1.2.1
Service Set: Vty                State: Disabled    Version 0.1.0
Service Set: Mediatrace         State: Disabled    Version 1.0.0

 

 

 - OnePK Session 상태 확인

ZIGI_DEVICE# sh onep session all
ID         Username State            ReconnectTimer ConnectTime                 ApplicationName
7075       zigi     Connected        0              Mon Dec 15 16:05:04.478     ZIGI-OnePK-APP

 

 

Posted by 네떡지기
분류없음2014.12.15 22:53

Python for Networker 13번째는 본래 의도와는 다르게 다시 조금 쉬어가는 포스팅입니다.

OnePK의 예제 코드를 다뤄보기 전의 Cisco OnePK에 대해서 조금 더 간단히 알아보는 내용입니다.

다음 포스팅부터 이제 실제 예제코드는 함께 다뤄질 예정입니다! ^^

또한 본 포스팅은 OnePK에 대한 소개이기 때문에 이론적인 부분에 있어서는 지속적으로 업데이트 할 예정입니다.

 


 

OnePK Introduce

   - 다양한 Cisco Device를 OnePK라는 Application Toolkit을 통해 기존 네트워크를 programmability하게 사용 가능하도록 함.

 

 

 

 

 - 기존 IOS ,OSd/XE, XR, NX-OS 모두 각각  onePK API를 지원하는 환경에서 다양한 언어(C, Java, Python)로 만들어진

   API를 통해서 통신하여 동작할 수 있도록 함.

 

 

 

 

 

OnePK Service Set

  

 

 

○ OnePK Hosting Option

     - OnePK는 아래와 같은 3가지 방식으로 동작할 수 있도록 지원 됨.

    ▷ Process Hosting

        - OnePK가 동작하기 위한 Module 형식의 Software 구조가 필요로 함. 

        - Latency와 Delay 매주 작음.

        - 해당 장비 내부에서 동작하기 때문에 자원을 공유함.

 

    ▷ Blade Hosting

        - OnePK가 동작하기 위한 Blade Hardware가 필요로 함.

        - Latency와 Delay가 비교적 작음.

        - 모든 Platform을 지원

 

    ▷ End-Poin(Node) Hosting

        - 별도의 Device를 사용

        - Latency와 Delay가 비교적 큼.

        - 모든 Platform을 지원

  

  

 

 

 

 

 

OnePK 지원 장비 

  

 - 현재 OnePK는 1.3 Version이며, 아래의 Hardware와 Software Version에서 동작한다. (2014년 8월 기준)

Device

Software

Cisco ASR 1000 & ISR 4400 Series Router

CSR 1000V Cloud Services Router

Cisco IOS XE 3.12.0S

Cisco ASR 9000 Series Aggregation Services Router

Cisco IOS XR 5.2.0

Cisco ISR G2

Cisco IOS Release 15.4(2)T

Cisco ME 3600X/24CX

Cisco IOS Release 15.4(3)S

 

 

 

OnePK Platform별 지원 Service Set 

 

 Service Set

ME3600X/24CX

ISR G2 

ISR 4400 

ASR 1000 

ASR 9000 

CSR 1000V 

Data Path 

 

Policy

Routing 

Element

Discovery

Utility

Developer

Location

 

 

 

MediaTrace
(PathTrace)

 

 

Identity

(SANET)

 

 

 

 

 

 

 

○ Language별 OnePK Service Set 지원

   - C언어는 모든 Service Set 지원

   - Java, Python은 Data Path를 제외한 모든 Service Set 지원

 

 

 

Posted by 네떡지기
분류없음2014.12.14 04:16

 


이번에는 Cisco OnePK에 대한 아주 간단한 소개와 앞으로 포스팅 하게 될 OnePK에 대한 예제 내용들입니다.

이번 포스팅에서는 OnePK로 할 수 있는 예제 결과에 대해서만 간략하게 보여드리고,

이후 포스팅부터는 OnePK에 대한 좀 더 기술적인 내용과 함께

이번 포스팅에 보여드린 예제에 대해서 코드와 함께 좀 더 자세히 살펴보도록 하겠습니다.

 


 

Cisco OnePK (Platform Kit)

 

 ○ OnePK 란?

     - Cisco Open Network Environment SDN 전략 요소

     - 개발/자동화/빠른 서비스 생성 등의 작업을 손쉽게 하게 도와주는 툴킷

     - 다양한 언어(C, Java, Python)를 사용할 수 있도록 API를 제공

     - API를 사용하여 비즈니스 요구에 따른 확장, 변경 등의 다양한 작업 가능.

 

 

 ※ Cisco OnePK Site : https://developer.cisco.com/site/onepk/index.gsp

 

 

 ○ OnePK를 사용한  예제 1

     - Network Element(Device)에 접속하여 다양한 속성값을 가져올 수 있다.

 

 

 

 ○ OnePK를 사용한  예제 2

     - Network Element(Device)의 정보를 가져와서 확인할 수 있다. 

- Network Element의 실제 Interface 정보 -

 

- OnePK를 사용하여, Interface 번호와 Description을 가져온 결과 -

 

 

 ○ OnePK를 사용한  예제 3

     - Network Element의 설정을 OnePK에서 제공하는 API를 통해서 변경 ( Interface Descpriton 변경)

 

 

 

 

 

 ○ OnePK를 사용한  예제 4

     - Network Element에 직접 CLI 명령을 통해서 정보 확인 및 Config 설정

 

- CLI 명령을 통해서, 현재 정보를 출력하고, Loopback Interface를 생성 후, 동일한 정보를 출력하여 확인 -

 

 

● Cisco OnePK에 대한 소개 정보는 솔라구구님 블로그를 참조하셔도 좋습니다.

   : http://sola99.tistory.com/208

 

 

Posted by 네떡지기
분류없음2014.11.20 12:33

 

 

 


안녕하세요.

이번 포스팅은 기존에 한 줄 알았는 데.. 안 한(?) 정리만 해놓고... 안한 포스팅인 듯 싶습니다.

어쩌면 다른 제목으로 했을지도 모르겠지만.. 최근에 추가한 내용들도 있어서 ^^

Nexus 시리즈로 포스팅해 봅니다. ^^


 

 

VLAN

• VDC별로 4094개의 VLAN이 지원되며, 전 시스템에서는 16,384개의 VLAN이 지원이 되지만, 특정 VLANSystem-Level 의해서

 사용되거나 예약되어 있기 때문에 사용이 불가하다.  이러한 Vlan을 확인하는 명령어는 다음과 같다. [ Show vlan internal usage ]

VLAN별의 특징은 다음과 같다

     - VLAN 1  : Default VLAN으로 수정 및 삭제가 불가

     - VLAN 2-1005  : Normal VLAN으로 생성, 사용, 수정, 삭제가 가능

     - VLAN 1006-4094  : Extended VLAN으로 생성, 명명(named), 사용이 가능하며, 항상 Active 상태이며,

                                        항상 Enable 상태로 shutdown이 불가하다.

VDC간의 VLAN은 독립적으로 운용되기 때문에 VLAN번호가 VDC간에 중복되어도 상관없다

• System-Level에서 예약된 VLAN 정보는 'show vlan internal usage' 명령으로 확인이 가능하다.

• System-Level에서 예약된 VLAN은 Nexus 7K와 Nexus 5K가 서로 다르다.

        - Nexus 7K : 128개                                 - Nexus 5K : 81개

 

  

 

NX-OS_7K# show vlan internal usage

   VLAN                                 DESCRIPTION

----------------                         ----------------------------------------------------

 3968-4031                         Multicast
4032-4035,4048-4059     Online Diagnostic
4036-4039,4060-4087     ERSPAN
4042                                     Satellite
3968-4095                          Current

 

 

NX-OS_5K# show vlan internal usage

   VLAN                                 DESCRIPTION

----------------                         ----------------------------------------------------

3968-4031                          Multicast
4032-4035                          Online Diagnostic
4036-4039                          ERSPAN
4042                                    Satellite
3968-4047,4094               Current

 

• System-Level에서 설정된  Reserved VLAN 번호를 변경하고자 할 때에는 'system vlan Start_Vlan_Number reserve' 로 변경한다.

     변경 시에는 지정한 Reserved VLAN의  첫 번째 번호부터, N7K는 연속된 128개의 VLAN이 Reserved VLAN으로 할당되고

     N5K는 연속된 80개의 VLAN과 4094가 Reserved VLAN으로 사용할 수 있게 된다.

 

Private VLAN 개념

• Private VLAN은 하나의 VLAN을 독립된 다수의 VLAN처럼 쓸 수 있게 해준다. 

  이는 Data CenterServer Farm 안의 동일 Subnet에서 각 서버들을 분리시켜주어  보안을 강화시켜준다.

 

Private VLAN 구분

• Primary VLAN 

     - Promiscuous Port :  Secondary VLAN이 외부와 통신하기 위한 목적으로 사용된다.

                                 Community / Isolated VLAN  를 포함한 모든 Port와 통신 가능.                           

• Secondary VLAN

     - Community VLAN : 동일한 Community VLANPromiscuous  Port와 통신이 가능하지만

                                 다른 Community VLAN이나, Isolated VLAN과는 통신 불가.

    - Isolated VLAN : 각각 독립적 port로 통신.  Isolated VLAN 간은 통신 불가., Promiscuous Port와는 통신이 가능.

 

 

Private VLAN 유용

IP Address 관리 측면

        : IP Address의 사용할 수 있는 범위가 많아짐. (불필요하게 VLAN을 많이 나누게 되면 그만큼 사용 가능한  IP범위가 줄어 )

        :  IP Subnet이 많아지면, latency 가 증가함.  (성능적인 측면?)

보안 측면

        :  Community VLAN은 동일한 Community VLAN 간에서만 통신 가능하고, Isolated는 독립적으로 통신이 되기 때문에

          L2에서의 보안을 강화 시켜준다.

 

Private VLAN 특징

private-vlan : Feature 활성화 필요.

• Private Vlan 동일한 SubnetGateway를 그대로 사용.

• Isolated VLAN 간에는 unicast, multicast, broadcast 모두 통신이 불가하다.

하나의 Primary VLAN에는 하나의 Isolated VLAN만 설정이 가능하다.

하나 Primary VLAN에 포함된,  Secondary VLAN은 하나 이상의 Promiscuous Port에 연결될 수 있으며,

    이는 Load-Balancing이나  redundancy 목적으로 사용이 된다.

• Secondary VLANPromiscuous Port와 연결되지 않으면, 해당 Secondary VLAN은 외부와 통신이 불가능하다.

• Private VLAN에서 Layer3 Switch traffic이 내부 VLAN과 통신하기 위해서 Primary VLANSVISecondaryVLAN

    관계 설정이 되야 한다.

SVISecondary VLAN으로 설정이 불가하다.

Ether-Channel이나 SPAN의 목적지 PortPrivate VLAN이 될 수 없다.

 

 

 

Private VLAN 설정

1. Private VLAN feature를 활성화한다.

2. Primary VLAN을 생성 및 설정한다.

3. 필요에 따라 Community VlanIsolated Vlan 을 설정한다.

4. Primary vlanSecondary Vlan을 관계를 설정한다.

5. Layer 2 Host Port 설정

6. Promiscuous Port 설정

7. Primary  VLANSVISecondary VLAN과의 관계 설정

 

 

 

NX-OS(config)# feature private-vlan

NX-OS(config)# vlan 10   

NX-OS(config-vlan)# private-vlan primary    

  

NX-OS(config)# vlan 20-21

NX-OS(config-vlan)# private-vlan community-vlan

NX-OS(config)# vlan 22

NX-OS(config-vlan)# private-vlan isolated

NX-OS(config)# vlan 10   

NX-OS(config-vlan)# private-valn association 20-21

NX-OS(config-vlan)# private-valn association add 22

NX-OS(config)# interface ethernet 5/2

NX-OS(config-if)# switchport

NX-OS(config-if)# switchport mode private-vlan host

NX-OS(config-if)# switchport private-vlan host-association 10 21

 

 

NX-OS(config)# interface ethernet 3/1

NX-OS(config-if)# switchport

NX-OS(config-if)# switchport private-vlan promiscuous

NX-OS(config-if)# switchport private-vlan mapping 10 20-22

NX-OS(config)# interface vlan 10

NX-OS(config-if)#  private-vlan mapping  20-22

 

 

 

 

Posted by 네떡지기

티스토리 툴바