管理第三方应用程序
使用拦截库
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
显示当前的网络链路异步模式。 -
SIOCETHTOOL
IOCTL,可供其他应用程序使用。 -
通过 netlink 路由属性提供多路径下一跳路由信息。
预加载的 Linux 命令示例
下面是使用命令 ifconfig
来显示接口的 preload 指令的工作原理示例。
如果使用拦截库预加载 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 演化版提供的外壳,默认情况下会预加载libnli.so
。libsi.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 获取拓扑信息。
仅支持逻辑接口名称的转换,并且支持通道化和非通道化逻辑接口名称的转换。
价值 |
描述 |
分配的空间(以字节为单位) |
范围 |
---|---|---|---|
nn |
映射名称字节 |
2 |
|
Ff |
十六进制 FPC |
2 |
0-255 |
P |
十六进制图片 |
1 |
0-15 |
Tt |
十六进制端口号 |
2 |
0-255 |
Cc |
十六进制通道;如果不存在,请使用“xx” |
2 |
0-255 |
SSSS |
十六进制亚单位 |
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:MGMT-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 支持一套丰富的下一跃点类型,例如 composite
或 unilist
在本地 Linux 中没有类似实现的类型。
静态链接的第三方应用程序无法拦截,因此不受此功能支持。
删除第三方应用程序
有几种方法可以删除第三方应用程序。应使用的方法基于应用程序的安装方式。
-
如果使用命令
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