6.13.2. nmstatectl を使用して raw RSA 鍵認証による IPsec サイト間 VPN を設定する
宣言型の Nmstate API を使用すると、2 つの異なるネットワーク間でサイト間 VPN を設定し、セキュアでないネットワークを介してそれらをシームレスにリンクできます。Nmstate を使用すると、結果が必ず設定ファイルと一致したものになります。一致しない場合は、変更がロールバックされます。
ゲートウェイデバイスの認証に関しては、RSA 鍵は事前共有鍵 (PSK) よりもセキュアです。非対称暗号化によって秘密情報共有のリスクが排除されるためです。また、RSA 鍵を使用すると、強力なピアツーピア認証を提供しつつも、認証局 (CA) が不要になるため、デプロイが容易になります。
一般に、どちらのホストを left または right と呼ぶかは任意です。ただし、NetworkManager では、ローカルホストには常に left という用語を使用し、リモートホストには常に right という用語を使用します。
前提条件
リモートゲートウェイは Libreswan IPsec を実行しており、サイト間 接続に対応しています。
NetworkManager-libreswanプラグインの設計上、Nmstate は、同じ接続にこのプラグインを使用する他のピアと通信することはできません。
手順
Libreswan がまだインストールされていない場合は、次の手順を実行します。
必要なパッケージをインストールします。
# dnf install nmstate libreswan NetworkManager-libreswanNetworkManager サービスを再起動します。
# systemctl restart NetworkManagerネットワークセキュリティーサービス (NSS) データベースを初期化します。
# ipsec initnssこのコマンドにより、
/var/lib/ipsec/nss/ディレクトリーにデータベースが作成されます。ファイアウォールで IPsec ポートとプロトコルを開きます。
# firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
RSA 鍵ペアを作成します。
# ipsec newhostkeyipsecユーティリティーにより、鍵ペアが NSS データベースに保存されます。left と right 両方のピアの Certificate Key Attribute ID (CKAID) を表示します。
# ipsec showhostkey --list < 1> RSA keyid: <key_id> ckaid: <ckaid>以降のステップで、両方のピアの CKAID が必要になります。
公開鍵を表示します。
left ピアで次のように入力します。
# ipsec showhostkey --left --ckaid <ckaid_of_left_peer> # rsakey AwEAAdKCx leftrsasigkey=0sAwEAAdKCxpc9db48cehzQiQD...right ピアで次のように入力します。
# ipsec showhostkey --right --ckaid <ckaid_of_right_peer> # rsakey AwEAAcNWC rightrsasigkey=0sAwEAAcNWCzZO+PR1j8WbO8X...
これらのコマンドにより、設定ファイルで使用する必要がある対応するパラメーターとともに、公開鍵が表示されます。
次の内容を含む YAML ファイル (例:
~/ipsec-site-to-site-rsa-auth.yml) を作成します。--- interfaces: - name: '<connection_name>' type: ipsec libreswan: ikev2: insist left: <ip_address_or_fqdn_of_left_peer> leftid: peer_b leftrsasigkey: <public_key_of_left_peer> leftmodecfgclient: false leftsubnet: 198.51.100.0/24 right: <ip_address_or_fqdn_of_right_peer> rightid: peer_a rightrsasigkey: <public_key_of_right_peer> rightsubnet: 192.0.2.0/24この例で指定されている設定は次のとおりです。
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設定をシステムに適用します。
# nmstatectl apply ~/ipsec-site-to-site-rsa-auth.yml
検証
IPsec ステータスを表示します。
# ipsec status接続が正常に確立されていれば、出力に次の行が含まれています。
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;これで、セキュリティーアソシエーション (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;これは、データトラフィックが通過する実際のトンネルです。
- ローカルサブネット内のクライアントから、リモートサブネット内のクライアントに ping を実行します。
トラブルシューティング
NetworkManager が Libreswan に渡す実際の設定を表示するには、次のように入力します。
# nmcli connection export <connection_name>この出力は、リモートホスト上の Libreswan 設定と比較する際に、ID や鍵などの設定の違いを特定するのに役立ちます。
次のステップ
- DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細および緩和策手順については、VPN 接続を専用ルーティングテーブルに割り当てて、接続がトンネルを迂回するのを防ぐ を参照してください。