Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

아웃바운드 HTTPS를 통한 NETCONF 세션

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

이 주제는 Junos OS 릴리스 20.2를 실행하는 디바이스에서 아웃바운드 HTTPS를 사용하여 NETCONF 세션을 설정하는 방법에 대해 설명합니다. 향상된 아웃바운드 HTTPS를 사용하여 NETCONF 및 셸 세션을 설정하는 방법에 대한 자세한 내용은 향상된 아웃바운드 HTTPS를 통한 NETCONF 및 셸 세션을 참조하십시오.

아웃바운드 HTTPS를 통한 NETCONF 세션 이해

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

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

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

아웃바운드 HTTPS를 통한 NETCONF 세션 개요

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

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

그림 1: 아웃바운드 HTTPS NETCONF Sessions over Outbound HTTPS 를 통한 NETCONF 세션

이 시나리오에서 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(인증 기관)라고 하는 신뢰할 수 있는 제3자를 통해 사용자의 신원을 확인하기 위한 전자적 수단입니다. 인증 기관은 인증서 유효성 검사를 통해 두 엔드포인트 간에 보안 연결을 설정하는 데 사용할 수 있는 디지털 인증서를 발급합니다. X.509 표준은 인증서의 형식을 정의합니다. 지원되는 Junos 디바이스에서 아웃바운드 HTTPS를 통해 NETCONF 세션을 설정하려면 gRPC 서버에 유효한 X.509 인증서가 있어야 합니다.

기본 아웃바운드 HTTPS 기능은 단일 아웃바운드 HTTPS 클라이언트에 연결하고 해당 클라이언트에 대해 하나의 gRPC 서버를 구성하기 위한 지원을 제공합니다. 서버 인증은 자체 서명된 X.509 인증서를 사용해야 합니다. 연결을 통해 단일 NETCONF 세션을 설정할 수 있습니다.

아웃바운드 HTTPS를 통한 세션에 대한 연결 워크플로

아웃바운드 HTTPS를 통한 NETCONF 세션에서 네트워크 관리 시스템에서 실행되는 gRPC 서버는 NETCONF 클라이언트 역할을 하며, Junos 디바이스의 JET 애플리케이션은 gRPC 클라이언트 및 NETCONF 서버입니다.

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

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

  2. gRPC 클라이언트는 구성된 gRPC 서버 및 포트를 사용하여 TCP/IP 연결을 시작합니다.

  3. gRPC 클라이언트는 TLS ClientHello 메시지를 보내 TLS 핸드셰이크를 시작합니다.

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

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

  6. NETCONF 세션이 설정됩니다.

  7. 서버와 클라이언트는 NETCONF <hello> 메시지를 교환합니다.

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

아웃바운드 HTTPS를 통해 NETCONF 세션을 설정하는 방법

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

아웃바운드 HTTPS를 통해 NETCONF 세션을 설정하는 데 필요한 하드웨어 및 소프트웨어는 다음과 같습니다.

그림 2 는 다음 작업에서 참조되는 설정을 보여 줍니다.

그림 2: 아웃바운드 HTTPS 토폴로지 NETCONF over Outbound HTTPS Topology 를 통한 NETCONF

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

gRPC 서버에 대한 X.509 인증서 가져오기

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

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

  • 인증서는 자체 서명되어야 합니다.

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

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

  • 인증서와 해당 키의 이름은 각각 server.crtserver.key여야 합니다.

OpenSSL을 사용하여 인증서를 얻으려면 다음을 수행합니다.

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

    프라이빗 키의 크기에 3072비트 이상을 사용하는 것이 좋습니다.

  2. gRPC 서버의 IP 주소에 연결하는 경우 openssl.cnf 또는 이와 동등한 구성 파일을 업데이트하여 gRPC 서버의 주소로 확장을 정의합니다 subjectAltName=IP .
  3. 클라이언트의 공개 키와 해당 ID에 대한 정보가 포함된 인증서 서명 요청(CSR)을 생성합니다.
  4. 인증서를 생성합니다.

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

  5. CN(일반 이름) 필드와 내선 번호(제공된 경우)가 올바른지 확인합니다.
  6. (선택 사항) server.crt 파일을 Junos OS를 실행하는 디바이스의 /var/db/scripts/jet 디렉터리에 복사하여 인증에 인증서 파일을 사용합니다.
    참고:

    키 크기가 4096비트보다 작거나 같으면 이 단계를 생략할 수 있으며, 대신 Junos 디바이스의 JET 애플리케이션 trusted_certs 인수에 인증서의 내용을 구성합니다.

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 패키지를 설치합니다.
  4. https://github.com/Juniper/netconf-https-outbound 의 주니퍼 GitHub 리포지토리로 이동하여 Junos 디바이스에서 실행 중인 릴리스에 해당하는 디렉터리를 선택합니다.
  5. GitHub 디렉터리의 애플리케이션 및 proto 파일을 gRPC 서버의 인증서가 있는 네트워크 관리 시스템의 디렉터리로 다운로드합니다.
    1. 각 파일을 선택하고 원시 단추를 클릭한 다음 파일의 URL을 복사합니다.

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

  6. 프로토콜 버퍼 컴파일러 protoc를 사용하여 각 프로토타입 정의 파일을 컴파일하고 각 프로토타입 파일에 대해 두 개의 출력 파일을 생성하는 Python 코드를 생성합니다.

    예를 들어:

  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 클라이언트 구성

JET 응용 프로그램은 하나의 아웃바운드 HTTPS 클라이언트에만 연결할 수 있습니다. 클라이언트에 대한 연결 및 인증 정보를 JET 스크립트에 대한 명령줄 인수로 구성합니다. 표 1 에서는 인수를 간략하게 설명합니다.

표 1: nc_grpc_app.py 인수

인수

--device 또는 -d

JET 애플리케이션이 연결하는 gRPC 서버의 호스트 이름 또는 IPv4 주소입니다. 인수 값은 CN(일반 이름) 필드의 호스트 이름 또는 gRPC 서버 인증서의 SubjectAltName IP 주소 필드에 있는 IP 주소와 일치해야 합니다.

--port 또는 -p

(선택 사항) JET 애플리케이션이 gRPC 서버에 연결을 시도하는 포트입니다. 기본 포트 443을 사용하려면 이 인수를 생략합니다.

--trusted_certs 또는 -ts

(선택 사항) 및 -----END CERTIFICATE----- 줄 사이에 -----BEGIN CERTIFICATE----- 있는 gRPC 서버의 인증서 내용으로, 줄 바꿈은 생략합니다.

대신 인증서를 디바이스의 /var/db/scripts/jet 디렉터리에 복사하는 경우 이 인수를 생략할 수 있습니다. 키 크기가 4096비트보다 큰 경우 인증서를 디바이스에 복사해야 합니다.

시작하기 전에 다음을 포함하여 스크립트 인수에 대한 값이 필요합니다.

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

  • SubjectAltName IP 주소 필드의 내용 또는 해당 필드가 없는 경우 gRPC 서버 인증서의 CN(일반 이름) 필드 내용입니다.

  • -----END CERTIFICATE-----사이에 -----BEGIN CERTIFICATE----- 있는 gRPC 서버 인증서의 내용으로, 줄 바꿈을 생략합니다. 이 정보는 Junos OS를 실행하는 디바이스에 인증서를 복사하는 대신 인증서 내용을 스크립트 인수로 구성하는 경우에만 필요합니다.

아웃바운드 HTTPS 클라이언트를 구성하려면 다음을 수행합니다.

  1. nc_grpc_app.py 확장 서비스 응용 프로그램의 계층 구조로 이동합니다.
  2. 응용 프로그램이 시작될 때 응용 프로그램에 전달되는 인수를 구성합니다.
  3. 구성을 커밋합니다.

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

아웃바운드 HTTPS를 통해 NETCONF 세션을 지원하는 Junos 릴리스에는 소프트웨어 이미지에 JET 애플리케이션과 지원 파일이 포함되어 있습니다. 표 2 는 디바이스의 /var/db/scripts/jet 디렉토리에 있는 파일을 간략하게 설명합니다.

표 2: 아웃바운드 HTTPS를 통한 세션에 대한 JET 파일

파일

설명

nc_grpc_app.py

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

nc_grpc_pb2.py

nc_grpc_pb2_grpc.py

필수 라이브러리

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

  1. JET 응용 프로그램 및 관련 파일이 디바이스에 있는지 확인합니다.
  2. 구성 모드로 들어갑니다.
  3. 서명되지 않은 Python 3 애플리케이션을 실행하도록 디바이스를 설정합니다.
  4. 확장 서비스 응용 프로그램의 계층 구조로 이동합니다.
  5. 응용 프로그램이 백그라운드에서 데몬화된 프로세스로 실행되도록 구성합니다.
  6. 정상 종료 시 애플리케이션이 다시 생성되도록 구성합니다.
  7. 애플리케이션이 실행되고 NETCONF 작업이 수행되는 권한 하에서 usename을 구성합니다.
  8. 구성을 커밋합니다.

    구성을 daemonize 커밋할 때 옵션을 사용하면 응용 프로그램이 자동으로 시작됩니다.

  9. 응용 프로그램이 실행 중인지 확인합니다.

응용 프로그램이 성공적으로 시작되면 outbound_https.log 파일에 메시지를 기록합니다.

참고:

구성을 커밋한 후 응용 프로그램이 자동으로 시작되지 않으면 이 응용 프로그램과 관련된 로그 메시지를 검토하여 문제를 해결하십시오. Junos OS에서 명령을 실행합니다 show log jet.log .

NETCONF 세션 시작

네트워크 관리 시스템에서 실행되는 gRPC 서버는 NETCONF 클라이언트 역할을 하며, Junos 디바이스의 JET 애플리케이션은 gRPC 클라이언트 및 NETCONF 서버 역할을 합니다. gRPC 서버 및 JET 응용 프로그램을 시작한 후 JET 응용 프로그램은 지정된 포트의 gRPC 서버에 연결을 시도합니다. 연결에 성공하면 gRPC 클라이언트가 gRPC 서버를 인증합니다. 서버 인증에 성공하면 NETCONF 세션이 자동으로 시작됩니다.

아웃바운드 HTTPS를 통해 NETCONF 세션을 설정하려면 다음을 수행합니다.

  1. 네트워크 관리 시스템에서 gPRC 서버를 아직 시작하지 않은 경우 서버를 시작하고 연결 포트를 지정합니다.

    NETCONF 세션이 자동으로 시작됩니다.

  2. 출력을 검토하여 세션이 성공적으로 설정되었는지 확인합니다.

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

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