6.13. nmstatectl を使用した IPsec VPN 接続の設定
仮想プライベートネットワーク (VPN) を使用すると、インターネットなどの信頼できないネットワーク上で、セキュアで暗号化されたトンネルを確立できます。このようなトンネルにより、転送中のデータの機密性と整合性が確保されます。一般的なユースケースとしては、支社と本社を接続することなどが挙げられます。
nmstatectl
ユーティリティーを使用すると、Nmstate API を介して Libreswan IPsec VPN 接続を設定できます。nmstatectl
ユーティリティーは、宣言型の Nmstate API を通じてホストネットワークを管理するためのコマンドラインツールです。ユーザーは複数の命令的なコマンドを実行してインターフェイスを設定するのではなく、YAML ファイルで目的の状態を定義します。Nmstate はこの定義を取得してシステムに適用します。このアプローチの主な利点は、アトミックな結果です。Nmstate は、最終的な設定を YAML 定義と正確に一致させます。設定の一部が適用に失敗した場合、すべての変更が自動的にロールバックされるため、システムで不適切なネットワーク状態や壊れたネットワーク状態が発生しません。
NetworkManager-libreswan
プラグインの設計上、nmstatectl
は一方のピアでのみ使用できます。他方のピアでは Libreswan を手動で設定する必要があります。
6.13.1. nmstatectl を使用して raw RSA 鍵認証による IPsec ホスト間 VPN を設定する リンクのコピーリンクがクリップボードにコピーされました!
ホスト間 VPN は、2 つのデバイス間に直接的でセキュアな暗号化された接続を確立し、アプリケーションがインターネットなどのセキュアでないネットワーク経由でセキュアに通信できるようにします。
認証に関しては、RSA 鍵は事前共有鍵 (PSK) よりもセキュアです。非対称暗号化によって秘密情報共有のリスクが排除されるためです。また、RSA 鍵を使用すると、強力なピアツーピア認証を提供しつつも、認証局 (CA) が不要になるため、デプロイが容易になります。
Nmstate API を使用すると、既存の Libreswan IPsec ホストとの接続を設定できます。この場合、Nmstate が最終的な設定を YAML ファイルの定義と一致させます。一致させられない場合は、システムが不適切な状態になるのを避けるために、変更を自動的にロールバックします。Nmstate は状態のみを検証し、有効だが不適切な設定から保護するものではないことに注意してください。
一般に、どちらのホストを left または right と呼ぶかは任意です。ただし、NetworkManager では、ローカルホストには常に left という用語を使用し、リモートホストには常に right という用語を使用します。
前提条件
リモートピアで 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 ネットワークセキュリティーサービス (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 データベースに保存されます。left と right 両方のピアの 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 が必要になります。
公開鍵を表示します。
left ピアで次のように入力します。
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 right ピアで次のように入力します。
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>
およびrightid=<id>
-
Internet Key Exchange (IKE) ネゴシエーションプロセス中に各ピアを識別する方法を定義します。これには IP アドレスまたはリテラル文字列を指定できます。NetworkManager は、IP アドレス以外のすべての値をリテラル文字列として解釈し、内部的に先頭に
@
記号を追加することに注意してください。そのため、Libreswan ピアも ID としてリテラル文字列を使用する必要があります。そうしないと、認証が失敗します。 leftrsasigkey=<public_key>
およびrightrsasigkey=<public_key>
-
ピアの公開鍵を指定します。前のステップで
ipsec showhostkey
コマンドによって表示された値を使用します。 leftmodecfgclient: false
- このホストで動的設定を無効にします。この設定は、Nmstate を使用したホスト間設定では必須です。
rightsubnet: <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 接続が正常に確立されていれば、出力に次の行が含まれています。
Internet Key Exchange バージョン 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) が、実際のデータ暗号化トンネル (子 SA またはフェーズ 2 SA と呼ばれる) をネゴシエートする準備が整いました。
子 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.13.2. nmstatectl を使用して raw RSA 鍵認証による IPsec サイト間 VPN を設定する リンクのコピーリンクがクリップボードにコピーされました!
サイト間 VPN は、2 つの異なるネットワーク間にセキュアな暗号化トンネルを確立し、インターネットなどのセキュアでないパブリックネットワークを介してそれらをシームレスにリンクします。たとえば、これにより、支社のデバイスがすべて同じローカルネットワークの一部であるかのように、企業本社のリソースにアクセスできるようになります。
ゲートウェイデバイスの認証に関しては、RSA 鍵は事前共有鍵 (PSK) よりもセキュアです。非対称暗号化によって秘密情報共有のリスクが排除されるためです。また、RSA 鍵を使用すると、強力なピアツーピア認証を提供しつつも、認証局 (CA) が不要になるため、デプロイが容易になります。
Nmstate API を使用すると、既存の Libreswan IPsec ゲートウェイとの接続を設定できます。この場合、Nmstate が最終的な設定を YAML ファイルの定義と一致させます。一致させられない場合は、システムが不適切な状態になるのを避けるために、変更を自動的にロールバックします。Nmstate は状態のみを検証し、有効だが不適切な設定から保護するものではないことに注意してください。
一般に、どちらのホストを left または right と呼ぶかは任意です。ただし、NetworkManager では、ローカルホストには常に left という用語を使用し、リモートホストには常に right という用語を使用します。
前提条件
リモートゲートウェイで 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 ネットワークセキュリティーサービス (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 データベースに保存されます。left と right 両方のピアの 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 が必要になります。
公開鍵を表示します。
left ピアで次のように入力します。
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 right ピアで次のように入力します。
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>
およびrightid=<id>
-
Internet Key Exchange (IKE) ネゴシエーションプロセス中に各ピアを識別する方法を定義します。これには IP アドレスまたはリテラル文字列を指定できます。NetworkManager は、IP アドレス以外のすべての値をリテラル文字列として解釈し、内部的に先頭に
@
記号を追加することに注意してください。そのため、Libreswan ピアも ID としてリテラル文字列を使用する必要があります。そうしないと、認証が失敗します。 leftrsasigkey=<public_key>
およびrightrsasigkey=<public_key>
-
ピアの公開鍵を指定します。前のステップで
ipsec showhostkey
コマンドによって表示された値を使用します。 leftmodecfgclient: false
- このホストで動的設定を無効にします。この設定は、Nmstate を使用したサイト間設定では必須です。
leftsubnet=<subnet>
およびrightsubnet=<subnet>
- トンネルを介して接続されるサブネットを Classless Inter-Domain Routing (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 接続が正常に確立されていれば、出力に次の行が含まれています。
Internet Key Exchange バージョン 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) が、実際のデータ暗号化トンネル (子 SA またはフェーズ 2 SA と呼ばれる) をネゴシエートする準備が整いました。
子 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.13.3. nmstatectl を使用してクライアントを IPsec VPN ゲートウェイに接続するように設定する リンクのコピーリンクがクリップボードにコピーされました!
リモートのプライベートネットワーク上のリソースにアクセスするには、ユーザーはまず IPsec VPN 接続を設定する必要があります。Nmstate API を使用すると、既存の Libreswan IPsec ゲートウェイとの接続を設定できます。この場合、Nmstate が最終的な設定を YAML ファイルの定義と一致させます。一致させられない場合は、システムが不適切な状態になるのを避けるために、変更を自動的にロールバックします。Nmstate は状態のみを検証し、有効だが不適切な設定から保護するものではないことに注意してください。
一般に、どちらのホストを left または right と呼ぶかは任意です。ただし、NetworkManager では、ローカルホストには常に left という用語を使用し、リモートホストには常に right という用語を使用します。
前提条件
リモートゲートウェイで 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 ネットワークセキュリティーサービス (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
およびrightid=%fromcert
- 証明書の識別名 (DN) フィールドからアイデンティティーを取得するように Libreswan を設定します。
leftcert="<server_certificate_nickname>"
- NSS データベースで使用されるサーバーの証明書のニックネームを設定します。
rightsubnet: <subnet>
- ゲートウェイに接続されているサブネットを Classless Inter-Domain Routing (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 接続を専用ルーティングテーブルに割り当てる を参照してください。