7.7. メッシュ VPN の設定


IPsec メッシュは、すべてのサーバーが他のすべてのサーバーとセキュアに直接通信できる、完全に相互接続されたネットワークを形成するものです。これは、複数のデータセンターやクラウドプロバイダーにまたがる分散データベースクラスターや高可用性環境に最適です。

メッシュの VPN ネットワークは、以下のいずれかの方法で設定できます。

  • IPSec を必要とする。
  • IPsec を優先するが、平文通信へのフォールバックを可能にする。

ノード間の認証は、X.509 証明書または DNSSEC (DNS Security Extensions) を基にできます。

これらの接続は通常の Libreswan 設定であるため、オポチュニスティック IPsec に通常の IKEv2 認証方法を使用できます。ただし、right=%opportunisticgroup エントリーで定義されるオポチュニスティック IPsec を除きます。一般的な認証方法は、一般に共有される認証局 (CA) を使用して、X.509 証明書に基づいてホストを相互に認証させる方法です。クラウドデプロイメントでは通常、標準の手順の一部として、クラウド内の各ノードに証明書を発行します。

重要

1 つのホストが侵害されると、グループの PSK シークレットも侵害されるため、PreSharedKey (PSK) 認証は使用しないでください。

NULL 認証を使用すると、認証なしでノード間に暗号化をデプロイできます。これを使用した場合、受動的な攻撃者からのみ保護されます。

以下の手順では、X.509 証明書を使用します。この証明書は、Dogtag Certificate System などの任意の種類の CA 管理システムを使用して生成できます。Dogtag は、各ノードの証明書が PKCS #12 形式 (.p12 ファイル) で利用可能であることを前提としています。これには、秘密鍵、ノード証明書、およびその他のノードの X.509 証明書を検証するのに使用されるルート CA 証明書が含まれます。

各ノードでは、その X.509 証明書を除いて、同じ設定を使用します。これにより、ネットワーク内で既存ノードを再設定せずに、新規ノードを追加できます。PKCS #12 ファイルには "分かりやすい名前" が必要であるため、名前には "node" を使用します。これにより、すべてのノードに対して、この名前を参照する設定ファイルが同一になります。

前提条件

  • Libreswan がインストールされ、ipsec サービスが各ノードで開始している。
  • 新しい NSS データベースが初期化されている。

    1. すでに古い NSS データベースがある場合は、古いデータベースファイルを削除します。

      # systemctl stop ipsec
      # rm /etc/ipsec.d/*db
    2. 次のコマンドを使用して、新しいデータベースを初期化できます。

      # ipsec initnss

手順

  1. 各ノードで PKCS #12 ファイルをインポートします。この手順では、PKCS #12 ファイルの生成に使用するパスワードが必要になります。

    # ipsec import nodeXXX.p12
  2. IPsec required (private)、IPsec optional (private-or-clear)、および No IPsec (clear) プロファイルに、以下のような 3 つの接続定義を作成します。

    # cat /etc/ipsec.d/mesh.conf
    conn clear
    	auto=ondemand
    	type=passthrough
    	authby=never
    	left=%defaultroute
    	right=%group
    
    conn private
    	auto=ondemand
    	type=transport
    	authby=rsasig
    	failureshunt=drop
    	negotiationshunt=drop
    	ikev2=insist
    	left=%defaultroute
    	leftcert=nodeXXXX
    	leftid=%fromcert
    	rightid=%fromcert
    	right=%opportunisticgroup
    
    conn private-or-clear
    	auto=ondemand
    	type=transport
    	authby=rsasig
    	failureshunt=passthrough
    	negotiationshunt=passthrough
    	# left
    	left=%defaultroute
    	leftcert=nodeXXXX
    	leftid=%fromcert
    	leftrsasigkey=%cert
    	# right
    	rightrsasigkey=%cert
    	rightid=%fromcert
    	right=%opportunisticgroup

    各項目の説明:

    auto=<option>

    Libreswan が接続開始をどのように処理するかを指定します。有効なオプション:

    • ondemand: カーネルがトラップ XFRM ポリシーに一致する最初のパケットを受信したときに、自動的に接続を開始します。このオプションは、機会主義的な IPsec 接続、または継続的にアクティブである必要のない接続に使用します。
    • add: 接続を準備し、着信接続要求を受け入れます。ローカルピアから接続を開始するには、ipsec auto --up コマンドを使用します。
    • start:Libreswan サービスが起動すると、自動的に接続を有効にします。
    leftid= %fromcert および rightid= %fromcert
    証明書の識別名 (DN) フィールドからアイデンティティーを取得するように Libreswan を設定します。
    leftcert="<server_certificate_nickname>"
    NSS データベースで使用されるサーバー証明書のニックネームを指定します。
  3. ネットワークの IP アドレスを対応するカテゴリーに追加します。たとえば、すべてのノードが 10.15.0.0/16 ネットワーク内に存在し、すべてのノードで IPsec 暗号化を使用する必要がある場合は、次のコマンドを実行します。

    # echo "10.15.0.0/16" >> /etc/ipsec.d/policies/private
  4. 特定のノード (10.15.34.0/24 など) を IPsec の有無にかかわらず機能させるには、そのノードを private-or-clear グループに追加します。

    # echo "10.15.34.0/24" >> /etc/ipsec.d/policies/private-or-clear
  5. ホストを、10.15.1.2 など、IPsec の機能がない clear グループに定義する場合は、次のコマンドを実行します。

    # echo "10.15.1.2/32" >> /etc/ipsec.d/policies/clear

    /etc/ipsec.d/policies ディレクトリーのファイルは、各新規ノードのテンプレートから作成することも、Puppet または Ansible を使用してプロビジョニングすることもできます。

    すべてのノードでは、例外のリストが同じか、異なるトラフィックフローが期待される点に注意してください。したがって、あるノードで IPsec が必要になり、別のノードで IPsec を使用できないために、ノード間の通信ができない場合もあります。

  6. ノードを再起動して、設定したメッシュに追加します。

    # systemctl restart ipsec
  7. DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策については、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。

検証

  1. ping コマンドを使用して IPsec トンネルを開きます。

    # ping <nodeYYY>
  2. インポートされた証明書を含む NSS データベースを表示します。

    # certutil -L -d sql:/etc/ipsec.d
    
    Certificate Nickname    Trust Attributes
                            SSL,S/MIME,JAR/XPI
    
    west                    u,u,u
    ca                      CT,,
  3. ノード上の開いているトンネルを確認します。

    # ipsec trafficstatus
    006 #2: "private#10.15.0.0/16"[1] ...<nodeYYY>, type=ESP, add_time=1691399301, inBytes=512, outBytes=512, maxBytes=2^63B, id='C=US, ST=NC, O=Example Organization, CN=east'
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

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

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

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

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

Legal Notice

Theme

© 2026 Red Hat
トップに戻る