NETSIM을 이용한 NSO 가이드

NSO 설치 모드 종류

  • 시스템 설치 (system-install):

    • 중앙 집중식의 "Always-On" 프로덕션 환경에 적합.
    • 운영체제와 함께 시작하고 종료되는 시스템 데몬으로 설정.
      • 데몬(daemon) : 서버 프로세스로 시스템이 살아 있는 동안 항상 실행되는 백그라운드 프로세스 상태로 존재
    • 기본 자격 증명 및 애플리케이션 설치 위치가 일반적인 Linux 애플리케이션 규칙을 따른다.
  • 로컬 설치 (local-install):

    • 개발 및 평가 목적으로 사용
    • 문서, 예제 등 모든 애플리케이션 구성 요소를 압축 해제
    • NSO 인스턴스 생성 및 시작 가능
    • 하나의 워크스테이션에서 여러 개의 독립적인 NSO 인스턴스( = 가상환경)를 동시에 실행하지 않고 사용할 수 있다.
    • 편의성을 위해 기본 자격 증명을 포함하며, 접근하기 쉬운 폴더에 설치.

NSO 로컬 설치 과정

  1. NSO 설치 디렉토리 확인

    • 로컬 설치 시 사용자 홈 디렉토리에 nso-<NSO_VERSION>폴더가 생성
  2. 환경 변수 설정

    • env | grep -i ncs 명령으로 NSO 관련 환경 변수 검색
    • 환경 변수를 사용하면 여러 NSO 버전 전환 가능
    • 명령어
      env | grep -i ncs
      ls -l
      ls -l $NCS_DIR
  3. ncsrc 파일 소싱 

    • 파일 소싱을 통해 NSO 명령어 사용가능 환경으로 변경
    • 명령어
      source $NCS_DIR/ncsrc
    • vi, nano 편집기를 이용해 .bashrc 파일에 위의 명령어를 추가하면 자동으로 반영
  4. Netsim(네트워크 시뮬레이터)을 이용한 가상 네트워크 환경 구축

    • ncs-netsim 도구를 사용해 NSO가 관리할 가상 네트워크 장비를 생성
    • 예시: 명령어를 통해 Cisco IOS, IOS-XR, NX-OS, ASA 장비를 시뮬레이션 네트워크 구축
      ncs-netsim --dir ~/src/nso-instance/netsim create-network $NCS_DIR/packages/neds/cisco-ios-cli-3.0 2 dist-rtr
      ncs-netsim --dir ~/src/nso-instance/netsim add-to-network $NCS_DIR/packages/neds/cisco-ios-cli-3.0 1 edge-sw
      ncs-netsim --dir ~/src/nso-instance/netsim add-to-network $NCS_DIR/packages/neds/cisco-ios-cli-3.0 1 internet-rtr
      ncs-netsim --dir ~/src/nso-instance/netsim add-to-network $NCS_DIR/packages/neds/cisco-iosxr-cli-3.5 2 core-rtr
      ncs-netsim --dir ~/src/nso-instance/netsim add-to-network $NCS_DIR/packages/neds/cisco-nx-cli-3.0 2 dist-sw
      ncs-netsim --dir ~/src/nso-instance/netsim add-to-network $NCS_DIR/packages/neds/cisco-asa-cli-6.6 1 edge-firewall
  5. ncs-setup을 이용한 NSO 인스턴스 생성

    • ncs-setup 스크립트를 사용하여 NSO 인스턴스를 생성
    • 주요 옵션:
      • --dest <디렉토리> : NSO 인스턴스를 설치할 디렉토리를 지정.(디렉토리가 없을시 시스템이 생성)
      • --netsim-dir <Netsim 디렉토리> : 기존에 생성한 Netsim 환경 디렉토리를 지정
        ncs-setup --dest ~/src/nso-instance --netsim-dir ~/src/nso-instance/netsim
  6. 생성된 NSO 인스턴스 디렉토리 확인

    • ncs-setup 실행 후 디렉토리 (~/src/ncs-instance)에 NSO 인스턴스 관련 파일 및 폴더가 생성
      • ncs.conf : NSO 인스턴스 설정 파일
      • packages/: 설정 시 지정된 NED 심볼릭 링크.
  7. Netsim 및 NSO 인스턴스 시작

    • NSO 인스턴스 디렉토리로 이동 후 ncs-netsim start(가상 네트워크 시뮬레이터 시작.)
    • ncs 명령어를 통한 NSO 인스턴스 시작.
      cd ~/src/nso-instance/
      ncs-netsim start
      ncs
      ncs --status | grep status

NSO 인스턴스 초기 설정 (netsim 환경)

  • netsim 환경은 초기설정 당시 net-setup을 통해 가상 장비를 이미 로드하기 때문에 바로 개발이 가능
  1. NSO CLI 접속 
    ncs_cli -C -u admin
     
  2. 장비 목록 확인 및 연결 상태 확인
    show devices list
    devices connect
  3. 현재 네트워크 상태 확습
    devices sync-from
    * 주의사항 (아래 코드 입력시 현재 가지고 있는 장비 설정을 빈 설정으로 덮어 씌우는 행위) *
    devices sync-to

장치 구성 업데이트

  • NSO 접속 코드
    ncs_cli -C -u adminconfig
  • 단일 장치 업데이트 및 현재 경로 확인
    devices device dist-sw0
    pwd
  • VLAN 및 인터페이스 추가
    vlan 42
    name TheAnswer
    exit
    interface Vlan 42
    description "Answer to the Ultimate Question of Life, the Universe, and Everything"
    ip address 10.42.42.42/24
    exit


  • 커밋 대기 중인 현재 구성 확인
    show configuration | nomore
  • 장비 구성 xml 파일로 가져오기
    show configuration | display xml | nomore
  • 실제 NSO 전송 내용 확인 및 실행
    commit dry-run outformat nativecommit

장치 구성 롤백

  • NSO는 모든 변경 사항에 대한 롤백 파일을 저장
  • 변경 사항 ID 번호를 참조하여 특정 변경 사항을 로드
    1. 가장 최근 내용 롤백
      rollback configuration
    2. 실제로 commit을 수행하지 않고, 만약 commit을 했을 때의 모습으로 보여줌
      drt-run : 시뮬레이션
      commit dry-run outformat native
    3. 롤백 완료
      commit


기기 템플릿

네트워크 장치에서 DNS 서버를 구성하는 데 사용되는 템플릿

  1. 템플릿 구조
    devices template <템플릿_이름> {
      ned-id <NED_ID>;
      config {
        // 장치별 설정 내용
      }
    }
  2. NX-OS 장치
    1. 템플릿 예시
      devices : NSO 설정 정의 수행
      ned-id : 시스템 지정
      ip name-server : DNS 네임 서버 설정
      devices template SET-DNS-SERVER
      ned-id cisco-nx-cli-3.0
      config
      ip name-server 208.67.222.222
      ip name-server 208.67.220.220
    2. 템플릿 device에 적용
      devices device dist-sw0 apply-template template-name SET-DNS-SERVER
    3. 템플릿 취소
      revert no-confirm


  3. IOS 및 ASA 장치 템플릿
    1. IOS
      top
      devices template SET-DNS-SERVER
      ned-id cisco-ios-cli-3.0
      config
      ip name-server 208.67.222.222
      ip name-server 208.67.220.220
      ASA
      top
      devices template SET-DNS-SERVER
      ned-id cisco-asa-cli-6.6
      config
      dns domain-lookup mgmt
      dns server-group DefaultDNS
      name-server 208.67.220.220
      name-server 208.67.222.222
      IOS-XR
      top
      devices template SET-DNS-SERVER
      ned-id cisco-iosxr-cli-3.5
      config
      domain name-server 208.67.222.222
      domain name-server 208.67.220.22
      변경사항 저장
      commit
    2. device group을 통해 모든 변경 사항 전체 네트워크 적용
      devices device-group ALL apply-template template-name SET-DNS-SERVER


네트워크 구성 준수

템플릿을 이용해 현재 네트워크 구성이 실제 네트워크 기능과 일치한지 확인

  1. 확인할 구성 템플릿 제작
    IOS 용
    top
    devices template COMPLIANCE-CHECK
    ned-id cisco-ios-cli-3.0
    config
    ip name-server 208.67.222.222
    ip name-server 208.67.220.220
    service timestamps log datetime localtime show-timezone year
    logging host 10.225.1.11
    ntp server 10.225.1.11
    Nexus
    top
    devices template COMPLIANCE-CHECK
    ned-id cisco-nx-cli-3.0
    config
    ip name-server 208.67.222.222
    ip name-server 208.67.220.220
    logging server 10.225.1.11
    logging level 5
    ntp server 10.225.1.11
    ASA
    top
    devices template COMPLIANCE-CHECK
    ned-id cisco-asa-cli-6.6
    config
    dns domain-lookup mgmt
    dns server-group DefaultDNS
    name-server 208.67.222.222
    name-server 208.67.220.220
    exit
    logging timestamp
    logging host mgmt 10.225.1.11
    ntp server 10.225.1.11


  2. NSO 규정 준수 보고서 사용
    state/compliance-reports : 보고서 저장 위치
    compliance reports report COMPLIANCE-CHECK
    compare-template COMPLIANCE-CHECK ALL
    commit and-quit
    참고 : Discrepancies는 모든 기기에서 발견되는 문제

NSO 서비스 패키지 생성

서비스 패키지는 NSO가 애플리케이션에 로드하여 새로운 기능으로 확장하는 구조화된 파일과 폴더의 모음을 뜻한다.

  1. loopback-service 이름의 서비스 패키지 생성
    ncs-make-packages : 서비스 패키지의 뼈대를 auto로 제작
    ncs-make-package --service-skeleton template loopback-service
  2. 폴더 구조 확인
    tree loopback-service/
  3. NSO CLI를 통한 장비 설정 확인 및 드라이 런
    ncs_cli -C -u admin
    config
    devices device dist-rtr0 config
    interface Loopback 100
    ip address 10.10.30.0 255.255.255.0
    show configuration | nomore
    commit dry-run outformat xml
    exit no-confirm
    exit
  4. 템플릿 파일 수정
    <config> 태그 내의 인터페이스 설정 XML 조각을 추출해 loopback-service-template.xml 파일에 IP 주소 부분을 dummy 변수로 치환하여 저장
    printf '<config-template xmlns="http://tail-f.com/ns/config/1.0" servicepoint="loopback-service">
      <devices xmlns="http://tail-f.com/ns/ncs">
        <device>
          <name>{/device}</name>
          <config>
           <interface xmlns="urn:ios">
             <Loopback>
               <name>100</name>
               <ip>
                 <address>
                   <primary>
                     <address>{/dummy}</address>
                     <mask>255.255.255.0</mask>
                   </primary>
                 </address>
               </ip>
             </Loopback>
           </interface>
          </config>
        </device>
      </devices>
    </config-template>
    ' > ~/src/nso-instance/packages/loopback-service/templates/loopback-service-template.xml
  5. NSO 패키지 다시 reload
    cd ~/src/nso-instance/packages/loopback-service/src/
    make
    ncs_cli -C -u admin
    packages reload
    exit



NSO 서비스 인스턴스 생성 및 재배포

  1. 서비스 인스턴스 생성
    loopback-service : 서비스 인스턴스 생성
    config
    loopback-service test
     device dist-rtr0
     dummy 192.168.1.1
    top
    commit dry-run outformat native
    show configuration | nomore
    commit and-quit
  2. 서비스 재배포
    loopback이 삭제 되었을 경우
    NSO에 현자 장비구성을 다시 학습 이후 재배포
    devices sync-from
    config
    loopback-service test re-deploy dry-run
    loopback-service test re-deploy
    end