サードパーティアプリケーションの管理
インターセプトライブラリの使用
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 |
管理および/またはデータ インターフェイスを介してパケットを送受信する機能。send、receive、listenなどの標準libc。 |
|
rtnetlinkを使用して、インターフェイスやルートなどのネットワーク状態を照会する機能。 |
|
|
ネットワークデバイスの設定が可能。 |
|
|
Linuxカーネルが提供する標準インターフェイスを使用してカーネルデータ構造をクエリする機能。 |
|
|
Junos API |
ジュニパーのノースバウンドAPI(NetConf/JET/Telemetry)へのアクセス機能。 |
ジュニパーのノースバウンドAPIの詳細については、以下を参照してください。
Junos OS Evolvedリリース20.1R1は、以下の機能をサポートしています。
-
set system netlink-async-mode設定を使用して、NETLINK_ROUTE非同期通知を有効にします。この機能はデフォルトでは無効になっています。show nsld modeを使用して、現在のネットリンク非同期モードを表示します。 -
SIOCETHTOOLioctl は、他のアプリケーションで使用できます。 -
ネットリンクルート属性によるマルチパスネクストホップルート情報
プリロードされたLinuxコマンドの例
preload ディレクティブの動作例は、インターフェイスを表示するコマンド ifconfig を使用します。
インターセプトライブラリを使用して ifconfig コマンドをプリロードすると、Junos OSインターフェイス情報が返されます。インターセプトライブラリは論理インターフェイスのみを変換することに注意してください。この例では、lo0とre0:mgmt-0.0にのみ論理インターフェイスがあるため、出力にはプリロードされた ifconfig コマンドのこれら2つのインターフェイスのみが表示されます。
[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)
デフォルトで libnli.so と libsi.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)
インターフェイス名変換
このインターセプトメカニズムを使用する際の制限要因の1つは、Linuxインターフェイス命名規則がJunos OSインターフェイス命名規則と互換性がないことです。Linux は 15 バイトのインターフェイス名 (15 + null 文字) をサポートしています。この制限を超えるネットワークインターフェイス名は、出力で切り捨てられます。Junos OS論理インターフェイス名は、 et-0/0/10:2.32767のように15バイトより長くすることができます。
この違いを回避するために、Junos OS Evolvedは変換ルール( 表2を参照)を使用して、論理インターフェイス名をLinux準拠の形式でレンダリングします。翻訳は、 name-fpcSlot/picSlot/port:channelId.subUnit から nn-ffpttccssssなどの形式をレンダリングします。このルールに従って変換されたインターフェイス名を使用して、サードパーティアプリケーションはJunos OSからトポロジー情報を効果的に取得できます。
論理インターフェイス名の変換のみがサポートされており、チャネル化された論理インターフェイス名と非チャネル化された論理インターフェイス名の両方の変換がサポートされます。
|
値 |
説明 |
割り当てられた領域(バイト単位) |
範囲 |
|---|---|---|---|
|
nn |
マップされた名前バイト数 |
2 |
|
|
FF |
fpc in hex |
2 |
0-255 |
|
p |
十六進数のPIC |
1 |
0-15 |
|
TT |
16進数のポート番号 |
2 |
0-255 |
|
CC |
ヘックスのチャンネル。存在しない場合は、「xx」を使用してください |
2 |
0-255 |
|
SSSS |
HEXのサブユニット |
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は、ネイティブ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など)は失敗します。子プロセスが意図したとおりに機能できるようにするには、NO_SI_INTERCEPTなしでLD_PRELOAD=libsi.soを設定します。 -
宛先アドレスとローカル エンドポイント アドレスの両方に到達できないために確立された 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
次に、
rm -f /path/to/binary1 /path/to/binary2シェルコマンドを使用して、アプリケーションにインストールしたバイナリを削除します。user@host:~# rm -f /path/to/binary1 /path/to/binary2
-
サードパーティ製アプリケーションがDockerコンテナを介してインストールされている場合は、次のDockerコマンドを使用してコンテナを削除します。
docker rm container-name