6.18. nmstatectl を使用して IPsec ベースの VPN 接続を設定する
仮想プライベートネットワーク (VPN) を使用すると、インターネットなどの信頼できないネットワーク上で、セキュアで暗号化されたトンネルを確立できます。このようなトンネルにより、転送中のデータの機密性と整合性が確保されます。一般的なユースケースとしては、支社と本社を接続することなどが挙げられます。
nmstatectl
ユーティリティーを使用して、Nmstate API を介して Libreswan IPsec VPN 接続を設定できます。nmstatectl
ユーティリティーは、宣言型 Nmstate API を介してホストネットワークを管理するコマンドラインツールです。複数の命令的なコマンドを実行してインターフェイスを設定する代わりに、YAML ファイルで予想される状態を定義します。nmstate はこの定義を取り、システムに適用します。このアプローチの主な利点は、アトミックな結果です。nmstate は、作成される設定が YAML 定義と正確に一致することを確認します。設定の一部の適用に失敗した場合は、すべての変更を自動的にロールバックし、システムが誤ったネットワーク状態や破損の状態に入るのを防ぎます。
NetworkManager-libreswan
プラグインの設計により、nmstatectl
は 1 つのピアでのみ使用でき、他のピアで Libreswan を手動で設定する必要があります。
6.18.1. nmstatectlを使用した raw RSA 鍵認証を使用した IPsec ホスト間 VPN の設定 リンクのコピーリンクがクリップボードにコピーされました!
ホスト間 VPN は、2 つのデバイス間で直接、安全で暗号化された接続を確立し、アプリケーションはインターネットなどの安全でないネットワーク上で安全に通信できるようにします。
認証の場合、非対称暗号化により共有秘密のリスクが排除されるため、RSA キーは事前共有鍵(PSK)よりも安全です。また、RSA キーを使用すると、強力なピアツーピア認証を提供しながら、認証局(CA)の必要がなくなるため、デプロイメントが簡素化されます。
Nmstate API を使用して、既存の Libreswan IPsec ホストとの接続を設定できます。この場合、Nmstate は、生成される設定が YAML ファイルの定義と一致することを確認するか、変更を自動的にロールバックしてシステムの誤った状態を回避します。Nmstate は状態のみを検証し、間違った設定に対して保護されないことに注意してください。
通常、left という名前が付けられ、right を選択する方法は任意です。ただし、NetworkManager は常に ローカルホスト に left という用語を使用し、リモートホストには 右 という用語を使用します。
前提条件
リモートピアは Libreswan IPsec を実行し、ホスト間接続に準備さ れます。
NetworkManager-libreswan
プラグインの設計により、Nmstate は、同じ接続にこのプラグインも使用する他のピアと通信できません。
手順
Libreswan がインストールされていない場合は、以下の手順を実行します。
必要なパッケージをインストールします。
dnf install nmstate libreswan NetworkManager-libreswan
# dnf install nmstate libreswan NetworkManager-libreswan
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NetworkManager サービスを再起動します。
systemctl restart NetworkManager
# systemctl restart NetworkManager
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Network Security Services (NSS)データベースを初期化します。
ipsec initnss
# ipsec initnss
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドにより、
/var/lib/ipsec/nss/
ディレクトリーにデータベースが作成されます。ファイアウォールで IPsec ポートおよびプロトコルを開きます。
firewall-cmd --permanent --add-service="ipsec" firewall-cmd --reload
# firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
RSA キーペアを作成します。
ipsec newhostkey
# ipsec newhostkey
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipsec
ユーティリティーは、キーペアを NSS データベースに保存します。左側のピアと右のピアの両方に証明書キー属性 ID (CKAID)を表示します。
ipsec showhostkey --list
# ipsec showhostkey --list < 1> RSA keyid: <key_id> ckaid: <ckaid>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の手順では、両方のピアの CKAID が必要です。
公開鍵を表示します。
左側のピアで、次のように入力します。
ipsec showhostkey --left --ckaid <ckaid_of_left_peer>
# ipsec showhostkey --left --ckaid <ckaid_of_left_peer> # rsakey AwEAAdKCx leftrsasigkey=0sAwEAAdKCxpc9db48cehzQiQD...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 正しいピアで、次のように入力します。
ipsec showhostkey --right --ckaid <ckaid_of_right_peer>
# ipsec showhostkey --right --ckaid <ckaid_of_right_peer> # rsakey AwEAAcNWC rightrsasigkey=0sAwEAAcNWCzZO+PR1j8WbO8X...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
コマンドは、公開鍵を、設定ファイルで使用する必要がある対応するパラメーターとともに表示します。
以下の内容を含む YAML ファイルを作成します(例:
~/ipsec-host-to-host-rsa-auth.yml
)。Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例で指定されている設定は次のとおりです。
ikev2: insist
- 最新の IKEv2 プロトコルを IKEv1 へのフォールバックなしで許可されるプロトコルとして定義します。この設定は、Nmstate のホスト間設定では必須です。
left= <ip_address_or_fqdn_of_left_peer
> およびright= <ip_address_or_fqdn_of_right_peer>
- ピアの IP アドレスまたは DNS 名を定義します。
leftid= <id>
andrightid= <id>
-
インターネット鍵交換(IKE)ネゴシエーションプロセス中に各ピアを識別する方法を定義します。IP アドレスまたはリテラル文字列を指定できます。NetworkManager は、IP アドレス以外のすべての値をリテラル文字列として解釈し、内部的に先頭の
@
記号を追加することに注意してください。これには、Libreswan ピアが ID または認証の失敗としてリテラル文字列も使用する必要があります。 leftrsasigkey= <public_key>
およびrightrsasigkey= <public_key>
-
ピアの公開鍵を指定します。直前の手順で
ipsec showhostkey
コマンドで表示される値を使用します。 leftmodecfgclient: false
- このホストでの動的設定を無効にします。この設定は、Nmstate のホスト間設定では必須です。
rightsubnet: & lt;ip_address_of_right_peer> /32
- ホストがこのピアのみにアクセスできることを定義します。この設定は、Nmstate のホスト間設定では必須です。
設定をシステムに適用します。
nmstatectl apply ~/ipsec-host-to-host-rsa-auth.yml
# nmstatectl apply ~/ipsec-host-to-host-rsa-auth.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
IPsec のステータスを表示します。
ipsec status
# ipsec status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続が正常に確立された場合、出力には以下のような行が含まれます。
インターネット鍵交換バージョン 2 (IKEv2)ネゴシエーションのフェーズ 1 が正常に完了しています。
000 #1: "<connection_name>":500 STATE_V2_ESTABLISHED_IKE_SA (established IKE SA); REKEY in 27935s; REPLACE in 28610s; newest; idle;
000 #1: "<connection_name>":500 STATE_V2_ESTABLISHED_IKE_SA (established IKE SA); REKEY in 27935s; REPLACE in 28610s; newest; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow セキュリティー関連付け(SA)は、子 SAs または Phase 2 SAs として知られる実際のデータ暗号化トンネルをネゴシエートできるようになりました。
子 SA が確立されました。
000 #2: "<connection_name>":500 STATE_V2_ESTABLISHED_CHILD_SA (established Child SA); REKEY in 27671s; REPLACE in 28610s; IKE SA #1; idle;
000 #2: "<connection_name>":500 STATE_V2_ESTABLISHED_CHILD_SA (established Child SA); REKEY in 27671s; REPLACE in 28610s; IKE SA #1; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これは、データトラフィックが流れる実際のトンネルです。
トラブルシューティング
NetworkManager が Libreswan に渡す実際の設定を表示するには、次のコマンドを実行します。
nmcli connection export <connection_name>
# nmcli connection export <connection_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この出力では、リモートホストの Libreswan 設定と比較すると、ID やキーなどの開発設定を特定することができます。
次のステップ
- DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策は、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
6.18.2. nmstatectlを使用した raw RSA 鍵認証を使用した IPsec サイト間 VPN の設定 リンクのコピーリンクがクリップボードにコピーされました!
サイト間 VPN は、2 つの異なるネットワーク間で安全で暗号化されたトンネルを確立し、インターネットなどの安全でないパブリックネットワーク全体でシームレスにリンクします。たとえば、これにより、分岐オフィスのデバイスは、同じローカルネットワークのすべての一部であるかのように、企業ヘッドクツーのリソースにアクセスできるようになります。
ゲートウェイデバイスを認証する場合、非対称暗号化により共有秘密のリスクが排除されるため、RSA 鍵は事前共有鍵(PSK)よりも安全です。また、RSA キーを使用すると、強力なピアツーピア認証を提供しながら、認証局(CA)の必要がなくなるため、デプロイメントが簡素化されます。
Nmstate API を使用して、既存の Libreswan IPsec ゲートウェイで接続を設定できます。この場合、Nmstate は、生成される設定が YAML ファイルの定義と一致することを確認するか、変更を自動的にロールバックしてシステムの誤った状態を回避します。Nmstate は状態のみを検証し、間違った設定に対して保護されないことに注意してください。
通常、left という名前で right の名前は任意になります。ただし、NetworkManager は常に ローカルホスト に left という用語を使用し、リモートホストには 右 という用語を使用します。
前提条件
リモートゲートウェイは Libreswan IPsec を実行し、サイト間接続に準備さ れます。
NetworkManager-libreswan
プラグインの設計により、Nmstate は、同じ接続にこのプラグインも使用する他のピアと通信できません。
手順
Libreswan がインストールされていない場合は、以下の手順を実行します。
必要なパッケージをインストールします。
dnf install nmstate libreswan NetworkManager-libreswan
# dnf install nmstate libreswan NetworkManager-libreswan
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NetworkManager サービスを再起動します。
systemctl restart NetworkManager
# systemctl restart NetworkManager
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Network Security Services (NSS)データベースを初期化します。
ipsec initnss
# ipsec initnss
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドにより、
/var/lib/ipsec/nss/
ディレクトリーにデータベースが作成されます。ファイアウォールで IPsec ポートおよびプロトコルを開きます。
firewall-cmd --permanent --add-service="ipsec" firewall-cmd --reload
# firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
RSA キーペアを作成します。
ipsec newhostkey
# ipsec newhostkey
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipsec
ユーティリティーは、キーペアを NSS データベースに保存します。左側のピアと右のピアの両方に Certificate Key Attribute ID (CKAID)を表示します。
ipsec showhostkey --list
# ipsec showhostkey --list < 1> RSA keyid: <key_id> ckaid: <ckaid>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の手順で、両方のピアの CKAID が必要です。
公開鍵を表示します。
左側のピアで、次のように入力します。
ipsec showhostkey --left --ckaid <ckaid_of_left_peer>
# ipsec showhostkey --left --ckaid <ckaid_of_left_peer> # rsakey AwEAAdKCx leftrsasigkey=0sAwEAAdKCxpc9db48cehzQiQD...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 正しいピアで、次のように入力します。
ipsec showhostkey --right --ckaid <ckaid_of_right_peer>
# ipsec showhostkey --right --ckaid <ckaid_of_right_peer> # rsakey AwEAAcNWC rightrsasigkey=0sAwEAAcNWCzZO+PR1j8WbO8X...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
コマンドは、公開鍵を、設定ファイルで使用する必要がある対応するパラメーターとともに表示します。
以下の内容を含む YAML ファイルを作成します(例:
~/ipsec-site-to-site-rsa-auth.yml
)。Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例で指定されている設定は次のとおりです。
ikev2: insist
- 最新の IKEv2 プロトコルを IKEv1 へのフォールバックなしで許可されるプロトコルとして定義します。この設定は、Nmstate のサイト間設定では必須です。
left= <ip_address_or_fqdn_of_left_peer
> およびright= <ip_address_or_fqdn_of_right_peer>
- ピアの IP アドレスまたは DNS 名を定義します。
leftid= <id>
andrightid= <id>
-
インターネット鍵交換(IKE)ネゴシエーションプロセス中に各ピアを識別する方法を定義します。IP アドレスまたはリテラル文字列を指定できます。NetworkManager は、IP アドレス以外のすべての値をリテラル文字列として解釈し、内部的に先頭の
@
記号を追加することに注意してください。これには、Libreswan ピアが ID または認証の失敗としてリテラル文字列も使用する必要があります。 leftrsasigkey= <public_key>
およびrightrsasigkey= <public_key>
-
ピアの公開鍵を指定します。直前の手順で
ipsec showhostkey
コマンドで表示される値を使用します。 leftmodecfgclient: false
- このホストでの動的設定を無効にします。この設定は、Nmstate のサイト間設定では必須です。
leftsubnet= <subnet>
andrightsubnet= <subnet>
- トンネルを介して接続するドメイン間ルーティング(CIDR)形式でサブネットを定義します。
パケット転送を有効にします。
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 設定をシステムに適用します。
nmstatectl apply ~/ipsec-site-to-site-rsa-auth.yml
# nmstatectl apply ~/ipsec-site-to-site-rsa-auth.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
IPsec のステータスを表示します。
ipsec status
# ipsec status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続が正常に確立された場合、出力には以下のような行が含まれます。
インターネット鍵交換バージョン 2 (IKEv2)ネゴシエーションのフェーズ 1 が正常に完了しています。
000 #1: "<connection_name>":500 STATE_V2_ESTABLISHED_IKE_SA (established IKE SA); REKEY in 27935s; REPLACE in 28610s; newest; idle;
000 #1: "<connection_name>":500 STATE_V2_ESTABLISHED_IKE_SA (established IKE SA); REKEY in 27935s; REPLACE in 28610s; newest; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow セキュリティー関連付け(SA)は、子 SAs または Phase 2 SAs として知られる実際のデータ暗号化トンネルをネゴシエートできるようになりました。
子 SA が確立されました。
000 #2: "<connection_name>":500 STATE_V2_ESTABLISHED_CHILD_SA (established Child SA); REKEY in 27671s; REPLACE in 28610s; IKE SA #1; idle;
000 #2: "<connection_name>":500 STATE_V2_ESTABLISHED_CHILD_SA (established Child SA); REKEY in 27671s; REPLACE in 28610s; IKE SA #1; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これは、データトラフィックが流れる実際のトンネルです。
- ローカルサブネットのクライアントから、リモートサブネットのクライアントに ping 送信を行います。
トラブルシューティング
NetworkManager が Libreswan に渡す実際の設定を表示するには、次のコマンドを実行します。
nmcli connection export <connection_name>
# nmcli connection export <connection_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この出力では、リモートホストの Libreswan 設定と比較すると、ID やキーなどの開発設定を特定することができます。
次のステップ
- DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策は、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
6.18.3. nmstatectlを使用して IPsec VPN ゲートウェイに接続するようにクライアントを設定する リンクのコピーリンクがクリップボードにコピーされました!
リモートプライベート ネットワーク上のリソースにアクセスするには、まず IPsec VPN 接続を設定する必要があります。Nmstate API を使用して、既存の Libreswan IPsec ゲートウェイで接続を設定できます。この場合、Nmstate は、生成される設定が YAML ファイルの定義と一致することを確認するか、変更を自動的にロールバックしてシステムの誤った状態を回避します。Nmstate は状態のみを検証し、間違った設定に対して保護されないことに注意してください。
通常、left という名前が付けられ、right を選択する方法は任意です。ただし、NetworkManager は常に ローカルホスト に left という用語を使用し、リモートホストには 右 という用語を使用します。
前提条件
リモートゲートウェイは Libreswan IPsec を実行し、証明書ベースの認証 を使用したホスト 間接続に準備されます。
NetworkManager-libreswan
プラグインの設計により、Nmstate は、同じ接続にこのプラグインも使用する他のピアと通信できません。PKCS#12 ファイル
~/file.p12
は、以下の内容を含むクライアントに存在します。- ユーザーの秘密鍵。
- ユーザー証明書
- CA 証明書
- 中間証明書 (必要な場合)
秘密鍵および証明書署名要求 (CSR) の作成や、CA からの証明書要求に関する詳細は、CA のドキュメントを参照してください。
-
証明書の Extended Key Usage (EKU)が
TLS Web Client Authentication
に設定されます。
手順
Libreswan がインストールされていない場合は、以下を行います。
必要なパッケージをインストールします。
dnf install nmstate libreswan NetworkManager-libreswan
# dnf install nmstate libreswan NetworkManager-libreswan
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NetworkManager サービスを再起動します。
systemctl restart NetworkManager
# systemctl restart NetworkManager
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Network Security Services (NSS)データベースを初期化します。
ipsec initnss
# ipsec initnss
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドにより、
/var/lib/ipsec/nss/
ディレクトリーにデータベースが作成されます。ファイアウォールで IPsec ポートおよびプロトコルを開きます。
firewall-cmd --permanent --add-service="ipsec" firewall-cmd --reload
# firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
PKCS #12 ファイルを NSS データベースにインポートします。
ipsec import ~/file.p12
# ipsec import ~/file.p12 Enter password for PKCS12 file: <password> pk12util: PKCS12 IMPORT SUCCESSFUL correcting trust bits for Example-CA
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ユーザーおよび CA 証明書のニックネームを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この情報は Nmstate YAML ファイルで必要になります。
以下の内容を含む YAML ファイル(例:
~/ipsec-host-to-site-cert-auth.yml
)を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例で指定されている設定は次のとおりです。
ikev2: insist
- 最新の IKEv2 プロトコルを IKEv1 へのフォールバックなしで許可されるプロトコルとして定義します。この設定は、Nmstate のホスト間設定では必須です。
left= <ip_address_or_fqdn_of_left_peer
> およびright= <ip_address_or_fqdn_of_right_peer>
- ピアの IP アドレスまたは DNS 名を定義します。
leftid=%fromcert
andrightid=%fromcert
- 証明書の識別名(DN)フィールドからアイデンティティーを取得するように Libreswan を設定します。
leftcert=" <server_certificate_nickname>"
- NSS データベースで使用されるサーバーの証明書のニックネームを設定します。
rightsubnet: < subnet>
- ゲートウェイに接続されたドメイン間ルーティング(CIDR)形式でサブネットを定義します。
設定をシステムに適用します。
nmstatectl apply ~/ipsec-host-to-site-cert-auth.yml
# nmstatectl apply ~/ipsec-host-to-site-cert-auth.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
- リモートネットワークでホストへの接続を確立するか、ping します。
トラブルシューティング
NetworkManager が Libreswan に渡す実際の設定を表示するには、次のコマンドを実行します。
nmcli connection export <connection_name>
# nmcli connection export <connection_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この出力では、リモートホストの Libreswan 設定と比較すると、ID やキーなどの開発設定を特定することができます。
次のステップ
- DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策は、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。