管理第三方应用
使用拦截库
Junos OS 演化版可以在原生 Linux 上运行,因此可以运行第三方应用。Linux 显示请求的网络拓扑信息(如接口和路由数据)的方式与 Junos OS 显示此信息的方式之间存在一些差异。CLI 就是为了克服这些差异而设计的。但通常情况下,在本机 Linux 上运行的第三方应用程序使用 shell 命令直接从本机 Linux 源获取此信息。
Junos OS 演化版使用拦截机制,将网络拓扑信息的 shell 请求重定向到可从 Junos OS 获取信息的空间。此拦截机制是通过拦截库 libsi.so libnli.so和预加载的 来完成的。预加载拦截库后,某些类型的请求将被拦截并显示 Junos OS 信息。
截距库是可选的;仅当应用需要 表 1 中提到的 API 时,才需要它们:
Junos OS 演化版 20.1R1 支持以下功能:
-
使用该
set system netlink-async-mode配置启用NETLINK_ROUTE异步通知。默认情况下,此功能处于禁用状态。show nsld mode用于显示当前网络链路异步模式。 -
SIOCETHTOOLioctl,可供其他应用程序使用。 -
通过网络链路路由属性的多路径下一跃点路由信息。
预加载的 Linux 命令示例
下面是使用 ifconfig命令 preload 指令的工作原理示例,该命令显示接口。
如果使用 intercept 库预加载命令 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)
您可以通过运行 jbash 获得相同的结果,jbash 是 Junos OS Evolved 提供的 shell,默认情况下会预libnli.solibsi.so加载。
仅使用 jbash 获取网络状态信息。不要使用 jbash 作为默认 shell。
如果在未使用拦截库预加载命令的情况下发出命令,则显示的输出来自 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 + 空字符);超过此限制的网络接口名称将在输出中被截短。Junos OS 逻辑接口名称可以超过 15 个字节,例如 et-0/0/10:2.32767。
为了解决这一差异,Junos OS 演化版使用转换规则(参见 表 2)以符合 Linux 的格式呈现逻辑接口名称。转换将呈现一种格式,例如 name-fpcSlot/picSlot/port:channelId.subUnit nn-ffpttccssss。使用根据此规则转换的接口名称,第三方应用程序可以有效地从 Junos OS 获取拓扑信息。
仅支持逻辑接口名称的转换,并且支持通道化和非通道化逻辑接口名称的转换。
|
value |
描述 |
分配的空间(以字节为单位) |
范围 |
|---|---|---|---|
|
nn |
映射的名称字节 |
2 |
|
|
ff |
十六进制中的 FPC |
2 |
0-255 |
|
p |
十六进制 PIC |
1 |
0-15 |
|
TT |
十六进制端口号 |
2 |
0-255 |
|
抄送 |
十六进制通道;如果不存在,请使用“xx” |
2 |
0-255 |
|
SSS |
十六进制中的亚基 |
4 |
0-65535 |
|
除管理接口外,如果逻辑接口名称中没有连字符 (-),则名称中的点 (.) 将更改为下划线 (_),例如: |
|||
|
对于管理接口, |
|||
有关 Junos 逻辑接口名称及其 Linux 兼容形式的示例,请参阅 表 3 。
|
Junos 逻辑接口名称 |
转换后的 Linux 兼容接口名称 |
|---|---|
|
ET-1/2/3.4 |
ET-01203XX0004 |
|
GE-1/2/3.32 |
GE-01203XX0020 |
|
ET-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 演化版支持一系列丰富的下一跃点类型,例如 composite 在原生 Linux 中没有可比实现的 或 unilist 。
静态链接的第三方应用程序无法被拦截,因此此功能不支持。
在没有套接字拦截库的情况下运行应用程序
某些应用程序不能使用 LD_PRELOAD 套接字拦截 (SI) 库所需的环境变量。要为这些非 SI 应用程序启用 TCP 支持,请在启动应用程序之前设置 NO_SI_INTERCEPT 环境变量。设置此变量后,Junos OS 演化版将使用内核拦截而不是套接字拦截 (SI) 库。
非 SI 应用使用 TCP 通过管理和 WAN 接口进行通信,并可使用 TCP、UDP 或 UDS 连接到在同一设备上运行的其他应用。
父进程中设置的任何环境变量都由子进程继承。如果在启用的情况下 NO_SI_INTERCEPT 启动进程,则所有子进程都继承该设置。若要将套接字拦截库用于子进程,请删除 NO_SI_INTERCEPT 并添加到 LD_PRELOAD=libsi.so 新子进程的环境中。
限制
以下限制适用于非 SI 应用程序:
-
非 SI 应用程序必须在默认的 Linux 网络命名空间中运行。容器化非 SI 应用程序必须在主机网络命名空间中运行。
-
IPsec 接口不支持非 SI 应用程序的连接。
-
不支持 TCP 身份验证协议,包括 TCP-AO 和 MD5。
-
与 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)。每个路由引擎运行一个独立的无
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 key链接。user@host> request security system-keystore unlink key
接下来,删除使用 shell 命令为
rm -f /path/to/binary1 /path/to/binary2应用程序安装的所有二进制文件。user@host:~# rm -f /path/to/binary1 /path/to/binary2
-
如果第三方应用程序是通过 Docker 容器安装的,请使用以下 Docker 命令删除容器:
docker rm container-name