Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

通过出站 HTTPS 的 NETCONF 会话

总结 客户端应用程序可以在运行 Junos OS 20.2 版的受支持的设备上使用出站 HTTPS 建立网络配置协议 (NETCONF) 会话。

本主题讨论如何在运行 Junos OS 20.2 版的设备上使用出站 HTTPS 建立 NETCONF 会话。有关使用增强型出站 HTTPS 建立 NETCONF 和 shell 会话的信息,请参阅 基于增强型出站 HTTPS 的 NETCONF 和 Shell 会话

了解通过出站 HTTPS 的 NETCONF 会话

NETCONF 会话比出站 HTTPS 的优势

  • 启用 NETCONF 客户端应用程序来管理无法通过其他协议访问的设备。

  • 使用出站 HTTPS 客户端的基于证书的身份验证,启用设备的远程管理。

基于出站 HTTPS 的 NETCONF 会话概述

您可以通过出站 HTTPS 在受支持的 Junos 设备和网络管理系统之间建立 NETCONF 会话。通过出站 HTTPS 的 NETCONF 会话使您能够远程管理可能无法通过 SSH 等其他协议访问的设备。例如,如果设备在防火墙后面,而防火墙或其他安全工具会阻止这些协议,则可能会发生这种情况。另一方面,HTTPS 使用标准端口,在大多数环境中通常允许出站。

在受支持的设备上,Junos OS 包括一个瞻博网络扩展工具包 (JET) 应用程序,支持使用出站 HTTPS 建立 NETCONF 会话。JET 应用程序使用 gRPC 框架连接到出站 HTTPS 客户端,该客户端由在网络管理系统上运行的 gRPC 服务器组成。gRPC 是一个与语言无关的开源远程过程调用 (RPC) 框架。 图 1 以最简单的形式展示了出站 HTTPS 设置。

图 1:基于出站 HTTPS NETCONF Sessions over Outbound HTTPS 的 NETCONF 会话

在这种情况下,gRPC 服务器充当 NETCONF 客户端,JET 应用程序是 gRPC 客户端和 NETCONF 服务器。gRPC 服务器侦听指定端口上的连接请求,默认为端口 443。您可以将 JET 应用程序配置为扩展服务。相关连接和身份验证信息被传递到脚本。脚本运行时,会自动尝试连接到配置的主机和端口上的 gRPC 服务器。

JET 应用程序和 gRPC 服务器通过 TLS 加密的 gRPC 会话建立永久 HTTPS 连接。JET 应用程序使用 X.509 数字证书对 gRPC 服务器进行身份验证,如果身份验证成功,则会通过此连接建立请求的 NETCONF 会话。NETCONF 操作在为扩展服务应用程序配置的用户的帐户权限下执行。

出站 HTTPS 连接使用 X.509 数字证书对 gRPC 服务器进行身份验证。数字证书是通过可信第三方(称为证书颁发机构或证书颁发机构 (CA)来验证您的身份的一种电子手段。证书颁发机构颁发数字证书,该证书可用于通过证书验证在两个端点之间建立安全连接。X.509 标准定义了证书的格式。要在受支持的 Junos 设备上通过出站 HTTPS 建立 NETCONF 会话,gRPC 服务器必须具有有效的 X.509 证书。

出站 HTTPS 基本功能支持连接到单个出站 HTTPS 客户端,并为该客户端配置一个 gRPC 服务器。服务器身份验证必须使用自签名 X.509 证书。您可以通过连接建立单个 NETCONF 会话。

出站 HTTPS 上会话的连接工作流程

在通过出站 HTTPS 举行的 NETCONF 会话中,网络管理系统上运行的 gRPC 服务器充当 NETCONF 客户端,而 Junos 设备上的 JET 应用程序是 gRPC 客户端和 NETCONF 服务器。

gRPC 客户端和服务器通过出站 HTTPS 建立 NETCONF 会话,请执行以下操作:

  1. gRPC 服务器侦听指定端口上的传入连接,如果未指定端口,则侦听默认端口 443 上的传入连接。

  2. gRPC 客户端会与配置的 gRPC 服务器和端口启动 TCP/IP 连接。

  3. gRPC 客户端发送 TLS ClientHello 消息以启动 TLS 握手。

  4. gRPC 服务器会发送一 ServerHello 条消息及其证书。

  5. gRPC 客户端验证 gRPC 服务器的身份。

  6. NETCONF 会话已建立。

  7. 服务器和客户端交换 NETCONF <hello> 消息。

  8. NETCONF 客户端应用程序会根据需要执行操作。

如何通过出站 HTTPS 建立 NETCONF 会话

您可以使用作为 Junos 软件映像一部分的 JET 应用程序在网络管理系统 (NMS) 与支持的 Junos 设备之间通过出站 HTTPS 建立 NETCONF 会话。配置为扩展服务的 JET 应用程序会启动与在 NMS 上运行的 gRPC 服务器的连接,并通过 TLS 加密的 gRPC 会话建立永久 HTTPS 连接。NETCONF 会话通过此 HTTPS 连接运行。在这种情况下,gRPC 服务器是 NETCONF 客户端,JET 应用程序是 gRPC 客户端和 NETCONF 服务器。

通过出站 HTTPS 建立 NETCONF 会话需要以下硬件和软件:

  • 运行 Python 3.5 或更高版本的网络管理系统

  • 运行具有升级版 FreeBSD 20.2 的 Junos OS 且支持运行 JET 应用程序的设备

    注意:

    有关支持的设备,请参阅功能浏览器 NETCONF 基于出站 HTTPS 的会话

图 2 展示了在随后的任务中引用的设置。

图 2:基于出站 HTTPS 拓扑 NETCONF over Outbound HTTPS Topology的 NETCONF

客户端和服务器通过出站 HTTPS 建立 NETCONF 会话之前,您必须满足以下各节中讨论的要求:

获取 gRPC 服务器的 X.509 证书

出站 HTTPS 连接使用 X.509 公钥证书来验证在网络管理系统上运行的 gRPC 服务器的身份。gRPC 堆栈支持 X.509 v3 证书格式。

gRPC 服务器证书的要求包括:

  • 证书必须是自签名的。

  • 证书必须在通用名称 (CN) 字段中定义 gRPC 服务器的主机名,或者在 SubjectAltName (SAN) IP 地址字段中定义 gRPC 服务器的 IP 地址。Junos 设备必须使用相同的值才能与服务器建立连接。如果证书定义了 SubjectAltName IP 地址字段,设备在身份验证期间将忽略公用名字段。

  • 证书必须采用 PEM 编码并使用 .crt 扩展。

  • 证书及其密钥必须分别命名 为 server.crtserver.key

要使用 OpenSSL 获取证书:

  1. 生成一个私有密钥,并指定密钥长度(以位)。
    注意:

    我们建议使用 3072 位或更高的私有密钥大小。

  2. 如果要连接到 gRPC 服务器的 IP 地址,请更新 openssl.cnf 或等效配置文件,以使用 gRPC 服务器的地址定义subjectAltName=IP扩展。
  3. 生成证书签名请求 (CSR),其中包含客户端的公钥和有关其身份的信息。
  4. 生成证书。

    使用服务器密钥对 CSR 进行签名以生成自签名客户端证书,如果需要引用您的配置文件和扩展,请添加 -extfile 选项。

  5. 验证公用名 (CN) 字段和扩展(如果提供)是否正确。
  6. (可选)将 server.crt 文件复制到运行 Junos OS 的设备上的 /var/db/脚本/jet 目录,以使用证书文件进行身份验证。
    注意:

    如果密钥大小小于或等于 4096 位,而是在 Junos 设备上的 JET 应用程序的 trusted_certs 参数中配置证书内容,则可以省略这一步。

设置 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 服务器:

  1. 为 Python 3 安装pip
  2. grpcio安装软件包。
  3. grpcio-tools安装软件包。
  4. 前往 https://github.com/Juniper/netconf-https-outbound 的瞻博网络 GitHub 存储库,并选择与 Junos 设备上运行的版本对应的目录。
  5. 将 GitHub 目录中的应用程序和 proto 文件下载到 gRPC 服务器证书所在网络管理系统上的目录。
    1. 选择每个文件,然后单击 Raw 按钮,然后复制文件的 URL。

    2. 使用 URL 和您选择的下载工具(例如, wgetcurl)来下载文件。

  6. 使用协议缓冲区编译器protoc编译每个 proto 定义文件并生成 Python 代码,这会为每个 proto 文件生成两个输出文件。

    例如:

  7. 启动 gRPC 服务器,并指定连接的端口(如果它不同于默认端口 443)。
    注意:

    您可能需要使用 root 权限执行脚本,才能侦听端口 443。

gRPC 服务器无限期侦听指定端口的传入连接。将 Junos 设备配置为连接到 gRPC 服务器并建立连接和会话后,您可以根据需要执行 NETCONF 操作。

为 NETCONF 用户配置用户帐户

要通过出站 HTTPS 建立 NETCONF 会话,必须在 Junos 设备上本地创建用户帐户。使用此帐户对设备执行该会话的 NETCONF 操作。JET 应用程序会使用此帐户配置的权限运行。

在 Junos 设备上创建用户帐户:

  1. user使用唯一用户名配置语句,并包括该class语句以指定具有用户执行的所有操作所需的权限的登录类。例如:
  2. (可选)配置 uid and full-name 语句以指定唯一用户 ID 和用户名称。
  3. 提交配置以激活设备上的用户帐户。
  4. 在客户端需要通过出站 HTTPS 建立 NETCONF 会话的每个 Junos 设备上重复上述步骤。

配置出站 HTTPS 客户端

JET 应用程序只能连接到一个出站 HTTPS 客户端。将客户端的连接和身份验证信息配置为 JET 脚本的命令行参数。 表 1 概述了参数。

表 1:nc_grpc_app.py 参数

参数

价值

--device-d

JET 应用程序连接到的 gRPC 服务器的主机名或 IPv4 地址。参数值必须与通用名称 (CN) 字段中的主机名或 gRPC 服务器证书中的 SubjectAltName IP 地址字段中的 IP 地址匹配。

--port-p

(可选)JET 应用程序尝试连接到 gRPC 服务器的端口。省略参数以使用默认端口 443。

--trusted_certs-ts

(可选)gRPC 服务器的证书内容介于 -----BEGIN CERTIFICATE----- 各行之间 -----END CERTIFICATE----- ,省略了任何新行。

如果您将证书复制到设备上的 /var/db/scripts/jet 目录中,则可以省略此参数。您必须将密钥大小大于 4096 位的证书复制到设备。

开始之前,您需要为脚本参数提供值,包括:

  • gRPC 服务器侦听连接的端口。

  • SubjectAltName IP 地址字段的内容,如果没有该字段,则表示 gRPC 服务器证书中通用名 (CN) 字段的内容。

  • gRPC 服务器证书的内容在和-----END CERTIFICATE-----之间-----BEGIN CERTIFICATE-----,省略任何新行。仅在将证书内容配置为脚本参数而不是将证书复制到运行 Junos OS 的设备时,才需要此信息。

要配置出站 HTTPS 客户端:

  1. 导航至 nc_grpc_app.py 扩展服务应用程序的层次结构。
  2. 配置启动时传递给应用程序的参数。
  3. 提交配置。

在 Junos 设备上配置出站 HTTPS 扩展服务

支持通过出站 HTTPS 进行 NETCONF 会话的 Junos 版本包括 JET 应用和支持软件映像中的文件。 表 2 概述了位于设备上的 /var/db/脚本/jet 目录中的文件。

表 2:基于出站 HTTPS 的会话的 JET 文件

文件

描述

nc_grpc_app.py

JET 应用程序,使用 gRPC 框架与网络管理系统上运行的 gRPC 服务器建立永久 HTTPS 连接。

nc_grpc_pb2.py

nc_grpc_pb2_grpc.py

必需的库

要为出站 HTTPS 上的会话配置 Junos 设备:

  1. 验证设备上是否存在 JET 应用程序和相关文件。
  2. 进入配置模式。
  3. 使设备能够运行未签名的 Python 3 应用程序。
  4. 导航至扩展服务应用程序的层次结构。
  5. 将应用程序配置为在后台作为守护进程运行。
  6. 将应用程序配置为在正常出口处重新生成。
  7. 配置使用名称,以谁的权限执行应用程序和执行 NETCONF 操作。
  8. 提交配置。

    提交配置时, daemonize 选项会使应用程序自动启动。

  9. 验证应用程序是否正在运行。

应用程序成功启动后,它会将消息记录到 outbound_https.log 文件中。

注意:

如果应用程序在您提交配置后未自动启动,请查看与此应用程序相关的日志消息,以排除故障。在 Junos OS 中,发出 show log jet.log 命令。

启动 NETCONF 会话

在网络管理系统上运行的 gRPC 服务器充当 NETCONF 客户端,Junos 设备上的 JET 应用程序充当 gRPC 客户端和 NETCONF 服务器。启动 gRPC 服务器和 JET 应用程序后,JET 应用程序会尝试连接到指定端口上的 gRPC 服务器。如果连接成功,gRPC 客户端将验证 gRPC 服务器。如果服务器身份验证成功,NETCONF 会话会自动启动。

要通过出站 HTTPS 建立 NETCONF 会话,

  1. 在网络管理系统上,如果尚未启动 gPRC 服务器,请启动服务器并指定连接的端口。

    NETCONF 会话会自动开始。

  2. 通过查看输出,验证会话是否已成功建立。

    NETCONF 会话应显示 NETCONF 功能,如下所示:

  3. 根据需要执行 NETCONF 操作。
  4. 完成会话后,键入Ctrl+C
  5. 使用出站 HTTPS 连接后,可以通过删除或停用配置中的相关层次结构,然后提交更改来停止 Junos 设备上的扩展服务应用程序。