基于增强型出站 HTTPS 的 NETCONF 和 Shell 会话
总结 客户端应用程序可以在受支持的 Junos 设备上使用增强的出站 HTTPS 建立网络配置协议 (NETCONF) 会话和 shell 会话。
了解基于增强型出站 HTTPS 的 NETCONF 和 Shell 会话
NETCONF 和 Shell 会话比出站 HTTPS 的优势
启用 NETCONF 或 shell 客户端应用程序来管理无法通过其他协议访问的设备。
使用出站 HTTPS 客户端的基于证书的身份验证,启用设备的远程管理。
基于出站 HTTPS 的 NETCONF 和 Shell 会话概述
您可以通过出站 HTTPS 在受支持的 Junos 设备和网络管理系统之间建立 NETCONF 和 shell 会话。通过出站 HTTPS 的 NETCONF 或 shell 会话使您能够远程管理可能无法通过 SSH 等其他协议访问的设备。例如,如果设备在防火墙后面,而防火墙或其他安全工具会阻止这些协议,则可能会发生这种情况。另一方面,HTTPS 使用标准端口,在大多数环境中通常允许出站。
在受支持的设备上,Junos 软件映像包括一个瞻博网络扩展工具包 (JET) 应用程序,该应用程序支持使用出站 HTTPS 建立 NETCONF 或 shell 会话。JET 应用程序使用 gRPC 框架连接到出站 HTTPS 客户端,该客户端由在网络管理系统上运行的 gRPC 服务器组成。gRPC 是一个与语言无关的开源远程过程调用 (RPC) 框架。 图 1 以最简单的形式展示了出站 HTTPS 设置。

在这种情况下,gRPC 服务器充当 NETCONF/shell 客户端,JET 应用程序是 gRPC 客户端和 NETCONF/shell 服务器。gRPC 服务器侦听指定端口上的连接请求,默认为端口 443。您可以将 JET 应用程序配置为扩展服务。相关连接和身份验证信息被传递到脚本。脚本运行时,会自动尝试连接到配置的主机和端口上的 gRPC 服务器。
JET 应用程序和 gRPC 服务器通过 TLS 加密的 gRPC 会话建立永久 HTTPS 连接。JET 应用程序使用 X.509 数字证书对 gRPC 服务器进行身份验证,如果身份验证成功,则会通过此连接建立请求的 NETCONF 或 shell 会话。NETCONF 操作和 shell 命令在为扩展服务应用程序配置的用户的帐户权限下执行。
出站 HTTPS 连接使用 X.509 数字证书对 gRPC 服务器进行身份验证。数字证书是通过可信第三方(称为证书颁发机构或证书颁发机构 (CA)来验证您的身份的一种电子手段。证书颁发机构颁发数字证书,该证书可用于通过证书验证在两个端点之间建立安全连接。X.509 标准定义了证书的格式。要在受支持的 Junos 设备上通过出站 HTTPS 建立 NETCONF 或 shell 会话,gRPC 服务器必须具有有效的 X.509 证书。
增强型出站 HTTPS 支持:
-
连接到多个出站 HTTPS 客户端
-
为每个出站 HTTPS 客户端配置多个备份 gRPC 服务器
-
使用给定客户端建立多个并发 NETCONF 和 shell 会话
-
使用自签名或 CA 签名的 X.509 数字证书对出站 HTTPS 客户端进行验证
-
使用共享密钥对 Junos 设备进行验证
增强型出站 HTTPS 上会话的连接工作流程
在通过出站 HTTPS 举行的 NETCONF 或 shell 会话中,在网络管理系统上运行的 gRPC 服务器充当 NETCONF/shell 客户端,而 Junos 设备上的 JET 应用程序是 gRPC 客户端和 NETCONF/shell 服务器。您可以配置多个出站 HTTPS 客户端,也可以为每个客户端配置一个或多个备份 gRPC 服务器。JET 应用程序随时仅连接到客户端服务器列表中一个 gRPC 服务器。
gRPC 客户端和服务器通过出站 HTTPS 建立 NETCONF 或 shell 会话,请执行以下操作:
-
gRPC 服务器侦听指定端口上的传入连接,如果未指定端口,则侦听默认端口 443 上的传入连接。
-
gRPC 客户端会与配置的 gRPC 服务器和端口启动 TCP/IP 连接。如果配置具有一个或多个备份 gRPC 服务器的出站 HTTPS 客户端,则 gRPC 客户端会尝试连接到列表中的各个服务器,直到它建立连接。
-
gRPC 客户端发送 TLS
ClientHello
消息以启动 TLS 握手。 -
gRPC 服务器会发送一
ServerHello
条消息及其证书。 -
gRPC 客户端验证 gRPC 服务器的身份。
-
gRPC 客户端会将为该出站 HTTPS 客户端配置的设备 ID 和共享密钥发送至 gRPC 服务器。
-
出站 HTTPS 客户端请求 NETCONF 或 shell 会话,gRPC 服务器使用设备 ID 和共享密钥对 Junos 设备进行身份验证。如果身份验证成功,将建立会话。
-
如果请求 NETCONF 会话,服务器和客户端将交换 NETCONF
<hello>
消息。 -
NETCONF 或 shell 客户端应用会根据需要执行操作。
gRPC 客户端会与同一 gRPC 服务器建立另一个 TCP/IP 连接,gRPC 客户端和服务器重复此过程,从而使出站 HTTPS 客户端能够与网络设备建立多个 NETCONF 和 shell 会话。
如何通过增强型出站 HTTPS 建立 NETCONF 和 Shell 会话
您可以使用作为 Junos 软件映像一部分的 JET 应用程序在网络管理系统 (NMS) 和受支持的 Junos 设备之间通过出站 HTTPS 建立 NETCONF 和 shell 会话。配置为扩展服务的 JET 应用程序会启动与在 NMS 上运行的 gRPC 服务器的连接,并通过 TLS 加密的 gRPC 会话建立永久 HTTPS 连接。NETCONF 或 shell 会话通过此 HTTPS 连接运行。在这种情况下,gRPC 服务器是 NETCONF/shell 客户端,JET 应用程序是 gRPC 客户端和 NETCONF/shell 服务器。
通过增强型出站 HTTPS 建立会话需要以下硬件和软件:
运行 Python 3.5 或更高版本的网络管理系统
运行 Junos OS 演化版的设备或具有升级版 FreeBSD 20.3 或更高版本且支持运行 JET 应用程序的 Junos OS 的设备
注意:有关支持的设备,请参阅 功能浏览器。
图 2 展示了在随后的任务中引用的设置。Junos 设备上的管理接口名称因平台和操作系统而异。

客户端和服务器通过出站 HTTPS 建立 NETCONF 或 shell 会话之前,您必须满足以下部分讨论的要求:
- 获取 gRPC 服务器的 X.509 证书
- 设置 gRPC 服务器
- 为 NETCONF 或 Shell 用户配置用户帐户
- 配置出站 HTTPS 客户端
- 在 Junos 设备上配置出站 HTTPS 扩展服务
- 启动 NETCONF 或 Shell 会话
获取 gRPC 服务器的 X.509 证书
出站 HTTPS 连接使用 X.509 公钥证书来验证在网络管理系统上运行的 gRPC 服务器的身份。gRPC 堆栈支持 X.509 v3 证书格式。
gRPC 服务器证书的要求包括:
-
证书可以自签名,也可由证书颁发机构 (CA) 签名。
-
证书必须在通用名称 (CN) 字段中定义 gRPC 服务器的主机名,或者在 SubjectAltName (SAN) IP 地址字段中定义 gRPC 服务器的 IP 地址。Junos 设备必须使用相同的值才能与服务器建立连接。如果证书定义了 SubjectAltName IP 地址字段,设备在身份验证期间将忽略公用名字段。
-
证书必须采用 PEM 编码并使用 .crt 扩展。
-
证书及其密钥必须分别命名 为 server.crt 和 server.key。
要使用 OpenSSL 获取证书:
设置 gRPC 服务器
网络管理系统需要以下软件:
Python 3.5 或更高版本
Junos 设备上的网络管理系统和 JET 应用程序使用 gRPC 框架,通过 TLS 加密的 gRPC 会话建立永久 HTTPS 连接。网络管理系统必须安装 gRPC 堆栈,并运行侦听指定端口的连接请求的 gRPC 服务器。瞻博网络在 GitHub 上的瞻博网络 netconf-https-outbound
存储库中提供必要的 proto 定义文件和示例 gRPC 服务器应用程序文件。
本节在运行 Ubuntu 18.04 的网络管理系统上设置 gRPC 服务器。如果运行的是其他操作系统,请使用适合您的操作系统的命令。
在运行 Ubuntu 18.04 的网络管理系统上设置 gRPC 服务器:
gRPC 服务器无限期侦听指定端口的传入连接。将 Junos 设备配置为连接到 gRPC 服务器并建立连接和会话后,您可以根据需要执行 NETCONF 操作或 shell 命令。
为 NETCONF 或 Shell 用户配置用户帐户
要通过出站 HTTPS 建立 NETCONF 或 shell 会话,必须在 Junos 设备上本地创建用户帐户。使用此帐户在设备上执行该会话的 NETCONF 或 shell 操作。JET 应用程序会使用此帐户配置的权限运行。
在 Junos 设备上创建用户帐户:
配置出站 HTTPS 客户端
通过增强的出站 HTTPS,您可以在层级配置多个出站 HTTPS 客户端 [edit system services outbound-https]
,并为每个客户端配置多个备份 gRPC 服务器。JET 应用程序随时仅连接到客户端服务器列表中一个 gRPC 服务器。
配置设备之前,您需要以下信息:
-
gRPC 服务器侦听连接的端口。
-
SubjectAltName IP 地址字段的内容,如果没有该字段,则表示 gRPC 服务器证书中通用名 (CN) 字段的内容。
-
gRPC 服务器证书的内容(如果是自签名)或者 CA 证书的内容(如果使用证书链进行验证)。
要配置出站 HTTPS 客户端,
如果出站 HTTPS 扩展服务已在运行,并且您添加、删除或修改出站 HTTPS 客户端并提交配置,则无需重新启动服务,即可使更改生效。它们会自动被拾取。
在 Junos 设备上配置出站 HTTPS 扩展服务
支持 NETCONF 和通过出站 HTTPS 进行 shell 会话的 Junos 版本包括 JET 应用程序和软件映像中的支持文件。 表 1 概述了位于设备上的 /var/db/脚本/jet 目录中的文件。
文件 |
描述 |
---|---|
nc_grpc_app.pyc |
JET 应用程序,使用 gRPC 框架与网络管理系统上运行的 gRPC 服务器建立永久 HTTPS 连接。 |
nc_grpc_app_lib.pyc |
必需的库 |
要为出站 HTTPS 上的会话配置 Junos 设备:
应用程序成功启动后,它会将消息记录到 outbound_https.log 文件中。
如果应用程序在您提交配置后未自动启动,请查看与此应用程序相关的日志消息,以排除故障。在 Junos OS 中,发出 show log jet.log
命令。在 Junos OS 演化中,发出 show trace application cscript
和 show log messages
命令。
启动 NETCONF 或 Shell 会话
在网络管理系统上运行的 gRPC 服务器充当 NETCONF/shell 客户端,Junos 设备上的 JET 应用程序充当 gRPC 客户端和 NETCONF/shell 服务器。启动 gRPC 服务器和 JET 应用程序后,JET 应用程序会尝试连接到指定端口上的 gRPC 服务器。如果连接成功,gRPC 客户端将验证 gRPC 服务器。如果服务器身份验证成功,您可以请求一个或多个 NETCONF 或 shell 会话。
开始之前,您需要了解以下信息:
-
为出站 HTTPS 客户端配置的设备标识符和共享密钥字符串
要通过增强型出站 HTTPS 建立 NETCONF 或 shell 会话: