5.18. nmstatectl を使用して IPsec ベースの VPN 接続を設定する
IPsec (Internet Protocol Security) は、VPN の実装用に Libreswan
によって提供されるセキュリティープロトコルスイートです。IPsec には、接続の確立時に認証を開始し、データ転送中にキーを管理するプロトコルが組み込まれています。アプリケーションがネットワークにデプロイされていて、IP プロトコルを使用して通信する場合、IPsec はデータ通信を保護できます。
VPN 接続を認証するための IPsec ベースの設定を管理するには、nmstatectl
ユーティリティーを使用できます。このユーティリティーは、ホストネットワーク管理用の宣言型 API へのコマンドラインアクセスを提供します。host-to-subnet
および host-to-host
通信モードの認証タイプを以下に示します。
- ホスト/サブネット間 PKI 認証
- ホスト/サブネット間 RSA 認証
- ホスト/サブネット間 PSK 認証
- ホスト間トンネルモード認証
- ホスト間トランスポートモード認証
5.18.1. nmstatectl を使用して PKI 認証とトンネルモードによるホスト/サブネット間 IPSec VPN を設定する
信頼できるエンティティー認証に基づく暗号化を IPsec で使用する必要がある場合、公開鍵基盤 (PKI) により、2 つのホスト間で暗号化キーを使用することで、セキュアな通信が実現します。通信する両方のホストが秘密鍵と公開鍵を生成します。各ホストは信頼できるエンティティーの認証局 (CA) と公開鍵を共有することで秘密鍵を維持します。CA は信頼性を検証した後、デジタル証明書を生成します。暗号化と復号を行う場合、ホストは暗号化に秘密鍵を使用し、復号化に公開鍵を使用します。
ネットワーク管理用の宣言型 API である Nmstate を使用すると、PKI 認証ベースの IPsec 接続を設定できます。設定すると、Nmstate API によって結果と設定ファイルが一致することが確認されます。何らかの障害が発生した場合、nmstate
は自動的に変更をロールバックし、システムが正しくない状態になるのを回避します。
host-to-subnet
設定で暗号化された通信を確立するために、リモート IPsec エンドがパラメーター dhcp: true
を使用してホストに別の IP を提供します。nmstate で IPsec
のシステムを定義する場合、left
という名前を持つシステムがローカルホストであり、right
という名前を持つシステムがリモートホストです。次の手順は両方のホストで実行する必要があります。
前提条件
- パスワードを使用して、証明書と暗号化キーを保存する PKCS #12 ファイルを生成した。
手順
必要なパッケージをインストールします。
# dnf install nmstate libreswan NetworkManager-libreswan
NetworkManager サービスを再起動します。
# systemctl restart NetworkManager
Libreswan
がすでにインストールされている場合は、古いデータベースファイルを削除して再作成します。# systemctl stop ipsec # rm /etc/ipsec.d/*db # ipsec initnss
ipsec
サービスを有効にして起動します。# systemctl enable --now ipsec
PKCS#12 ファイルをインポートします。
# ipsec import node-example.p12
PKCS#12 ファイルをインポートするときは、ファイルの作成に使用したパスワードを入力します。
次の内容を含む YAML ファイル (例:
~/create-pki-authentication.yml
) を作成します。--- interfaces: - name: 'example_ipsec_conn1' 1 type: ipsec ipv4: enabled: true dhcp: true libreswan: ipsec-interface: 'yes' 2 left: '192.0.2.250' 3 leftid: '%fromcert' 4 leftcert: 'local-host.example.com' 5 right: '192.0.2.150' 6 rightid: '%fromcert' 7 ikev2: 'insist' 8 ikelifetime: '24h' 9 salifetime: '24h' 10
YAML ファイルで次の設定を定義します。
- 1
- IPsec 接続名
- 2
- 値が
yes
の場合、libreswan
が IPsecxfrm
仮想インターフェイスipsec<number>
を作成し、利用可能な次の番号を自動的に検出します。 - 3
- ローカルホストのパブリックネットワークインターフェイスの静的 IPv4 アドレス
- 4
%fromcert
値は、ローカルホストで、ロードされた証明書から取得された識別名 (DN) に ID を設定します。- 5
- ローカルホストの公開鍵の識別名 (DN)
- 6
- リモートホストのパブリックネットワークインターフェイスの静的 IPv4 アドレス
- 7
%fromcert
値は、リモートホストで、ロードされた証明書から取得された識別名 (DN) に ID を設定します。- 8
insist
値は、Internet Key Exchange (IKEv2) プロトコルのみを受け入れて受信します。- 9
- IKE プロトコルの存続時間
- 10
- IPsec セキュリティーアソシエーション (SA) の存続期間
設定をシステムに適用します。
# nmstatectl apply ~/create-pki-authentication.yml
検証
IPsec のステータスを確認します。
# ip xfrm status
IPsec のポリシーを確認します。
# ip xfrm policy
関連情報
-
システム上の
ipsec.conf(5)
man ページ
5.18.2. nmstatectl を使用して RSA 認証とトンネルモードによるホスト/サブネット間 IPSec VPN を設定する
IPsec で非対称暗号化ベースのキー認証を使用する必要がある場合、RSA アルゴリズムにより、2 つのホスト間の暗号化および復号に秘密鍵と公開鍵のいずれかを使用することで、セキュアな通信が実現します。この方法では、暗号化に秘密鍵を使用し、復号に公開鍵を使用します。
ネットワーク管理用の宣言型 API である Nmstate を使用すると、RSA ベースの IPsec 認証を設定できます。設定すると、Nmstate API によって結果と設定ファイルが一致することが確認されます。何らかの障害が発生した場合、nmstate
は自動的に変更をロールバックし、システムが正しくない状態になるのを回避します。
host-to-subnet
設定で暗号化された通信を確立するために、リモート IPsec エンドがパラメーター dhcp: true
を使用してホストに別の IP を提供します。nmstate で IPsec
のシステムを定義する場合、left
という名前を持つシステムがローカルホストであり、right
という名前を持つシステムがリモートホストです。次の手順は両方のホストで実行する必要があります。
手順
必要なパッケージをインストールします。
# dnf install nmstate libreswan NetworkManager-libreswan
NetworkManager サービスを再起動します。
# systemctl restart NetworkManager
Libreswan
がすでにインストールされている場合は、古いデータベースファイルを削除して再作成します。# systemctl stop ipsec # rm /etc/ipsec.d/*db # ipsec initnss
各ホストで RSA 鍵ペアを生成します。
# ipsec newhostkey --output
公開鍵を表示します。
# ipsec showhostkey --list
前のステップで、生成された鍵
ckaid
が返されます。そのckaid
を、left 側で次のコマンドで使用します。次に例を示します。# ipsec showhostkey --left --ckaid <0sAwEAAesFfVZqFzRA9F>
上のコマンドの出力により、設定に必要な
leftrsasigkey=
行が生成されます。2 番目のホスト (right 側) でも同じ操作を実行します。# ipsec showhostkey --right --ckaid <0sAwEAAesFfVZqFzRA9E>
起動時に
ipsec
サービスを自動的に起動するように有効にします。# systemctl enable --now ipsec
次の内容を含む YAML ファイル (例:
~/create-rsa-authentication.yml
) を作成します。--- interfaces: - name: 'example_ipsec_conn1' 1 type: ipsec 2 ipv4: enabled: true dhcp: true libreswan: ipsec-interface: '99' 3 leftrsasigkey: '0sAwEAAesFfVZqFzRA9F' 4 left: '192.0.2.250' 5 leftid: 'local-host-rsa.example.com' 6 right: '192.0.2.150' 7 rightrsasigkey: '0sAwEAAesFfVZqFzRA9E' 8 rightid: 'remote-host-rsa.example.com' 9 ikev2: 'insist' 10
YAML ファイルで次の設定を定義します。
- 1
- IPsec 接続名
- 2
- インターフェイス名
- 3
- 値が
99
の場合、libreswan
が IPsecxfrm
仮想インターフェイスipsec<number>
を作成し、利用可能な次の番号を自動的に検出します。 - 4
- ローカルホストの RSA 公開鍵
- 5
- ローカルホストのパブリックネットワークインターフェイスの静的 IPv4 アドレス
- 6
- ローカルホストの識別名 (DN)
- 7
- リモートホストの RSA 公開鍵
- 8
- リモートホストのパブリックネットワークインターフェイスの静的 IPv4 アドレス
- 9
- リモートホストの識別名 (DN)
- 10
insist
値は、Internet Key Exchange (IKEv2) プロトコルのみを受け入れて受信します。
設定をシステムに適用します。
# nmstatectl apply ~/create-rsa-authentication.yml
検証
ネットワークインターフェイスの IP 設定を表示します。
# ip addr show example_ipsec_conn1
IPsec のステータスを確認します。
# ip xfrm status
IPsec のポリシーを確認します。
# ip xfrm policy
関連情報
-
システム上の
ipsec.conf(5)
man ページ
5.18.3. nmstatectl を使用して PSK 認証とトンネルモードによるホスト/サブネット間 IPSec VPN を設定する
IPsec で相互認証に基づく暗号化を使用する必要がある場合、事前共有鍵 (PSK) 方式により、2 つのホスト間で秘密鍵を使用することで、セキュアな通信が実現します。ファイルに秘密鍵が保存され、その秘密鍵でトンネルを通過するデータが暗号化されます。
ネットワーク管理用の宣言型 API である Nmstate を使用すると、PSK ベースの IPsec 認証を設定できます。設定すると、Nmstate API によって結果と設定ファイルが一致することが確認されます。何らかの障害が発生した場合、nmstate
は自動的に変更をロールバックし、システムが正しくない状態になるのを回避します。
host-to-subnet
設定で暗号化された通信を確立するために、リモート IPsec エンドがパラメーター dhcp: true
を使用してホストに別の IP を提供します。nmstate で IPsec
のシステムを定義する場合、left
という名前を持つシステムがローカルホストであり、right
という名前を持つシステムがリモートホストです。次の手順は両方のホストで実行する必要があります。
この方式は、認証と暗号化に静的文字列を使用するため、テスト/開発目的でのみ使用してください。
手順
必要なパッケージをインストールします。
# dnf install nmstate libreswan NetworkManager-libreswan
NetworkManager サービスを再起動します。
# systemctl restart NetworkManager
Libreswan
がすでにインストールされている場合は、古いデータベースファイルを削除して再作成します。# systemctl stop ipsec # rm /etc/ipsec.d/*db # ipsec initnss
起動時に
ipsec
サービスを自動的に起動するように有効にします。# systemctl enable --now ipsec
次の内容を含む YAML ファイル (例:
~/create-pks-authentication.yml
) を作成します。--- interfaces: - name: 'example_ipsec_conn1' 1 type: ipsec ipv4: enabled: true dhcp: true libreswan: ipsec-interface: 'no' 2 right: '192.0.2.250' 3 rightid: 'remote-host.example.org' 4 left: '192.0.2.150' 5 leftid: 'local-host.example.org' 6 psk: "example_password" ikev2: 'insist' 7
YAML ファイルで次の設定を定義します。
設定をシステムに適用します。
# nmstatectl apply ~/create-pks-authentication.yml
検証
ネットワークインターフェイスの IP 設定を表示します。
# ip addr show example_ipsec_conn1
IPsec のステータスを確認します。
# ip xfrm status
IPsec のポリシーを確認します。
# ip xfrm policy
5.18.4. nmstatectl を使用して PKI 認証とトンネルモードによるホスト間 IPSec VPN を設定する
IPsec (Internet Protocol Security) は、ネットワークおよびデバイス内の IP 通信を認証および暗号化するためのセキュリティープロトコルスイートです。Libreswan
ソフトウェアが VPN 用の IPsec 実装を提供します。
トンネルモードでは、通信の送信元および宛先 IP アドレスが IPsec トンネル内で暗号化されます。外部のネットワークスニファーが取得できるのは、left の IP と right の IP だけです。一般に、トンネルモードでは、host-to-host
、host-to-host
、および subnet-to-subnet
がサポートされます。このモードでは、新しい IP パケットが既存のパケットをそのペイロードとヘッダーとともにカプセル化します。このモードのカプセル化により、セキュアでないネットワーク上の IP データ、送信元ヘッダー、および宛先ヘッダーが保護されます。このモードは、subnet-to-subnet
、リモートアクセス接続、および信頼できないネットワーク (オープンなパブリック Wi-Fi ネットワークなど) でデータを転送する場合に役立ちます。デフォルトでは、IPsec はトンネルモードで 2 つのサイト間にセキュアなチャネルを確立します。後述の設定を使用すると、host-to-host
アーキテクチャーとして VPN 接続を確立できます。
ネットワーク管理用の宣言型 API である Nmstate を使用すると、IPsec VPN 接続を設定できます。設定すると、Nmstate API によって結果と設定ファイルが一致することが確認されます。何らかの障害が発生した場合、nmstate
は自動的に変更をロールバックし、システムが正しくない状態になるのを回避します。
host-to-host
の設定では、leftmodecfgclient: no
(値として no
) を設定して、サーバーからネットワーク設定を受信できないようにする必要があります。nmstate で IPsec
のシステムを定義する場合、left
という名前を持つシステムがローカルホストであり、right
という名前を持つシステムがリモートホストです。次の手順は両方のホストで実行する必要があります。
前提条件
- パスワードを使用して、証明書と暗号化キーを保存する PKCS #12 ファイルを生成した。
手順
必要なパッケージをインストールします。
# dnf install nmstate libreswan NetworkManager-libreswan
NetworkManager サービスを再起動します。
# systemctl restart NetworkManager
Libreswan
がすでにインストールされている場合は、古いデータベースファイルを削除して再作成します。# systemctl stop ipsec # rm /etc/ipsec.d/*db # ipsec initnss
PKCS#12 ファイルをインポートします。
# ipsec import node-example.p12
PKCS#12 ファイルをインポートするときは、ファイルの生成に使用したパスワードを入力します。
ipsec
サービスを有効にして起動します。# systemctl enable --now ipsec
次の内容を含む YAML ファイル (例:
~/create-p2p-vpn-authentication.yml
) を作成します。--- interfaces: - name: 'example_ipsec_conn1' 1 type: ipsec libreswan: left: '192.0.2.250' 2 leftid: 'local-host.example.com' 3 leftcert: 'local-host.example.com' 4 leftmodecfgclient: 'no' 5 right: '192.0.2.150' 6 rightid: 'remote-host.example.com' 7 rightsubnet: '192.0.2.150/32' 8 ikev2: 'insist' 9
YAML ファイルで次の設定を定義します。
設定をシステムに適用します。
# nmstatectl apply ~/create-p2p-vpn-authentication.yml
検証
作成された P2P ポリシーを表示します。
# ip xfrm policy
IPsec のステータスを確認します。
# ip xfrm status
関連情報
-
システム上の
ipsec.conf(5)
man ページ
5.18.5. nmstatectl を使用して PSK 認証とトランスポートモードを備えたホスト間 IPsec VPN を設定する
IPsec (Internet Protocol Security) は、ネットワークおよびデバイス内の IP 通信を認証および暗号化するためのセキュリティープロトコルスイートです。Libreswan
ユーティリティーが VPN 用の IPsec ベースの実装を提供します。
トランスポートモードでは、IP パケットのペイロードに対してのみ暗号化が機能します。また、元の IP ヘッダーがそのまま維持され、新しい IPsec ヘッダーが IP パケットに追加されます。トランスポートモードでは、通信の送信元 IP と宛先 IP は暗号化されず、外部 IP ヘッダーにコピーされます。したがって、ネットワーク上の IP データのみが暗号化によって保護されます。このモードは、ネットワークの host-to-host
接続でデータを転送する場合に便利です。このモードは、20 バイト (IP ヘッダー) のオーバーヘッドを節約するために、GRE トンネルと一緒に使用されることがよくあります。デフォルトでは、IPsec
ユーティリティーはトンネルモードを使用します。トランスポートモードを使用するには、host-to-host
接続データ転送に type: transport
を設定します。
ネットワーク管理用の宣言型 API である Nmstate を使用すると、IPsec VPN 接続を設定できます。設定すると、Nmstate API によって結果と設定ファイルが一致することが確認されます。何らかの障害が発生した場合、nmstate
は自動的に変更をロールバックし、システムが正しくない状態になるのを回避します。デフォルトの tunnel
モードをオーバーライドするには、transport
モードを指定します。
nmstate で IPsec
のシステムを定義する場合、left
という名前を持つシステムがローカルホストであり、right
という名前を持つシステムがリモートホストです。次の手順は両方のホストで実行する必要があります。
前提条件
- パスワードを使用して、証明書と暗号化キーを保存する PKCS #12 ファイルを生成した。
手順
必要なパッケージをインストールします。
# dnf install nmstate libreswan NetworkManager-libreswan
NetworkManager サービスを再起動します。
# systemctl restart NetworkManager
Libreswan
がすでにインストールされている場合は、古いデータベースファイルを削除して再作成します。# systemctl stop ipsec # rm /etc/ipsec.d/*db # ipsec initnss
PKCS#12 ファイルをインポートします。
# ipsec import node-example.p12
PKCS#12 ファイルをインポートするときは、ファイルの作成に使用したパスワードを入力します。
ipsec
サービスを有効にして起動します。# systemctl enable --now ipsec
次の内容を含む YAML ファイル (例:
~/create-p2p-transport-authentication.yml
) を作成します。--- interfaces: - name: 'example_ipsec_conn1' 1 type: ipsec libreswan: type: 'transport' 2 ipsec-interface: '99' 3 left: '192.0.2.250' 4 leftid: '%fromcert' 5 leftcert: 'local-host.example.org' 6 right: '192.0.2.150' 7 prefix-length: '32' 8 rightid: '%fromcert' 9 ikev2: 'insist' 10 ikelifetime: '24h' 11 salifetime: '24h' 12
YAML ファイルで次の設定を定義します。
- 1
- IPsec 接続名
- 2
- IPsec モード
- 3
- 値が
99
の場合、libreswan
が IPsecxfrm
仮想インターフェイスipsec<number>
を作成し、利用可能な次の番号を自動的に検出します。 - 4
- ローカルホストのパブリックネットワークインターフェイスの静的 IPv4 アドレス
- 5
%fromcert
値は、ローカルホストで、ロードされた証明書から取得された識別名 (DN) に ID を設定します。- 6
- ローカルホストの公開鍵の識別名 (DN)
- 7
- リモートホストのパブリックネットワークインターフェイスの静的 IPv4 アドレス
- 8
- ローカルホストの静的 IPv4 アドレスのサブネットマスク
- 9
%fromcert
値は、リモートホストで、ロードされた証明書から取得された識別名 (DN) に ID を設定します。- 10
- Internet Key Exchange (IKEv2) プロトコルのみを受け入れて受信するための値
- 11
- IKE プロトコルの存続時間
- 12
- IPsec セキュリティーアソシエーション (SA) の存続期間
設定をシステムに適用します。
# nmstatectl apply ~/create-p2p-transport-authentication.yml
検証
IPsec のステータスを確認します。
# ip xfrm status
IPsec のポリシーを確認します。
# ip xfrm policy
関連情報
-
システム上の
ipsec.conf(5)
man ページ