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 ファイルを生成した。

手順

  1. 必要なパッケージをインストールします。

    # dnf install nmstate libreswan NetworkManager-libreswan
  2. NetworkManager サービスを再起動します。

    # systemctl restart NetworkManager
  3. Libreswan がすでにインストールされている場合は、古いデータベースファイルを削除して再作成します。

    # systemctl stop ipsec
    # rm /etc/ipsec.d/*db
    # ipsec initnss
  4. ipsec サービスを有効にして起動します。

    # systemctl enable --now ipsec
  5. PKCS#12 ファイルをインポートします。

    # ipsec import node-example.p12

    PKCS#12 ファイルをインポートするときは、ファイルの作成に使用したパスワードを入力します。

  6. 次の内容を含む 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 が IPsec xfrm 仮想インターフェイス 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) の存続期間
  7. 設定をシステムに適用します。

    # nmstatectl apply ~/create-pki-authentication.yml

検証

  1. IPsec のステータスを確認します。

    # ip xfrm status
  2. 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 という名前を持つシステムがリモートホストです。次の手順は両方のホストで実行する必要があります。

手順

  1. 必要なパッケージをインストールします。

    # dnf install nmstate libreswan NetworkManager-libreswan
  2. NetworkManager サービスを再起動します。

    # systemctl restart NetworkManager
  3. Libreswan がすでにインストールされている場合は、古いデータベースファイルを削除して再作成します。

    # systemctl stop ipsec
    # rm /etc/ipsec.d/*db
    # ipsec initnss
  4. 各ホストで RSA 鍵ペアを生成します。

    # ipsec newhostkey --output
  5. 公開鍵を表示します。

    # ipsec showhostkey --list
  6. 前のステップで、生成された鍵 ckaid が返されます。その ckaid を、left 側で次のコマンドで使用します。次に例を示します。

    # ipsec showhostkey --left --ckaid <0sAwEAAesFfVZqFzRA9F>
  7. 上のコマンドの出力により、設定に必要な leftrsasigkey= 行が生成されます。2 番目のホスト (right 側) でも同じ操作を実行します。

    # ipsec showhostkey --right --ckaid <0sAwEAAesFfVZqFzRA9E>
  8. 起動時に ipsec サービスを自動的に起動するように有効にします。

    # systemctl enable --now ipsec
  9. 次の内容を含む 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 が IPsec xfrm 仮想インターフェイス ipsec<number> を作成し、利用可能な次の番号を自動的に検出します。
    4
    ローカルホストの RSA 公開鍵
    5
    ローカルホストのパブリックネットワークインターフェイスの静的 IPv4 アドレス
    6
    ローカルホストの識別名 (DN)
    7
    リモートホストの RSA 公開鍵
    8
    リモートホストのパブリックネットワークインターフェイスの静的 IPv4 アドレス
    9
    リモートホストの識別名 (DN)
    10
    insist 値は、Internet Key Exchange (IKEv2) プロトコルのみを受け入れて受信します。
  10. 設定をシステムに適用します。

    # nmstatectl apply ~/create-rsa-authentication.yml

検証

  1. ネットワークインターフェイスの IP 設定を表示します。

    # ip addr show example_ipsec_conn1
  2. IPsec のステータスを確認します。

    # ip xfrm status
  3. 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 という名前を持つシステムがリモートホストです。次の手順は両方のホストで実行する必要があります。

注記

この方式は、認証と暗号化に静的文字列を使用するため、テスト/開発目的でのみ使用してください。

手順

  1. 必要なパッケージをインストールします。

    # dnf install nmstate libreswan NetworkManager-libreswan
  2. NetworkManager サービスを再起動します。

    # systemctl restart NetworkManager
  3. Libreswan がすでにインストールされている場合は、古いデータベースファイルを削除して再作成します。

    # systemctl stop ipsec
    # rm /etc/ipsec.d/*db
    # ipsec initnss
  4. 起動時に ipsec サービスを自動的に起動するように有効にします。

    # systemctl enable --now ipsec
  5. 次の内容を含む 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 ファイルで次の設定を定義します。

    1
    IPsec 接続名
    2
    値を no に設定すると、libreswanxfrm ポリシーのみを作成し、仮想 xfrm インターフェイスを作成しません。
    3
    リモートホストのパブリックネットワークインターフェイスの静的 IPv4 アドレス
    4
    リモートホストの識別名 (DN)
    5
    ローカルホストのパブリックネットワークインターフェイスの静的 IPv4 アドレス
    6
    ローカルホストの識別名 (DN)
    7
    insist 値は、Internet Key Exchange (IKEv2) プロトコルのみを受け入れて受信します。
  6. 設定をシステムに適用します。

    # nmstatectl apply ~/create-pks-authentication.yml

検証

  1. ネットワークインターフェイスの IP 設定を表示します。

    # ip addr show example_ipsec_conn1
  2. IPsec のステータスを確認します。

    # ip xfrm status
  3. 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-hosthost-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 ファイルを生成した。

手順

  1. 必要なパッケージをインストールします。

    # dnf install nmstate libreswan NetworkManager-libreswan
  2. NetworkManager サービスを再起動します。

    # systemctl restart NetworkManager
  3. Libreswan がすでにインストールされている場合は、古いデータベースファイルを削除して再作成します。

    # systemctl stop ipsec
    # rm /etc/ipsec.d/*db
    # ipsec initnss
  4. PKCS#12 ファイルをインポートします。

    # ipsec import node-example.p12

    PKCS#12 ファイルをインポートするときは、ファイルの生成に使用したパスワードを入力します。

  5. ipsec サービスを有効にして起動します。

    # systemctl enable --now ipsec
  6. 次の内容を含む 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 ファイルで次の設定を定義します。

    1
    IPsec 接続名
    2
    ローカルホストのパブリックネットワークインターフェイスの静的 IPv4 アドレス
    3
    ローカルホストの識別名 (DN)
    4
    ローカルホストにインストールされた証明書名
    5
    リモートホストからクライアント設定を取得しないための値
    6
    リモートホストのパブリックネットワークインターフェイスの静的 IPv4 アドレス
    7
    リモートホストの識別名 (DN)
    8
    リモートホストのサブネット範囲 - 192.0.2.15032 個の IPv4 アドレス
    9
    Internet Key Exchange (IKEv2) プロトコルのみを受け入れて受信するための値
  7. 設定をシステムに適用します。

    # nmstatectl apply ~/create-p2p-vpn-authentication.yml

検証

  1. 作成された P2P ポリシーを表示します。

    # ip xfrm policy
  2. 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 ファイルを生成した。

手順

  1. 必要なパッケージをインストールします。

    # dnf install nmstate libreswan NetworkManager-libreswan
  2. NetworkManager サービスを再起動します。

    # systemctl restart NetworkManager
  3. Libreswan がすでにインストールされている場合は、古いデータベースファイルを削除して再作成します。

    # systemctl stop ipsec
    # rm /etc/ipsec.d/*db
    # ipsec initnss
  4. PKCS#12 ファイルをインポートします。

    # ipsec import node-example.p12

    PKCS#12 ファイルをインポートするときは、ファイルの作成に使用したパスワードを入力します。

  5. ipsec サービスを有効にして起動します。

    # systemctl enable --now ipsec
  6. 次の内容を含む 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 が IPsec xfrm 仮想インターフェイス 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) の存続期間
  7. 設定をシステムに適用します。

    # nmstatectl apply ~/create-p2p-transport-authentication.yml

検証

  1. IPsec のステータスを確認します。

    # ip xfrm status
  2. IPsec のポリシーを確認します。

    # ip xfrm policy

関連情報

  • システム上の ipsec.conf(5) man ページ
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.