Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Enhanced Outbound HTTPS에 대한 NETCONF 및 쉘 세션

요약 클라이언트 애플리케이션은 지원되는 Junos 디바이스에서 향상된 아웃바운드 HTTPS를 사용하여 NETCONF(Network Configuration Protocol) 세션 및 쉘 세션을 설정할 수 있습니다.

Enhanced Outbound HTTPS에 대한 NETCONF 및 셸 세션 이해

아웃바운드 HTTPS를 통한 NETCONF 및 셸 세션의 이점

  • NETCONF 또는 셸 클라이언트 애플리케이션을 활성화하여 다른 프로토콜을 통해 액세스할 수 없는 디바이스를 관리할 수 있습니다.

  • 아웃바운드 HTTPS 클라이언트에 대한 인증서 기반 인증을 사용하여 디바이스의 원격 관리를 활성화합니다.

아웃바운드 HTTPS에 대한 NETCONF 및 셸 세션 개요

지원되는 Junos 디바이스와 네트워크 관리 시스템 사이에 아웃바운드 HTTPS에 NETCONF 및 셸 세션을 설정할 수 있습니다. 아웃바운드 HTTPS에 대한 NETCONF 또는 셸 세션을 사용하면 SSH와 같은 다른 프로토콜을 통해 액세스할 수 없는 디바이스를 원격으로 관리할 수 있습니다. 예를 들어 디바이스가 방화벽 뒤에 있고 방화벽 또는 다른 보안 도구가 해당 프로토콜을 차단하는 경우 이러한 작업이 발생할 수 있습니다. 반면 HTTPS는 대부분의 환경에서 일반적으로 아웃바운드로 허용되는 표준 포트를 사용합니다.

지원되는 디바이스에서 Junos 소프트웨어 이미지에는 아웃바운드 HTTPS를 사용하여 NETCONF 또는 쉘 세션 구축을 지원하는 JET(Juniper Extension Toolkit) 애플리케이션이 포함되어 있습니다. JET 애플리케이션은 gRPC 프레임워크를 사용하여 네트워크 관리 시스템에서 실행되는 gRPC 서버로 구성된 아웃바운드 HTTPS 클라이언트에 연결합니다. gRPC는 언어 독립적인 오픈 소스 원격 프로시저 호출(RPC) 프레임워크입니다. 그림 1 은 가장 간단한 형식으로 아웃바운드 HTTPS 설정을 보여줍니다.

그림 1: 아웃바운드 HTTPS에 대한 NETCONF 및 쉘 세션 NETCONF and Shell Sessions over Outbound HTTPS

이 시나리오에서 gRPC 서버는 NETCONF/셸 클라이언트 역할을 하며 JET 애플리케이션은 gRPC 클라이언트 및 NETCONF/쉘 서버입니다. gRPC 서버는 지정된 포트에서 연결 요청을 수신하며, 이는 포트 443의 기본값입니다. JET 애플리케이션을 확장 서비스로 구성합니다. 관련 연결 및 인증 정보가 스크립트로 전달됩니다. 스크립트가 실행되는 동안 구성된 호스트 및 포트의 gRPC 서버에 자동으로 연결을 시도합니다.

JET 애플리케이션과 gRPC 서버는 TLS 암호화 gRPC 세션을 통해 영구 HTTPS 연결을 설정합니다. JET 애플리케이션은 X.509 디지털 인증서를 사용하여 gRPC 서버를 인증하고 인증이 성공하면 요청된 NETCONF 또는 쉘 세션이 이 연결을 통해 설정됩니다. NETCONF 운영 및 쉘 명령은 확장 서비스 애플리케이션을 위해 구성된 사용자의 계정 권한에 따라 실행됩니다.

아웃바운드 HTTPS 연결은 X.509 디지털 인증서를 사용하여 gRPC 서버를 인증합니다. 디지털 인증서는 인증 기관 또는 인증 기관(CA)으로 알려진 신뢰할 수 있는 타사를 통해 신원을 확인하는 전자적 수단입니다. 인증서 당국은 인증서 검증을 통해 두 엔드포인트 간에 안전한 연결을 설정하는 데 사용할 수 있는 디지털 인증서를 발행합니다. X.509 표준은 인증서의 형식을 정의합니다. 지원되는 Junos 디바이스에서 아웃바운드 HTTPS를 통해 NETCONF 또는 쉘 세션을 설정하려면 gRPC 서버에 유효한 X.509 인증서가 있어야 합니다.

향상된 아웃바운드 HTTPS는 다음을 지원합니다.

  • 여러 아웃바운드 HTTPS 클라이언트에 연결

  • 각 아웃바운드 HTTPS 클라이언트에 대해 여러 개의 백업 gRPC 서버 구성

  • 특정 클라이언트를 통한 다수의 동시 NETCONF 및 셸 세션 설정

  • 자체 서명 또는 CA 서명 X.509 디지털 인증서를 사용하여 아웃바운드 HTTPS 클라이언트 인증

  • 공유 비밀을 사용하여 Junos 디바이스 인증

향상된 아웃바운드 HTTPS를 통한 세션을 위한 연결 워크플로

아웃바운드 HTTPS의 NETCONF 또는 쉘 세션에서 네트워크 관리 시스템에서 실행되는 gRPC 서버는 NETCONF/쉘 클라이언트 역할을 하며, Junos 디바이스의 JET 애플리케이션은 gRPC 클라이언트 및 NETCONF/쉘 서버입니다. 여러 아웃바운드 HTTPS 클라이언트를 구성할 수 있으며, 각 클라이언트에 대해 하나 이상의 백업 gRPC 서버를 구성할 수 있습니다. JET 애플리케이션은 클라이언트 서버 목록에 있는 하나의 gRPC 서버에 한 번만 연결합니다.

gRPC 클라이언트 및 서버는 아웃바운드 HTTPS를 통해 NETCONF 또는 셸 세션을 설정하기 위해 다음 작업을 수행합니다.

  1. gRPC 서버는 기본 포트 443에서 지정된 포트에서 들어오는 연결을 수신하거나 포트가 지정되지 않은 경우 수신합니다.

  2. gRPC 클라이언트는 구성된 gRPC 서버 및 포트로 TCP/IP 연결을 시작합니다. 하나 이상의 백업 gRPC 서버를 사용하여 아웃바운드 HTTPS 클라이언트를 구성하는 경우, gRPC 클라이언트는 연결을 설정할 때까지 목록의 각 서버에 연결하려고 합니다.

  3. gRPC 클라이언트는 TLS ClientHello 핸드셰이크를 시작하기 위해 TLS 메시지를 보냅니다.

  4. gRPC 서버는 메시지와 인증서를 ServerHello 보냅니다.

  5. gRPC 클라이언트는 gRPC 서버의 ID를 확인합니다.

  6. gRPC 클라이언트는 아웃바운드 HTTPS 클라이언트에 대해 구성된 디바이스 ID 및 공유 비밀을 gRPC 서버로 보냅니다.

  7. 아웃바운드 HTTPS 클라이언트는 NETCONF 또는 셸 세션을 요청하고, gRPC 서버는 디바이스 ID와 공유 비밀을 사용하여 Junos 디바이스를 인증합니다. 인증이 성공하면 세션이 설정됩니다.

  8. NETCONF 세션이 요청되면 서버와 클라이언트는 NETCONF <hello> 메시지를 교환합니다.

  9. NETCONF 또는 쉘 클라이언트 애플리케이션은 필요에 따라 작업을 수행합니다.

gRPC 클라이언트는 동일한 gRPC 서버로 다른 TCP/IP 연결을 시작하고 gRPC 클라이언트와 서버는 이 프로세스를 반복하여 아웃바운드 HTTPS 클라이언트가 네트워크 디바이스로 여러 NETCONF 및 쉘 세션을 설정할 수 있도록 합니다.

향상된 아웃바운드 HTTPS를 통해 NETCONF 및 셸 세션을 설정하는 방법

Junos 소프트웨어 이미지의 일부로 포함된 JET 애플리케이션을 사용하여 네트워크 관리 시스템(NMS)과 지원되는 Junos 디바이스 간에 NETCONF 및 쉘 세션을 아웃바운드 HTTPS에 설정할 수 있습니다. 확장 서비스로 구성된 JET 애플리케이션은 NMS에서 실행되는 gRPC 서버에 대한 연결을 시작하고 TLS 암호화 gRPC 세션을 통해 영구 HTTPS 연결을 설정합니다. NETCONF 또는 쉘 세션은 이 HTTPS 연결을 통해 실행됩니다. 이 시나리오에서 gRPC 서버는 NETCONF/셸 클라이언트이고 JET 애플리케이션은 gRPC 클라이언트 및 NETCONF/쉘 서버입니다.

향상된 아웃바운드 HTTPS를 통한 세션을 설정하려면 다음과 같은 하드웨어와 소프트웨어가 필요합니다.

  • Python 3.5 이상에서 실행되는 네트워크 관리 시스템

  • Junos OS 실행 중인 디바이스 또는 JET 애플리케이션 실행을 지원하는 업그레이드된 FreeBSD 릴리스 20.3 이상에서 Junos OS 실행하는 디바이스

    참고:

    지원되는 디바이스의 경우 기능 탐색기를 참조하십시오.

그림 2 는 다음 작업에서 참조된 설정을 보여줍니다. Junos 디바이스의 관리 인터페이스 이름은 플랫폼 및 OS에 따라 다릅니다.

그림 2: 아웃바운드 HTTPS 토폴로지 NETCONF over Outbound HTTPS Topology 에서의 NETCONF

클라이언트와 서버가 아웃바운드 HTTPS를 통해 NETCONF 또는 셸 세션을 설정하기 전에 다음 섹션에서 설명한 요구 사항을 충족해야 합니다.

gRPC 서버에 대한 X.509 인증서 획득

아웃바운드 HTTPS 연결은 X.509 공개 키 인증서를 사용하여 네트워크 관리 시스템에서 실행되는 gRPC 서버의 ID를 인증합니다. gRPC 스택은 X.509 v3 인증서 형식을 지원합니다.

gRPC 서버 인증서의 요구 사항은 다음과 같습니다.

  • 인증서는 인증 기관(CA)이 자체 서명하거나 서명할 수 있습니다.

  • 인증서는 공통 이름(CN) 필드에서 gRPC 서버의 호스트 이름을 정의하거나 SAN(SubjectAltName) IP 주소 필드에서 gRPC 서버의 IP 주소를 정의해야 합니다. Junos 디바이스는 서버에 대한 연결을 설정하기 위해 동일한 값을 사용해야 합니다. 인증서가 SubjectAltName IP 주소 필드를 정의하는 경우, 디바이스는 인증 중에 공통 이름 필드를 무시합니다.

  • 인증서는 PEM 인코딩되어야 하며 .crt 확장을 사용해야 합니다.

  • 인증서와 키는 각각 server.crtserver.key라는 이름이 되어야 합니다.

OpenSSL을 사용하여 인증서를 획득하는 경우:

  1. 프라이빗 키를 생성하고 키 길이를 비트로 지정합니다.
    참고:

    프라이빗 키 크기에 3072비트 이상의 비트를 사용하는 것이 좋습니다. 키 길이가 4096비트 를 초과해서는 안 됩니다.

  2. gRPC 서버의 IP 주소에 연결하는 경우, openssl.cnf 또는 이와 동등한 구성 파일을 업데이트하여 gRPC 서버의 주소로 확장을 정의 subjectAltName=IP 하십시오.
  3. 엔터티의 공개 키와 해당 ID에 대한 정보가 포함된 인증서 서명 요청(CSR)을 생성합니다.
  4. 다음 중 하나를 수행하여 인증서를 생성합니다.
    • CSR을 인증서 기관으로 전송하여 X.509 인증서를 요청하고 추가 확장을 포함할 수 있는 구성 파일을 제공합니다.

    • CA와 함께 CSR에 서명하여 클라이언트 인증서를 생성하고 구성 파일 및 확장자를 참조해야 하는 경우 옵션을 포함합니다 -extfile .

    • 서버 키로 CSR에 서명하여 자체 서명된 클라이언트 인증서를 생성하고 구성 파일 및 확장자를 참조해야 하는 경우 옵션을 포함합니다 -extfile .

  5. 공통 이름(CN) 필드 및 확장이 올바른지 확인합니다.

gRPC 서버 설정

네트워크 관리 시스템에는 다음 소프트웨어가 필요합니다.

  • Python 3.5 이상

Junos 디바이스의 네트워크 관리 시스템과 JET 애플리케이션은 gRPC 프레임워크를 사용하여 TLS 암호화 gRPC 세션을 통해 영구 HTTPS 연결을 설정합니다. 네트워크 관리 시스템은 gRPC 스택을 설치하고 연결 요청에 대해 지정된 포트에서 수신하는 gRPC 서버를 실행해야 합니다. 주니퍼 네트웍스 GitHub의 주니퍼 네트웍스 리포지토리에서 netconf-https-outbound 필요한 프로토 정의 파일 및 샘플 gRPC 서버 애플리케이션 파일을 제공합니다.

이 섹션에서는 Ubuntu 18.04를 실행하는 네트워크 관리 시스템에서 gRPC 서버를 설정합니다. 다른 운영 체제를 실행하는 경우 OS에 적합한 명령을 사용합니다.

Ubuntu 18.04를 실행하는 네트워크 관리 시스템에서 gRPC 서버를 설정하려면,

  1. Python 3용 설치 pip .
  2. 패키지를 설치합니다 grpcio .
  3. 패키지를 설치합니다 grpcio-tools .
    참고:

    또는 grpcio 패키지에 grpcio 대한 설치 오류가 발생하면 최신 버전을 설치해 보십시오.

  4. https://github.com/Juniper/netconf-https-outbound Juniper GitHub 리포지토리로 이동하여 Junos 디바이스에서 실행되는 릴리스에 해당하는 디렉터리를 선택합니다.

    릴리스

    디렉터리

    Junos OS 릴리스 20.3R1 이상

    20.3

    Junos OS 진화한 릴리스 22.4R1 이상

    junos-evolved/22.4

  5. GitHub 디렉터리에 있는 애플리케이션 및 프로토 파일을 gRPC 서버의 인증서가 있는 네트워크 관리 시스템의 디렉터리로 다운로드합니다.
    1. 각 파일을 선택하고 Raw 단추를 클릭한 다음 해당 파일의 URL을 복사합니다.

    2. 선택한 도구(예 wget : 또는 curl)와 함께 URL을 사용하여 파일을 다운로드하십시오.

  6. 프로토콜 버퍼 컴파일러 , protoc을(를) 사용하여 각 proto 정의 파일을 컴파일하고 Python 코드를 생성하며, 이 코드는 각 프로토 파일에 대해 2개의 출력 파일을 생성합니다.

    예를 들어:

  7. gRPC 서버를 시작하고 기본 포트 443과 다른 경우 연결의 포트를 지정합니다.
    참고:

    포트 443에서 수신하려면 루트 권한으로 스크립트를 실행해야 할 수도 있습니다.

gRPC 서버는 수신 연결을 위해 지정된 포트에서 무기한 수신합니다. gRPC 서버에 연결하도록 Junos 디바이스를 구성하고 연결 및 세션이 설정된 후에는 NETCONF 작업 또는 쉘 명령을 적절히 수행할 수 있습니다.

NETCONF 또는 셸 사용자에 대한 사용자 계정 구성

아웃바운드 HTTPS에서 NETCONF 또는 셸 세션을 설정하려면 Junos 디바이스에서 로컬로 사용자 계정을 생성해야 합니다. 이 계정을 사용하여 해당 세션에 대한 디바이스에서 NETCONF 또는 쉘 작업을 수행합니다. JET 응용 프로그램은 이 계정에 대해 구성된 권한을 사용하여 실행됩니다.

Junos 디바이스에서 사용자 계정을 생성하려면 다음을 수행합니다.

  1. user 고유한 사용자 이름을 사용하여 문을 구성하고, 명령문을 포함 class 시켜 사용자가 수행하는 모든 작업에 필요한 권한이 있는 로그인 클래스를 지정합니다. 예를 들어:
  2. (선택 사항) 및 full-name 문을 구성 uid 하여 고유한 사용자 ID와 사용자 이름을 지정합니다.
  3. 구성을 커밋하여 디바이스에서 사용자 계정을 활성화합니다.
  4. 클라이언트가 아웃바운드 HTTPS를 통해 NETCONF 또는 쉘 세션을 설정해야 하는 각 Junos 디바이스의 이전 단계를 반복합니다.

아웃바운드 HTTPS 클라이언트 구성

향상된 아웃바운드 HTTPS를 사용하면 계층 수준에서 여러 아웃바운드 HTTPS 클라이언트를 [edit system services outbound-https] 구성하고 각 클라이언트에 대해 여러 개의 백업 gRPC 서버를 구성할 수 있습니다. JET 애플리케이션은 클라이언트 서버 목록에 있는 하나의 gRPC 서버에 한 번만 연결합니다.

디바이스를 구성하기 전에 다음 정보가 필요합니다.

  • gRPC 서버가 연결을 수신하는 포트입니다.

  • SubjectAltName IP 주소 필드의 내용 또는 그러한 필드가 없는 경우 gRPC 서버 인증서의 공통 이름(CN) 필드입니다.

  • gRPC 서버 인증서의 내용(자체 서명된 경우, CA 인증서의 내용인 경우, 서버 인증서가 인증서 체인을 사용하여 인증된 경우).

아웃바운드 HTTPS 클라이언트를 구성하려면,

  1. 아웃바운드 HTTPS 클라이언트 계층으로 이동하고 아웃바운드 HTTPS 클라이언트를 고유하게 식별하는 식별자를 정의합니다.
  2. gRPC 서버가 세션 설정 중에 Junos 디바이스를 식별하고 인증하는 데 사용하는 사용자 정의 문자열인 디바이스 식별자를 정의합니다.
  3. gRPC 서버가 세션 설정 중에 Junos 디바이스를 인증하는 데 사용하는 사용자 정의 문자열인 공유 암호 문자열을 정의합니다.

    디바이스는 공유 암호 문자열을 구성 데이터베이스에 암호화된 값으로 저장합니다.

  4. (선택 사항) 연결이 끊긴 아웃바운드 HTTPS 연결을 또는 in-order으로 sticky 재설정하는 데 사용되는 방법을 정의합니다.
  5. (선택 사항) gRPC 클라이언트가 아웃바운드 HTTPS 클라이언트의 서버 목록에 연결하려는 시도 사이에 대기하는 시간을 초 단위로 정의합니다.
  6. 하나 이상의 gRPC 서버에 대한 호스트 이름 또는 IPv4 주소와 서버가 아웃바운드 HTTPS 연결 요청을 수신하는 포트를 구성합니다.

    호스트 이름 또는 IP 주소는 해당 gRPC 서버의 인증서에서 공통 이름(CN) 필드 또는 SubjectAltName IP 주소 필드의 값과 각각 일치해야 합니다.

  7. 각 gRPC 서버의 trusted_cert 경우, 서버 인증에 필요한 인증서 정보를 사용하여 문을 구성합니다.
    • 서버 인증서가 자체 서명된 경우 gRPC 서버 인증서인 server.crt의 내용을 구성하여 새 라인을 생략합니다.

    • 인증서 체인을 사용하여 서버의 인증서가 인증되면 해당 순서대로 중간 CA 및 루트 CA 인증서를 연결하고 모든 새 줄을 제거하고 결과 단일 문자열을 구성합니다.

    참고:

    문에 대한 trusted_cert 값을 쉽게 생성하려면 다음과 유사한 명령을 사용하여 필요한 순서로 적절한 인증서를 연결하고 새 라인을 제거할 수 있습니다.

  8. Junos 디바이스를 관리하는 각 아웃바운드 HTTPS 클라이언트에 대한 이전 단계를 반복합니다.
  9. 구성을 커밋합니다.
참고:

아웃바운드 HTTPS 확장 서비스가 이미 실행 중이고 아웃바운드 HTTPS 클라이언트를 추가, 삭제 또는 수정하고 구성을 커밋하면 변경 사항이 적용하려면 서비스를 다시 시작할 필요가 없습니다. 자동으로 픽업됩니다.

Junos 디바이스에서 아웃바운드 HTTPS 확장 서비스 구성

아웃바운드 HTTPS에서 NETCONF 및 쉘 세션을 지원하는 Junos 릴리스에는 JET 애플리케이션과 소프트웨어 이미지의 지원 파일이 포함됩니다. 표 1 에서는 디바이스의 /var/db/scripts/jet directory에 있는 파일을 간략하게 설명합니다.

표 1: 향상된 아웃바운드 HTTPS를 통한 세션용 JET 파일

파일

설명

nc_grpc_app.pyc

네트워크 관리 시스템에서 실행되는 gRPC 서버와 영구 HTTPS 연결을 설정하기 위해 gRPC 프레임워크를 사용하는 JET 애플리케이션입니다.

nc_grpc_app_lib.pyc

필수 라이브러리

아웃바운드 HTTPS에서 세션에 대한 Junos 디바이스를 구성하려면 다음을 수행합니다.

  1. JET 애플리케이션 및 관련 파일이 디바이스에 있는지 확인합니다.
  2. 구성 모드를 입력합니다.
  3. - 부호 없는 Python 3 애플리케이션을 실행하도록 디바이스를 활성화합니다.
  4. 루프백 주소에 대한 확장 서비스 알림을 구성합니다.
  5. 확장 서비스 애플리케이션의 계층으로 이동합니다.
  6. 데몬화된 프로세스로 백그라운드에서 실행하도록 애플리케이션을 구성합니다.
  7. 일반 출구에서 다시 켜지도록 애플리케이션을 구성합니다.
  8. 애플리케이션이 실행하고 NETCONF 작업 및 쉘 명령이 수행되는 권한 아래에서 사용 이름을 구성합니다.
  9. 구성을 커밋합니다.

    구성 daemonize 을 커밋할 때 옵션은 애플리케이션을 자동으로 시작하도록 합니다.

  10. 애플리케이션이 실행 중인지 확인합니다.

애플리케이션이 성공적으로 시작되면 outbound_https.log 파일에 메시지를 기록합니다.

참고:

구성을 커밋한 후 애플리케이션이 자동으로 시작되지 않으면 이 애플리케이션과 관련된 로그 메시지를 검토하여 문제를 해결합니다. Junos OS 명령을 실행합니다show log jet.log. 진화한 Junos OS 및 show log messages 명령을 실행 show trace application cscript 합니다.

NETCONF 또는 쉘 세션 시작

네트워크 관리 시스템에서 실행되는 gRPC 서버는 NETCONF/쉘 클라이언트 역할을 하며, Junos 디바이스의 JET 애플리케이션은 gRPC 클라이언트 및 NETCONF/쉘 서버 역할을 합니다. gRPC 서버 및 JET 애플리케이션을 시작한 후 JET 애플리케이션은 지정된 포트의 gRPC 서버에 연결하려고 시도합니다. 연결이 성공하면 gRPC 클라이언트가 gRPC 서버를 인증합니다. 서버 인증이 성공하면 하나 이상의 NETCONF 또는 셸 세션을 요청할 수 있습니다.

시작하기 전에 다음 정보가 필요합니다.

  • 아웃바운드 HTTPS 클라이언트용으로 구성된 디바이스 식별자 및 공유 암호 문자열

향상된 아웃바운드 HTTPS를 통해 NETCONF 또는 쉘 세션을 구축하려면 다음을 수행합니다.

  1. 네트워크 관리 시스템에서 gPRC 서버를 시작하지 않은 경우 서버를 시작하고 연결에 대한 포트를 지정합니다.
  2. Junos 디바이스로 하나 이상의 세션을 설정하려면 request_session.py 스크립트를 실행합니다. Junos 디바이스의 아웃바운드 HTTPS 클라이언트에 대해 구성한 디바이스 ID 및 공유 기밀뿐만 아니라 세션 유형을 지정합니다. 예를 들어:
    • 기본값인 csh 세션을 요청하려면 세션 유형을 지정할 필요가 없습니다.

    • NETCONF 세션을 요청하려면 옵션을 포함합니다 -s netconf .

    서버가 Junos 디바이스를 성공적으로 인증하면 요청된 세션이 시작됩니다.

  3. 출력을 검토하여 세션이 설정되었는지 확인합니다.
    • 쉘 세션은 예를 들어 출력을 csh session is started 표시해야 합니다.

    • NETCONF 세션은 다음과 같이 NETCONF 기능을 표시해야 합니다.

  4. 필요에 따라 NETCONF 또는 쉘 작업을 수행합니다.
  5. 세션이 끝나면 을(를) 입력합니다 Ctrl+C.
  6. 아웃바운드 HTTPS 연결 사용이 완료되면 구성에서 관련 계층을 삭제하거나 비활성화한 다음 변경을 커밋하여 Junos 디바이스에서 확장 서비스 애플리케이션을 중지할 수 있습니다.