NETCONF Call Home セッション
概要 NETCONF Call Homeを使用すると、NETCONFサーバーはNETCONFクライアントへのセキュアな接続を開始できます。その後、NETCONFクライアントは、サーバーとのSSHセッションおよびNETCONFセッションを確立できます。
NETCONF Call Homeは、ネットワークデバイスがネットワークデバイスへの接続を開始できない場合に、NETCONFクライアントがJunosデバイスをリモートで管理することを可能にします。NETCONFサーバーとして動作するJunosデバイスは、事前定義された一連のNETCONFクライアントへのセキュアな接続を開始および維持します。ここでは、NETCONF Call Home 機能について説明します。
NETCONF Call Homeについて
NETCONF Call Home の概要
SSHを介した通常のNETCONFセッションの場合、NETCONFクライアントはまず、NETCONFサーバーとして動作しているJunosデバイスへのTCP接続を開始します。その後、クライアントはSSHセッションを開始し、続いてNETCONFセッションを開始します。NETCONF Call Homeのシナリオでは、TCPサーバーとクライアントの役割が逆になります。NETCONFサーバーが、NETCONFクライアントへのTCP接続を開始します。接続が確立されると、NETCONFクライアントは通常どおりSSHセッションとNETCONFセッションを開始します。
NETCONF Call Homeを使用すると、他の方法ではアクセスできないJunosデバイスをリモートで管理できます。これは、たとえば、デバイスがファイアウォールの内側にあり、ファイアウォールまたは別のセキュリティ ツールがデバイスへの管理アクセスを制限したり、ネットワークアドレス変換(NAT)を実装したりする場合に発生する可能性があります。このような場合、NETCONF クライアントが Junos デバイスとの接続を開始できない可能性があります。ただし、Junos デバイスを設定して、事前定義されたネットワーク管理システムとの接続を開始、確立、維持することはできます。
以下のシナリオで NETCONF Call Home を使用できます。
-
初期導入
-
一般的なデバイス管理
図 1 は、コール・ホーム・シーケンスの概要を示しています。NETCONF Call Homeのシナリオでは、ネットワーク管理システム(NMS)がTCPサーバーであり、JunosデバイスがTCPクライアントです。TCPサーバーは、指定したポートで接続要求をリッスンするように構成します。NETCONF Call Home の標準ポートは 4334 ですが、他のサービスと競合しない任意の有効なポート番号を設定できます。指定したポート上の 1 つ以上の事前定義されたネットワーク管理システムに接続するように Junos デバイスを設定します。デバイスがTCP接続を確立すると、NMSはSSHクライアントおよびNETCONFクライアントとしての役割を引き継ぎます。

NETCONFクライアントは、TCP接続を介してSSHセッションを開始します。SSHセッションの確立中に、NETCONFクライアントは、サーバーの提示されたホストキーまたは証明書を検証して、サーバーを認証する必要があります。NETCONF サーバーもクライアントを認証する必要があります。クライアントは、サーバーがサポートする任意のSSH認証方法を選択できます。サーバーは、最初に証明書ベースの認証をチェックし、次にキーベースの認証をチェックし、最後にパスワードベースの認証を確認します。
ユーザーとホストには、SSH 証明書ベースの認証を使用することをお勧めします。認証ベースの認証により、パスワードレスログインを使用したデバイスへのSSHアクセスを設定できるようになり、ユーザーは、カギのフィンガープリントで検証する必要なく、ホストを信頼できるようになります。さらに、特定の証明書が有効である期間を定義できます。証明書ベースの認証では、サーバーとクライアントがそれぞれSSH証明書を送信します。サーバーの証明書を検証する CA 公開キーを使用してクライアントを構成する必要があります。同様に、クライアントの証明書を検証する CA 公開キーを使用してサーバーを構成する必要があります。
NETCONF Call Home の詳細については、RFC 8071、 NETCONF Call Home および RESTCONF Call Home を参照してください。
NETCONF Call Home のメリット
-
NETCONF Call Homeは、デバイスの初期導入を合理化できます。
-
証明書ベースの認証を使用した NETCONF Call Home は、従来のパスワードベースのアプローチと比較して、認証キーの管理と拡張を簡素化し、より強力なセキュリティを提供できます。
NETCONF Call Home の設定方法
NETCONF Call Home を設定するには、以下のセクションで説明する手順を実行します。
Junosユーザー アカウントを設定します
すべてのSSH認証方法では、NETCONFクライアントには、NETCONFセッションを確立する各デバイスに、ローカルユーザーアカウントまたはユーザーテンプレートアカウントが必要です。
ローカル・ユーザー・テンプレート・アカウントを作成するには、以下の手順に従います。
[edit system login]
階層レベルでuser
ステートメントを設定し、ユーザー名を指定します。class
ステートメントを含め、ユーザーが実行するすべてのアクションに必要な権限を持つログインクラスを指定します。[edit system login] user@host# set user username class class-name
設定をコミットします
[edit] user@host# commit
クライアント アプリケーションが NETCONF セッションを確立する各 Junos デバイスで、上記の手順を繰り返します。
SSH認証の設定
SSHセッション確立中に、NETCONFクライアントは、サーバに提示されたホストキーまたは証明書を検証することで、サーバを認証します。同様に、NETCONF サーバーはクライアントを認証します。サーバーは、最初に証明書ベースの認証をチェックし、次にキーベースの認証をチェックし、最後にパスワードベースの認証を確認します。どちらの認証方法を選択しても、サーバーとクライアントを構成する必要があります。SSH認証方法は、次のセクションで説明されています。
パスワードベースの認証を設定する
NETCONF クライアントがパスワードベースの認証を使用する場合、Junos ユーザー アカウントにパスワードを設定します。
テキストベースのパスワードを作成するには:
ユーザーアカウントに
plain-text-password
またはencrypted-password
ステートメントを含めます。パスワードをテキストとして入力するには、次のコマンドを発行します。パスワードの入力を求められます。パスワードは保存される前に暗号化されます。
[edit system login user username authentication] user@host# set plain-text-password New password: password Retype new password: password
事前に暗号化されたパスワード(たとえば、以前にメッセージダイジェスト5(MD5)を使用して作成およびハッシュしたパスワード)を保存するには、次のコマンドを発行します。
[edit system login user username authentication] user@host# set encrypted-password "password"
設定をコミットします。
[edit system login user username authentication] user@host# commit
クライアント アプリケーションがパスワードベースの認証を使用して NETCONF セッションを確立する各 Junos デバイスで、上記の手順を繰り返します。
キーベース認証を構成する
NETCONF クライアントがキーベースの認証を使用する場合は、まず設定管理サーバーでユーザーの SSH キーペアを生成します。次に、Junosデバイスの対応するユーザーアカウントの下で公開キーを設定します。
NETCONF クライアントのキーベース認証を設定するには:
指定されたユーザーのSSHキーペアを生成します。
ネットワーク管理システムで、
ssh-keygen
コマンドを発行し、適切な引数を指定します。user@nms:~$ ssh-keygen options
例えば:
netconf-user@nms:~$ ssh-keygen -t rsa -b 4096 Generating public/private rsa key pair. Enter file in which to save the key (/home/netconf-user/.ssh/id_rsa): Created directory '/home/netconf-user/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/netconf-user/.ssh/id_rsa Your public key has been saved in /home/netconf-user/.ssh/id_rsa.pub ...
ssh-keygen
コマンドは公開鍵と秘密鍵をユーザーのホームディレクトリの .ssh サブディレクトリ内のファイルに保存します。ファイル名はエンコーディングと SSH のバージョンによって異なります。コマンドオプションの詳細については、ssh-keygen
のマニュアルページを参照してください。Junos デバイスで、公開キーをそのユーザーの Junos ログイン アカウントに関連付けます。
[edit system login user username authentication] user@host# set load-key-file URL
Junos OSは、指定されたファイルの内容を、Junos OS. URL を実行しているデバイスにコピーします。は、1 つ以上の公開キーを含むファイルへのパスです。URLの指定については、 CLIユーザーガイドを参照してください。
手記:または、
[edit system login user username authentication]
階層レベルでssh-rsa
または同等の ステートメントを含めることで、公開キーを設定できます。設定をコミットします。
[edit] user@host# commit
クライアントアプリケーションがNETCONFセッションを確立する各Junosデバイスで公開キーを設定する手順を繰り返します。
SSH接続の初期化中に、クライアントはサーバーの公開キーを使用してNETCONFサーバーのIDを認証できます。サーバーの公開キーをネットワーク管理システムにインストールするか、セッションの初期化中にキーを渡すことができます。
証明書ベースの認証を設定する
NETCONF Call Home は、認証での SSH 証明書の使用をサポートしています。SSH証明書は、認証局(CA)によって署名されたSSH公開キーで構成されています。CA秘密鍵(署名鍵)は、ホストの公開鍵に署名して、ホスト証明書を生成します。同様に、CA の秘密鍵は、ユーザーの公開鍵に署名して、ユーザー証明書を生成します。ホスト証明書はユーザーに対してホストを認証し、ユーザー証明書はホストに対してユーザーを認証します。
OpenSSH を使用して、SSH 証明書および関連する CA インフラストラクチャを作成できます。OpenSSH 証明書は、公開鍵、ID 情報、および有効性の制約を指定します。認証にSSH証明書を使用するには、以下を行う必要があります。
-
認証局を作成し、CA 署名キーを生成します。
-
ユーザーのSSHキーペアを生成します。
-
CA 秘密鍵を使用してユーザー証明書とホスト証明書を生成し、ユーザーの公開鍵とホストの公開鍵に署名します。
-
Junos デバイスとネットワーク管理システムで、CA 公開キーを信頼できるものとして設定します。
-
Junosデバイスで承認されたプリンシパルを設定します。
デフォルトでは、生成された証明書はすべてのユーザーに対して有効です。ユーザー証明書を特定のユーザー セット (プリンシパル) に制限するには、証明書の生成時に承認されたプリンシパルを指定する必要があります。Junos デバイスには、1 つ以上の承認済みプリンシパルを指定する証明書が必要です。Junosデバイスで承認されたプリンシパルのリストも設定する必要があります。デバイスで構成されている承認済みプリンシパル が 証明書内の承認済みプリンシパルと一致する場合、デバイスは証明書を認証します。接続するユーザーは、証明書またはデバイスで承認されたプリンシパルとして明示的に構成されていない場合でも承認されます。
証明書ベースの認証を設定するには、次の手順を実行します。
認証局の生成
任意の Linux/FreeBSD システムで、認証局の署名キーを生成します。
user@nms:~$ ssh-keygen -t type -f output-key-file -N passphrase -b bits
たとえば、次のコマンドは、ユーザー証明書とホスト証明書に署名するための個別の CA 署名キーを作成します。
user@nms:~$ sudo ssh-keygen -t rsa -f /root/.ssh/user_ca -N "" -b 4096 Generating public/private rsa key pair. Your identification has been saved in /root/.ssh/user_ca Your public key has been saved in /root/.ssh/user_ca.pub The key fingerprint is: SHA256:0GbR/Lar1eH3/lULO66XSikD+gSwbibgTtFdnHNwlKg root@nms ...
user@nms:~$ sudo ssh-keygen -t rsa -f /root/.ssh/host_ca -N "" -b 4096 Generating public/private rsa key pair. Your identification has been saved in /root/.ssh/host_ca Your public key has been saved in /root/.ssh/host_ca.pub The key fingerprint is: SHA256:Aps80CYHqK8jRaMt2BNkjS1SrJpuEcgF7QTlBoB/ygI root@nms ...
ホスト CA を信頼するようにネットワーク管理システムを構成します。
ホストCA公開キーの内容をコピーし、グローバルまたはユーザーのSSH既知のホストファイルに追加して、信頼できるCAとしてマークします。次の例では、ホスト CA の公開キーの内容をコピーし、
@cert-authority * host-ca-public-key
ユーザーの known_hosts ファイルに追加します。user@nms:~$ sudo cat /root/.ssh/host_ca.pub ssh-rsa AAAAB3Nz...
user@nms:~$ cat ~/.ssh/known_hosts @cert-authority * ssh-rsa AAAAB3Nz...
手記:NMSは、ホストCA公開キーを使用してホスト証明書を検証します。特定のホストまたはドメインの証明書のみを信頼するには、ワイルドカード(*)を適切なホスト名またはドメイン名に置き換えます。
ユーザー CA 公開キーを Junos デバイスにコピーします。
user@nms:~$ scp path-to-user-CA-public-key user@device-ip:/var/tmp/
例えば:
user@nms:~$ sudo scp /root/.ssh/user_ca.pub user@198.51.100.1:/var/tmp/
Junos デバイスで、ユーザー CA 公開キーを信頼できる CA キーとして設定します。
[edit system services ssh] user@host# set trusted-user-ca-key-file path-to-user-CA-public-key
次の例では、 user_ca.pub ファイルに格納されている CA 公開キーを、信頼できるユーザー CA キーとして追加します。
[edit system services ssh] user@host# set trusted-user-ca-key-file /var/tmp/user_ca.pub user#host# commit
このステートメントを設定すると、デバイスはユーザー CA 公開キーを /var/etc/ssh_trusted_user_ca.pub ファイルに追加します。Junosデバイスは、SSHセッション確立中にユーザーCAパブリックキーを使用してユーザー証明書を検証します。
ユーザー証明書の生成
NETCONFクライアントのSSH証明書を生成するには:
クライアント NMS で、ユーザーの SSH キーペアを生成します。
user@nms:~$ ssh-keygen -t (rsa | ecdsa | ed25519) -f output-key-file -N passphrase -b bits
例えば:
lab@nms:~$ ssh-keygen -t rsa -f ~/.ssh/id_rsa -N "" -b 4096 Generating public/private rsa key pair. Your identification has been saved in /home/lab/.ssh/id_rsa Your public key has been saved in /home/lab/.ssh/id_rsa.pub ...
デバイスが異なる場合は、CA 署名キーを持つ CA サーバーにユーザーの公開キーをコピーします。
ユーザー証明書を生成します。
ユーザー CA 秘密キーを使用してユーザーの公開キーに署名し、この証明書を使用して Junos デバイスにアクセスできる承認済みプリンシパル(ユーザー)のリストを指定します。
user@nms:~$ ssh-keygen -s path-to-user-ca-private-key -I key-identity -n principal1,principal2,principal3 -V validity-interval path-to-user-public-key
次のコマンドは、 user_ca に格納されている CA 秘密キーを使用して、 id_rsa.pub に格納されているユーザーの公開キーに署名します。証明書は、labとnetconf-userの2つのプリンシパルに対して有効です。
user@nms:~$ sudo ssh-keygen -s /root/.ssh/user_ca -I netconfusers -n lab,netconf-user -V +52w6d /home/lab/.ssh/id_rsa.pub Signed user key /home/user/.ssh/id_rsa-cert.pub: id "netconfusers" serial 0 for lab,netconf-user valid from 2024-04-11T17:47:00 to 2025-04-16T17:48:20
ユーザー証明書が作成されていることを確認します。
user@nms:~$ ssh-keygen -Lf path-to-user-cert
前の手順では、コマンドによって id_rsa-cert.pub ファイルが作成されます。
lab@nms:~$ ssh-keygen -Lf /home/lab/.ssh/id_rsa-cert.pub /home/lab/.ssh/id_rsa-cert.pub: Type: ssh-rsa-cert-v01@openssh.com user certificate Public key: RSA-CERT SHA256:SMInnJm8SXfsYLm7NvQZqcaGpuXc9QuraKZSsewdFKM Signing CA: RSA SHA256:0GbR/Lar1eH3/lULO66XSikD+gSwbibgTtFdnHNwlKg (using rsa-sha2-512) Key ID: "netconfusers" Serial: 0 Valid: from 2024-04-11T17:51:00 to 2025-04-16T17:52:45 Principals: lab netconf-user Critical Options: (none) Extensions: permit-X11-forwarding permit-agent-forwarding permit-port-forwarding permit-pty permit-user-rc
デバイスが異なる場合は、ユーザー証明書をネットワーク管理システムにコピーします。
$ scp path-to-user-cert user@nms-ip:/home/user/.ssh
ユーザー証明書ファイルの所有者とアクセス許可が正しいことを確認します。
user@nms:~$ sudo chown user:group /home/user/.ssh/id_rsa-cert.pub user@nms:~$ sudo chmod 644 /home/user/.ssh/id_rsa-cert.pub
SSH キーと証明書の ID が自動的に追加されない場合は、ssh-agent アプリケーションに追加します。例えば:
lab@nms:~$ ssh-add Identity added: /home/lab/.ssh/id_rsa (lab@nms) Certificate added: /home/lab/.ssh/id_rsa-cert.pub (netconfusers)
ホスト証明書の生成
Junos デバイスは、SSH キーを /etc/ssh ディレクトリに保存します。ホスト証明書を生成するには、まずホストの公開キーを CA サーバにコピーし、次にホスト CA の秘密キーを使用してホストの公開キーに署名します。
Junos デバイスで、ホストの公開キーを確認します。
user@host> file list /etc/ssh/*.pub /etc/ssh/ssh_host_ec_p384_key.pub /etc/ssh/ssh_host_ec_p521_key.pub /etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ed25519_key.pub /etc/ssh/ssh_host_rsa_key.pub
Junos デバイスの公開キーを、CA 署名キーがある CA サーバーにコピーします。
user@host> scp /etc/ssh/ssh_host_rsa_key.pub user@ca-server-ip:/var/tmp/
ホスト証明書を生成します。
ホストCA秘密鍵を使用してホストの公開鍵に署名し、
-h
オプションを指定してホスト証明書を作成します。user@nms:~$ ssh-keygen -s path-to-host-CA-private-key -I key-identity -h path-to-host-public-key
次のコマンドは、 host_ca に格納されている CA 秘密キーを使用して、 ssh_host_rsa_key.pub に格納されているホストの公開キーに署名します。
user@nms:~$ sudo ssh-keygen -s /root/.ssh/host_ca -I ssh_server -h /var/tmp/ssh_host_rsa_key.pub Signed host key /var/tmp/ssh_host_rsa_key-cert.pub: id "ssh_server" serial 0 valid forever
ホスト証明書が作成されていることを確認します。
user@nms:~$ ls path-to-host-certificate
前の手順では、コマンドによって ssh_host_rsa_key-cert.pub ファイルが作成されます。
user@nms:~$ ls /var/tmp/ssh_host_rsa_key-cert.pub /var/tmp/ssh_host_rsa_key-cert.pub
ホスト証明書をJunosデバイスにコピーします。
user@nms:~$ scp path-to-host-certificate user@device-ip:/var/tmp/
例えば:
user@nms:~$ scp /var/tmp/ssh_host_rsa_key-cert.pub user@198.51.100.1:/var/tmp/
Junos デバイスで、ホスト証明書を設定します。
[edit system services ssh] user@host# set host-certificate-file /var/tmp/ssh_host_rsa_key-cert.pub user#host# commit
このステートメントを設定すると、デバイスはホスト証明書を /var/etc/ssh_host_ca.pub ファイルに追加します。
承認されたプリンシパルを構成する
ユーザー証明書は、特定のユーザーまたはプリンシパルに関連付けることができます。Junos デバイスでは、ユーザー証明書に 1 つ以上の認証済みプリンシパルを指定する必要があります。また、Junos デバイスで承認されたプリンシパルを設定する必要があります。Junos デバイスは、デバイスに設定された承認済みプリンシパルの少なくとも 1 つが証明書内の承認済みプリンシパルと一致する場合、証明書を認証します。
許可されたプリンシパルのリストは、いくつかの方法で構成できます。許可されたプリンシパルのリストを含むファイルを、それぞれ別の行にロードできます。また、許可されたプリンシパル・リストを構成内で直接構成することもできます。
権限のあるプリンシパルを設定するには、次のようにします。
(オプション)承認済みプリンシパル ファイルを作成し、Junos デバイスにコピーします。
user@host> file show /var/tmp/auth_principals_list lab netconf-user
SSH 証明書を使用してシステムにアクセスできる承認済みプリンシパルを構成します。
承認されたプリンシパルを含むファイルをロードするには、
authorized-principals-file
ステートメントを設定し、ロードするファイルのパスを指定します。[edit system services ssh] user@router# set authorized-principals-file filepath
例えば:
[edit system services ssh] user@router# set authorized-principals-file /var/tmp/auth_principals_list
1 つ以上の承認されたプリンシパルを構成内で直接構成するには、
authorized-principals
ステートメントを使用して、プリンシパル名またはプリンシパル名のリストを指定します。[edit system services ssh] user@host# set authorized-principals principal user@host# set authorized-principals [principal1 principal2 principal3]
例えば:
[edit system services ssh] user@host# set authorized-principals [lab netconf-user]
設定をコミットします。
[edit] user@host# commit
許可された主体を設定すると、デバイスは承認された主体のリストを /var/etc/ssh_authorized_principals ファイルに追加します。
NETCONFサービスを有効にする
NETCONF Call Home クライアントに接続するための Junos デバイスの設定
NETCONF Call Homeのシナリオでは、TCPサーバーとクライアントの役割が逆になります。Junos デバイスを設定して、事前定義されたネットワーク管理システムとの接続を開始、確立、維持します。NETCONF Call Home は、指定された NETCONF クライアントに接続するためにアウトバウンド SSH を使用します。
開始する前に、以下を実行します。
-
認証にSSH証明書を使用する場合は、ユーザーCA 証明、ホスト証明書、および承認されたプリンシパルを設定します。
NETCONF Call Home クライアント設定は、クライアント設定をコミットした時点で SSH 証明書設定を登録します。クライアント構成をコミットする際に、ホスト証明書と少なくとも 1 つのユーザー CA 証明書、および 1 つの承認済みプリンシパルを構成する必要があります。これらの初期値を後から追加する場合、値を有効にするには、クライアント構成を非アクティブ化してコミットし、次にクライアント構成をアクティブ化してコミットする必要があります。クライアント構成を最初にアクティブ化するときに初期値が構成されている場合、既存の値に対する更新はクライアント構成によって自動的に登録されます。
Junos デバイスで NETCONF Call Home クライアントを設定するには、次の手順に従います。
NETCONF Call Home クライアントに接続するようにデバイスを設定し、設定をコミットすると、デバイスはクライアントとの TCP/IP 接続を開始しようとします。デバイスは、成功するまで、または NETCONF Call Home クライアント設定が削除または非アクティブ化されるまで、この接続を作成し続けます。
Junos デバイスは、アウトバウンド SSH 接続を確立するたびに、デバイスを識別する開始シーケンスをクライアントに送信します。この送信内には、 device-id
の値があります。 secret
ステートメントを設定しない場合、開始シーケンスは次のとおりです。
MSG-ID: DEVICE-CONN-INFO\r\n MSG-VER: V1\r\n DEVICE-ID: <device-id>\r\n
secret
ステートメントを設定する場合、開始シーケンスには、Junos デバイスの公開キーと、secret
ステートメントから部分的に派生した SHA1 ハッシュが含まれます。クライアントは、予想されるハッシュ値を計算し、それをHMAC値と比較して、提示されたホストキーがdevice-id
ステートメントで識別されるデバイスからのものであることを確認できます。
MSG-ID: DEVICE-CONN-INFO\r\n MSG-VER: V1\r\n DEVICE-ID: <device-id>\r\n HOST-KEY: <public-host-key>\r\n HMAC:<HMAC(pub-SSH-host-key, <secret>)>\r\n
クライアントは、提示されたホストキーまたは証明書を検証して、Junosデバイスを認証します。同様に、NETCONF サーバーはクライアントを認証します。サーバーは、最初に証明書ベースの認証をチェックし、次にキーベースの認証をチェックし、最後にパスワードベースの認証を確認します。SSHセッションが確立された後、クライアントはNETCONFセッションを開始します。