타사 애플리케이션 관리
인터셉트 라이브러리 사용
Junos OS Evolved는 네이티브 Linux에서 실행되므로 타사 애플리케이션을 실행할 수 있습니다. Linux가 인터페이스 및 경로 데이터와 같은 요청된 네트워크 토폴로지 정보를 표시하는 방식과 Junos OS가 이 정보를 표시하는 방식 사이에는 약간의 차이가 있습니다. CLI는 이러한 차이를 극복하도록 설계되었습니다. 그러나 일반적으로 네이티브 Linux에서 실행되는 타사 애플리케이션은 셸 명령을 사용하여 네이티브 Linux 소스에서 직접 이 정보를 가져옵니다.
Junos OS Evolved는 네트워크 토폴로지 정보에 대한 셸 요청을 Junos OS에서 정보를 얻을 수 있는 공간으로 리디렉션하는 가로채기 메커니즘을 사용합니다. 이 인터셉트 메커니즘은 인터셉트 라이브러리를 통해 수행되며, libsi.so libnli.so사전 로드합니다. 인터셉트 라이브러리를 미리 로드한 후, 특정 유형의 요청이 가로채고 Junos OS 정보를 표시합니다.
인터셉트 라이브러리는 선택 사항입니다. 애플리케이션에 표 1에 언급된 API가 필요한 경우에만 필요합니다.
|
API |
설명 |
|---|---|
|
패킷 IO 및 Linux 소켓 API |
관리 및/또는 데이터 인터페이스를 통해 패킷을 송수신하는 기능. 보내기, 받기, 듣기와 같은 표준 libc. |
|
rtnetlink를 사용하여 인터페이스, 경로와 같은 네트워킹 상태를 쿼리할 수 있습니다. |
|
|
네트워크 디바이스 구성 기능. |
|
|
Linux 커널에서 제공하는 표준 인터페이스를 사용하여 커널 데이터 구조를 쿼리하는 기능. |
|
|
Junos API |
주니퍼 노스바운드 API(NetConf/JET/Telemetry)에 액세스할 수 있습니다. |
주니퍼 노스바운드 API에 대한 자세한 내용은 다음을 참조하십시오.
Junos OS Evolved 릴리스 20.1R1은 다음과 같은 기능을 지원합니다.
-
구성을 사용하여
set system netlink-async-modeNETLINK_ROUTE 비동기 알림을 사용하도록 설정합니다. 이 기능은 기본적으로 비활성화되어 있습니다. 현재 넷링크 비동기 모드를 표시하는 데 사용합니다show nsld mode. -
SIOCETHTOOL다른 애플리케이션에서 사용할 수 있는 ioctl입니다. -
넷링크 경로 속성을 통한 다중 경로 다음 홉 경로 정보.
사전 로드된 Linux 명령의 예
preload 지시문이 작동하는 예는 인터페이스를 표시하는 명령을 ifconfig사용하여 나와 있습니다.
인터셉트 라이브러리를 사용하여 명령을 미리 로드 ifconfig 하면 Junos OS 인터페이스 정보가 반환됩니다. 인터셉트 라이브러리는 논리적 인터페이스만 변환합니다. 이 예에서는 lo0 및 re0:mgmt-0.0에만 논리적 인터페이스가 있기 때문에 출력은 사전 로드된 ifconfig 명령에 대해 이 두 인터페이스만 표시합니다.
[vrf:none] user@host_RE0:~# LD_PRELOAD=libnli.so ifconfig
lo0_0 Link encap:Ethernet HWaddr 00:00:00:00:00:00
inet addr:128.102.224.244 Mask:255.255.255.255
inet6 addr: abcd::128:102:224:244/128 Scope:Global
inet6 addr: fe80::5668:a6f0:6e:b79/128 Scope:Link
UP LOOPBACK RUNNING MTU:65535 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
mgmt-0-00-0000 Link encap:Ethernet HWaddr 56:68:a6:6e:0b:79
inet addr:10.102.224.244 Bcast:10.102.239.255 Mask:255.255.240.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1103938 errors:0 dropped:0 overruns:0 frame:0
TX packets:1905 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:85166899 (81.2 MiB) TX bytes:243066 (237.3 KiB)
기본적으로 사전 libsi.so 로드되는 libnli.so Junos OS Evolved와 함께 제공되는 셸인 jbash를 실행해도 동일한 결과를 얻을 수 있습니다.
jbash를 사용하여 네트워크 상태 정보를 가져옵니다. jbash를 기본 셸로 사용하지 마십시오.
인터셉트 라이브러리를 사용하여 명령을 미리 로드하지 않고 명령을 실행하면 표시된 출력은 Linux에서 나옵니다. 다음 출력은 Junos OS의 출력보다 깁니다. Linux는 Junos CLI처럼 물리적 인터페이스와 논리적 인터페이스를 구분하지 않습니다.
[vrf:none] user@host_RE0:~# ifconfig -a
eth0 Link encap:Ethernet HWaddr 56:68:a6:6e:0b:79
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:1608443 errors:44 dropped:0 overruns:0 frame:44
TX packets:2652 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:150837081 (143.8 MiB) TX bytes:341675 (333.6 KiB)
eth1 Link encap:Ethernet HWaddr 56:68:a6:6e:0b:7e
UP BROADCAST RUNNING PROMISC MULTICAST MTU:9600 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:418 (418.0 B)
eth2 Link encap:Ethernet HWaddr 56:68:a6:6e:0b:83
UP BROADCAST RUNNING PROMISC MULTICAST MTU:9600 Metric:1
RX packets:907046 errors:0 dropped:0 overruns:0 frame:0
TX packets:926156 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:70342248 (67.0 MiB) TX bytes:119965968 (114.4 MiB)
eth3 Link encap:Ethernet HWaddr 56:68:a6:6e:0b:8d
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
eth4 Link encap:Ethernet HWaddr 56:68:a6:6e:0b:9d
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:1607983 errors:44 dropped:0 overruns:0 frame:44
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:150335380 (143.3 MiB) TX bytes:0 (0.0 B)
ingvrf Link encap:Ethernet HWaddr 12:6e:39:d6:5a:64
UP RUNNING NOARP MASTER MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
iri Link encap:Ethernet HWaddr 4e:a2:93:c0:ac:67
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP RUNNING NOARP MASTER MTU:65536 Metric:1
RX packets:2199380 errors:0 dropped:0 overruns:0 frame:0
TX packets:2216726 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:674308465 (643.0 MiB) TX bytes:735412009 (701.3 MiB)
jtd0 Link encap:Ethernet HWaddr 06:50:4e:19:c6:c5
inet6 addr: fe80::450:4eff:fe19:c6c5/64 Scope:Link
UP BROADCAST RUNNING NOARP MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:210 (210.0 B)
jtdrop Link encap:Ethernet HWaddr ba:d0:d0:72:7e:eb
inet6 addr: fe80::b8d0:d0ff:fe72:7eeb/64 Scope:Link
UP BROADCAST RUNNING NOARP MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:210 (210.0 B)
jtdv0 Link encap:Ethernet HWaddr 56:2a:0c:39:f1:5d
inet6 addr: fe80::542a:cff:fe39:f15d/64 Scope:Link
UP BROADCAST RUNNING NOARP MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:280 (280.0 B)
jtdv50 Link encap:Ethernet HWaddr 56:5e:67:d6:e2:d2
inet6 addr: fe80::545e:67ff:fed6:e2d2/64 Scope:Link
UP BROADCAST RUNNING NOARP MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:280 (280.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:32 errors:0 dropped:0 overruns:0 frame:0
TX packets:32 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:2144 (2.0 KiB) TX bytes:2144 (2.0 KiB)
mgmt_junos Link encap:Ethernet HWaddr 6a:75:4b:20:d0:4e
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP RUNNING NOARP MASTER MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
sit0 Link encap:UNSPEC HWaddr 00-00-00-00-30-30-30-00-00-00-00-00-00-00-00-00
NOARP MTU:1480 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
tunl0 Link encap:IPIP Tunnel HWaddr
NOARP MTU:1480 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
vcb Link encap:Ethernet HWaddr 56:68:a6:6e:0b:83
inet addr:176.1.1.1 Bcast:0.0.0.0 Mask:255.255.255.252
UP BROADCAST RUNNING PROMISC MULTICAST MTU:9600 Metric:1
RX packets:907043 errors:0 dropped:0 overruns:0 frame:0
TX packets:924347 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:57643466 (54.9 MiB) TX bytes:118743890 (113.2 MiB)
vfb Link encap:Ethernet HWaddr 56:68:a6:6e:0b:7e
UP BROADCAST RUNNING PROMISC MULTICAST MTU:9600 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
vib Link encap:Ethernet HWaddr 3e:fb:67:87:16:1a
inet addr:128.0.0.4 Bcast:0.0.0.0 Mask:255.0.0.0
inet6 addr: fe80::3cfb:67ff:fe87:161a/64 Scope:Link
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:74 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:3420 (3.3 KiB)
vmb0 Link encap:Ethernet HWaddr 56:68:a6:6e:0b:79
inet addr:10.102.224.244 Bcast:0.0.0.0 Mask:255.255.240.0
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:1602504 errors:0 dropped:0 overruns:0 frame:0
TX packets:2645 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:124666750 (118.8 MiB) TX bytes:340201 (332.2 KiB)
vmb1 Link encap:Ethernet HWaddr 56:68:a6:6e:0b:9d
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:1602784 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:124008554 (118.2 MiB) TX bytes:0 (0.0 B)
vrf0 Link encap:Ethernet HWaddr ca:12:9e:40:a8:01
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP RUNNING NOARP MASTER MTU:65536 Metric:1
RX packets:124413 errors:0 dropped:0 overruns:0 frame:0
TX packets:2597 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:19087613 (18.2 MiB) TX bytes:338185 (330.2 KiB)
vrf50 Link encap:Ethernet HWaddr 06:de:d7:3d:18:be
UP RUNNING NOARP MASTER MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
인터페이스 이름 변환
이 가로채기 메커니즘을 사용하는 데 있어 한 가지 제한 요인은 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에서 토폴로지 정보를 효과적으로 가져올 수 있습니다.
논리적 인터페이스 이름의 번역만 지원되며, 채널화 및 비채널화된 논리적 인터페이스 이름의 번역이 모두 지원됩니다.
|
값 |
설명 |
할당 공간(바이트) |
범위 |
|---|---|---|---|
|
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 |
|
관리 인터페이스를 제외하고, 논리적 인터페이스 이름에 하이픈(-)이 없는 경우, 이름의 점(.)은 밑줄(_)으로 변경됩니다. |
|||
|
관리 인터페이스의 경우, |
|||
Junos 논리적 인터페이스 이름 및 Linux 호환 형식의 예는 표 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 인터페이스 이름은 다음 예에서 인수로 사용됩니다.
[vrf:none] user@host_RE0:~# LD_PRELOAD=libnli.so ifconfig et-01000000000
et-01000000000 Link encap:Ethernet HWaddr 5c:31:b0:35:01:ff
inet addr:20.20.20.24 Bcast:20.20.20.255 Mask:255.255.255.0
inet6 addr: 2000:200:20::2/64 Scope:Global
inet6 addr: fe80::5e31:b0ff:fe35:1ff/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1514 Metric:1
RX packets:312 errors:0 dropped:0 overruns:0 frame:0
TX packets:156 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:31004 (30.2 KiB) TX bytes:21346 (20.8 KiB)
인터셉트 기능에 대한 주의 사항
이 가로채기 기능은 읽기 전용 요청을 지원합니다. 모든 쓰기 요청은 오류를 반환합니다.
특정 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.soNO_SI_INTERCEPT대로 작동하도록 하려면 . -
대상 주소와 로컬 엔드포인트 주소 모두 연결할 수 없어 설정된 TCP 소켓에서 전송이 실패하면 SI가 아닌 애플리케이션은 오류를 수신하지 않습니다.
-
GRES(Graceful 라우팅 엔진 전환)는 지원되지 않습니다. 각 라우팅 엔진은 독립적인 상태 비저장
nstackd인스턴스를 실행합니다.
타사 애플리케이션 제거
타사 응용 프로그램을 제거하는 방법에는 여러 가지가 있습니다. 사용해야 하는 방법은 응용 프로그램을 설치한 방법에 따라 다릅니다.
-
타사 애플리케이션이 명령
request system software add과 함께 설치된 경우 명령을request system software delete사용하여 동일한 애플리케이션을 제거할 수 있습니다.user@host> request system software delete ima-test Removing version 'ima-test'. Software ... done. Data ... done. Version 'ima-test' removed successfully.
-
이러한 애플리케이션을 제거하는 첫 번째 단계는 키와 명령의 연결을 해제하는 것입니다.
request security system-keystore unlink keyuser@host> request security system-keystore unlink key
그런 다음 셸 명령을 사용하여
rm -f /path/to/binary1 /path/to/binary2응용 프로그램에 대해 설치한 모든 이진 파일을 제거합니다.user@host:~# rm -f /path/to/binary1 /path/to/binary2
-
타사 애플리케이션이 Docker 컨테이너를 통해 설치된 경우 다음 Docker 명령을 사용하여 컨테이너를 제거합니다.
docker rm container-name