Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

타사 애플리케이션 관리

인터셉트 라이브러리 사용

Junos OS Evolved는 네이티브 Linux에서 실행되므로 타사 애플리케이션을 실행할 수 있습니다. Linux가 인터페이스 및 경로 데이터와 같은 요청된 네트워크 토폴로지 정보를 표시하는 방식과 Junos OS가 이 정보를 표시하는 방식 사이에는 약간의 차이가 있습니다. CLI는 이러한 차이를 극복하도록 설계되었습니다. 그러나 일반적으로 네이티브 Linux에서 실행되는 타사 애플리케이션은 셸 명령을 사용하여 네이티브 Linux 소스에서 직접 이 정보를 가져옵니다.

Junos OS Evolved는 네트워크 토폴로지 정보에 대한 셸 요청을 Junos OS에서 정보를 얻을 수 있는 공간으로 리디렉션하는 가로채기 메커니즘을 사용합니다. 이 인터셉트 메커니즘은 인터셉트 라이브러리를 통해 수행되며, libsi.so libnli.so사전 로드합니다. 인터셉트 라이브러리를 미리 로드한 후, 특정 유형의 요청이 가로채고 Junos OS 정보를 표시합니다.

인터셉트 라이브러리는 선택 사항입니다. 애플리케이션에 표 1에 언급된 API가 필요한 경우에만 필요합니다.

표 1: 인터셉트 라이브러리가 필요한 API

API

설명

패킷 IO 및 Linux 소켓 API

관리 및/또는 데이터 인터페이스를 통해 패킷을 송수신하는 기능. 보내기, 받기, 듣기와 같은 표준 libc.

RTNETLINK

rtnetlink를 사용하여 인터페이스, 경로와 같은 네트워킹 상태를 쿼리할 수 있습니다.

넷디바이스

네트워크 디바이스 구성 기능.

절차

Linux 커널에서 제공하는 표준 인터페이스를 사용하여 커널 데이터 구조를 쿼리하는 기능.

Junos API

주니퍼 노스바운드 API(NetConf/JET/Telemetry)에 액세스할 수 있습니다.

참고:

주니퍼 노스바운드 API에 대한 자세한 내용은 다음을 참조하십시오.

참고:

Junos OS Evolved 릴리스 20.1R1은 다음과 같은 기능을 지원합니다.

  • 구성을 사용하여 set system netlink-async-mode NETLINK_ROUTE 비동기 알림을 사용하도록 설정합니다. 이 기능은 기본적으로 비활성화되어 있습니다. 현재 넷링크 비동기 모드를 표시하는 데 사용합니다 show nsld mode .

  • SIOCETHTOOL 다른 애플리케이션에서 사용할 수 있는 ioctl입니다.

  • 넷링크 경로 속성을 통한 다중 경로 다음 홉 경로 정보.

사전 로드된 Linux 명령의 예

preload 지시문이 작동하는 예는 인터페이스를 표시하는 명령을 ifconfig사용하여 나와 있습니다.

인터셉트 라이브러리를 사용하여 명령을 미리 로드 ifconfig 하면 Junos OS 인터페이스 정보가 반환됩니다. 인터셉트 라이브러리는 논리적 인터페이스만 변환합니다. 이 예에서는 lo0 및 re0:mgmt-0.0에만 논리적 인터페이스가 있기 때문에 출력은 사전 로드된 ifconfig 명령에 대해 이 두 인터페이스만 표시합니다.

기본적으로 사전 libsi.so 로드되는 libnli.so Junos OS Evolved와 함께 제공되는 셸인 jbash를 실행해도 동일한 결과를 얻을 수 있습니다.

주의:

jbash를 사용하여 네트워크 상태 정보를 가져옵니다. jbash를 기본 셸로 사용하지 마십시오.

인터셉트 라이브러리를 사용하여 명령을 미리 로드하지 않고 명령을 실행하면 표시된 출력은 Linux에서 나옵니다. 다음 출력은 Junos OS의 출력보다 깁니다. Linux는 Junos CLI처럼 물리적 인터페이스와 논리적 인터페이스를 구분하지 않습니다.

인터페이스 이름 변환

이 가로채기 메커니즘을 사용하는 데 있어 한 가지 제한 요인은 Linux 인터페이스 명명이 Junos OS 인터페이스 명명과 호환되지 않는다는 것입니다. Linux는 15바이트 인터페이스 이름(15 + null 문자)을 지원합니다. 이 제한을 초과하는 네트워크 인터페이스 이름은 출력에서 잘립니다. Junos OS 논리적 인터페이스 이름은 15바이트보다 길 수 있습니다(예: et-0/0/10:2.32767).

이 차이를 해결하기 위해 Junos OS Evolved는 변환 규칙( 표 2 참조)을 사용하여 논리적 인터페이스 이름을 Linux 호환 형식으로 렌더링합니다. 번역은 다음과 같은 name-fpcSlot/picSlot/port:channelId.subUnit 형식을 렌더링합니다. nn-ffpttccssss 이 규칙에 따라 변환된 인터페이스 이름을 사용하여 타사 애플리케이션은 Junos OS에서 토폴로지 정보를 효과적으로 가져올 수 있습니다.

논리적 인터페이스 이름의 번역만 지원되며, 채널화 및 비채널화된 논리적 인터페이스 이름의 번역이 모두 지원됩니다.

표 2: 인터페이스 이름에 대한 변환 규칙

설명

할당 공간(바이트)

범위

nn

매핑된 이름 바이트

2

ff

육각형의 FPC

2

0-255

p

육각형의 PIC

1

0-15

TT

16진수의 포트 번호

2

0-255

참조

헥스로 된 채널; 존재하지 않는 경우 "xx"를 사용하십시오.

2

0-255

SSSS

육각형의 하위 단위

4

0-65535

관리 인터페이스를 제외하고, 논리적 인터페이스 이름에 하이픈(-)이 없는 경우, 이름의 점(.)은 밑줄(_)으로 변경됩니다. ifdname.subunit 예: 로 번역됩니다.ifdname_subunit

관리 인터페이스의 경우, reX:mgmt-Y.Z 로 변환됩니다. mgmt-x-yy-zzzz여기서 x, yy, zzzz는 고정 길이에 대해 0으로 16진수 패딩되어 있습니다. 그리고 역번역은 같은 라인에서 발생합니다.

Junos 논리적 인터페이스 이름 및 Linux 호환 형식의 예는 표 3 을 참조하십시오.

표 3: 변환된 논리적 인터페이스 이름의 예

Junos 논리적 인터페이스 이름

변환된 Linux 호환 인터페이스 이름

동부 표준-1/2/3.4

ET-01203XX0004

GE-1/2/3.32

GE-01203XX0020

동부 표준-1/15/3.4

ET-01F03XX0004

ET-1/2/255:6.7

ET-012FF060007

ET-1/2/4:5.32767

ET-01204057FFF

re0:관리-1.2

관리-0-01-0002

ae0.1

ae0_1

irb0.11

irb0_11

미리 로드 libnli.so하여 Junos OS 상태에 액세스할 때 출력의 인터페이스 이름은 변환된 Linux 호환 인터페이스 이름으로 표시됩니다. 또한 명령에서 인수로 사용할 때는 번역된 Linux 호환 인터페이스 이름을 사용해야 합니다. 변환된 et-01000000000 인터페이스 이름은 다음 예에서 인수로 사용됩니다.

인터셉트 기능에 대한 주의 사항

이 가로채기 기능은 읽기 전용 요청을 지원합니다. 모든 쓰기 요청은 오류를 반환합니다.

특정 Junos 네트워크 상태의 표현은 동급 Linux에 매핑되지 않을 수 있습니다. 이러한 경우 데이터는 생략되거나 유사한 Linux 모델에 다시 매핑됩니다. 예를 들어, Junos OS Evolved는 네이티브 Linux에서 유사한 구현이 없는 것과 같은 composite 다양한 unilist 다음 홉 유형 제품군을 지원합니다.

정적으로 연결된 타사 애플리케이션은 가로챌 수 없으므로 이 기능에서 지원되지 않습니다.

소켓 가로채기 라이브러리 없이 애플리케이션 실행

일부 애플리케이션은 소켓 인터셉트(SI) 라이브러리에 필요한 환경 변수를 사용할 LD_PRELOAD 수 없습니다. 이러한 비 SI 애플리케이션에 대한 TCP 지원을 사용하려면 애플리케이션을 시작하기 전에 환경 변수를 NO_SI_INTERCEPT 설정하십시오. 이 변수를 설정하면 Junos OS Evolved는 소켓 인터셉트(SI) 라이브러리 대신 커널 인터셉트를 사용합니다.

비SI 애플리케이션은 TCP를 사용하여 관리 및 WAN 인터페이스를 통해 통신하며 TCP, UDP 또는 UDS를 사용하여 동일한 디바이스에서 실행되는 다른 애플리케이션에 연결할 수 있습니다.

참고:

상위 프로세스 내에 설정된 모든 환경 변수는 하위 프로세스에서 상속됩니다. 활성화된 상태에서 NO_SI_INTERCEPT 프로세스를 시작하면 모든 하위 프로세스가 설정을 상속합니다. 자식 프로세스에 소켓 가로채기 라이브러리를 사용하려면 새 자식의 환경을 제거하고 NO_SI_INTERCEPT 추가합니다 LD_PRELOAD=libsi.so .

제한 사항

비SI 애플리케이션에는 다음과 같은 제한이 적용됩니다.

  • 비 SI 애플리케이션은 기본 Linux 네트워크 네임스페이스에서 실행되어야 합니다. 컨테이너화된 비SI 애플리케이션은 호스트 네트워크 네임스페이스에서 실행되어야 합니다.

  • IPsec 인터페이스는 비 SI 애플리케이션에 대한 연결을 지원하지 않습니다.

  • TCP-AO 및 MD5를 포함한 TCP 인증 프로토콜은 지원되지 않습니다.

  • DSCP 관련 CLI 구성은 비 SI 애플리케이션 소켓에는 적용되지 않습니다.

  • DNS 이름 확인이 필요한 비 SI 애플리케이션은 관리 인터페이스를 통해 연결할 수 있는 DNS 서버를 사용해야 합니다.

  • 비 SI 애플리케이션은 gRPC 또는 유사한 메커니즘을 사용해서만 네트워크 상태를 검색할 수 있습니다. Netlink API는 비 SI 애플리케이션이 Junos OS Evolved 네트워크 상태에 액세스하는 데 작동하지 않습니다.

  • 하위 프로세스가 환경 변수를 NO_SI_INTERCEPT 상속하는 경우 TCP가 아닌 애플리케이션(예: ping)이 실패합니다. 하위 프로세스가 의도한 LD_PRELOAD=libsi.so NO_SI_INTERCEPT대로 작동하도록 하려면 .

  • 대상 주소와 로컬 엔드포인트 주소 모두 연결할 수 없어 설정된 TCP 소켓에서 전송이 실패하면 SI가 아닌 애플리케이션은 오류를 수신하지 않습니다.

  • GRES(Graceful 라우팅 엔진 전환)는 지원되지 않습니다. 각 라우팅 엔진은 독립적인 상태 비저장 nstackd 인스턴스를 실행합니다.

타사 애플리케이션 제거

타사 응용 프로그램을 제거하는 방법에는 여러 가지가 있습니다. 사용해야 하는 방법은 응용 프로그램을 설치한 방법에 따라 다릅니다.

  • 타사 애플리케이션이 명령 request system software add 과 함께 설치된 경우 명령을 request system software delete 사용하여 동일한 애플리케이션을 제거할 수 있습니다.

  • 이러한 애플리케이션을 제거하는 첫 번째 단계는 키와 명령의 연결을 해제하는 것입니다.request security system-keystore unlink key

    그런 다음 셸 명령을 사용하여 rm -f /path/to/binary1 /path/to/binary2 응용 프로그램에 대해 설치한 모든 이진 파일을 제거합니다.

  • 타사 애플리케이션이 Docker 컨테이너를 통해 설치된 경우 다음 Docker 명령을 사용하여 컨테이너를 제거합니다.