第13章 VPN RHEL システムロールを使用した IPsec との vpn 接続の設定
vpn
システムロールを使用すると、Red Hat Ansible Automation Platform を使用して RHEL システムで VPN 接続を設定できます。これを使用して、ホスト間、ネットワーク間、VPN リモートアクセスサーバー、およびメッシュ設定をセットアップできます。
ホスト間接続の場合、ロールは、必要に応じてキーを生成するなど、デフォルトのパラメーターを使用して、vpn_connections
のリスト内のホストの各ペア間に VPN トンネルを設定します。または、リストされているすべてのホスト間に日和見メッシュ設定を作成するように設定することもできます。このロールは、hosts
の下にあるホストの名前が Ansible インベントリーで使用されているホストの名前と同じであり、それらの名前を使用してトンネルを設定できることを前提としています。
vpn
RHEL システムロールは現在、VPN プロバイダーとして IPsec 実装であ る Libreswan のみをサポートしています。
13.1. vpn
システムロールを使用して IPsec でホスト間 VPN の作成
vpn
システムロールを使用して、コントロールノードで Ansible Playbook を実行することにより、ホスト間接続を設定できます。これにより、インベントリーファイルにリストされているすべての管理対象ノードが設定されます。
前提条件
-
1 つ以上の 管理対象ノード (
vpn
システムロールで設定するシステム) へのアクセスおよびパーミッション。 コントロールノード (このシステムから Red Hat Ansible Core は他のシステムを設定) へのアクセスおよびパーミッション。
コントロールノードでは、
-
ansible-core
パッケージおよびrhel-system-roles
パッケージがインストールされている。
-
RHEL 8.0-8.5 では、別の Ansible リポジトリーへのアクセス権を指定されており、Ansible をベースにする自動化用の Ansible Engine 2.9 が含まれています。Ansible Engine には、ansible
、ansible-playbook
などのコマンドラインユーティリティー、docker
や podman
などのコネクター、プラグインとモジュールが多く含まれています。Ansible Engine を入手してインストールする方法については、ナレッジベースの How to download and install Red Hat Ansible Engine を参照してください。
RHEL 8.6 および 9.0 では、Ansible Core (ansible-core
パッケージとして提供) が導入されました。これには、Ansible コマンドラインユーティリティー、コマンド、およびビルトイン Ansible プラグインのセットが含まれています。RHEL は、AppStream リポジトリーを介してこのパッケージを提供し、サポート範囲は限定的です。詳細については、ナレッジベースの Scope of support for the Ansible Core package included in the RHEL 9 and RHEL 8.6 and later AppStream repositories を参照してください。
- 管理対象ノードが記載されているインベントリーファイルがある。
手順
以下の内容を含む新しい
playbook.yml
ファイルを作成します。- name: Host to host VPN hosts: managed_node1, managed_node2 roles: - rhel-system-roles.vpn vars: vpn_connections: - hosts: managed_node1: managed_node2:
この Playbook は、システムロールによって自動生成されたキーを使用した事前共有キー認証を使用して、
managed_node1からmanaged_node2
への接続を設定します。オプション:ホストの
vpn_connections
リストに次のセクションを追加して、管理対象ホストから、インベントリーファイルに記述されていない外部ホストへの接続を設定します。vpn_connections: - hosts: managed_node1: managed_node2: external_node: hostname: 192.0.2.2
これは、追加の接続 (
managed_node1からexternal_node
) へと (managed_node2からexternal_node
) を設定します。
接続は管理対象ノードでのみ設定され、外部ノードでは設定されません。
オプション:
vpn_connections
内の追加セクション (コントロールプレーンやデータプレーンなど) を使用して、管理対象ノードに複数の VPN 接続を指定できます。- name: Multiple VPN hosts: managed_node1, managed_node2 roles: - rhel-system-roles.vpn vars: vpn_connections: - name: control_plane_vpn hosts: managed_node1: hostname: 192.0.2.0 # IP for the control plane managed_node2: hostname: 192.0.2.1 - name: data_plane_vpn hosts: managed_node1: hostname: 10.0.0.1 # IP for the data plane managed_node2: hostname: 10.0.0.2
-
オプション:設定に合わせて変数を変更できます。詳細は、
/usr/share/doc/rhel-system-roles/vpn/README.md
ファイルを参照してください。 オプション:Playbook の構文を確認します。
# ansible-playbook --syntax-check /path/to/file/playbook.yml -i /path/to/file/inventory_file
インベントリーファイルで Playbook を実行します。
# ansible-playbook -i /path/to/file/inventory_file /path/to/file/playbook.yml
検証
管理対象ノードで、接続が正常にロードされていることを確認します。
# ipsec status | grep connection.name
connection.nameを、このノードからの接続の名前 (たとえば、
managed_node1-to-managed_node2
) に置き換えます。
デフォルトでは、ロールは、各システムの観点から作成する接続ごとにわかりやすい名前を生成します。たとえば、managed_node1
と managed_node2
との間の接続を作成するときに、managed_node1
上のこの接続のわかりやすい名前は managed_node1-to-managed_node2
ですが、managed_node2
では、この接続の名前は managed_node2-to-managed_node1
となります。
管理対象ノードで、接続が正常に開始されたことを確認します。
# ipsec trafficstatus | grep connection.name
オプション:接続が正常に読み込まれなかった場合は、次のコマンドを入力して手動で接続を追加します。これにより、接続の確立に失敗した理由を示す、より具体的な情報が提供されます。
# ipsec auto --add connection.name
注記接続の読み込みおよび開始のプロセス中に発生した可能性のあるエラーは、ログに報告されます。ログは、
/var/log/pluto.log
にあります。これらのログは解析が難しいため、代わりに接続を手動で追加して、標準出力からログメッセージを取得してみてください。