第31章 RHEL システムロールを使用した VPN 接続の設定
VPN は、信頼できないネットワーク経由でトラフィックをセキュアに送信するための暗号化接続です。vpn
RHEL システムロールを使用すると、VPN 設定の作成プロセスを自動化できます。
vpn
RHEL システムロールは、VPN プロバイダーとして、IPsec 実装である Libreswan のみをサポートしています。
31.1. vpn
RHEL システムロールを使用して PSK 認証によるホスト間 IPsec VPN を作成する
IPsec を使用すると、VPN を介してホストを相互に直接接続できます。ホストは事前共有鍵 (PSK) を使用して相互に認証できます。vpn
RHEL システムロールを使用すると、PSK 認証による IPsec ホスト間接続を作成するプロセスを自動化できます。
デフォルトでは、このロールはトンネルベースの VPN を作成します。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow --- - name: Configuring VPN hosts: managed-node-01.example.com, managed-node-02.example.com tasks: - name: IPsec VPN with PSK authentication ansible.builtin.include_role: name: redhat.rhel_system_roles.vpn vars: vpn_connections: - hosts: managed-node-01.example.com: managed-node-02.example.com: auth_method: psk auto: start vpn_manage_firewall: true vpn_manage_selinux: true
--- - name: Configuring VPN hosts: managed-node-01.example.com, managed-node-02.example.com tasks: - name: IPsec VPN with PSK authentication ansible.builtin.include_role: name: redhat.rhel_system_roles.vpn vars: vpn_connections: - hosts: managed-node-01.example.com: managed-node-02.example.com: auth_method: psk auto: start vpn_manage_firewall: true vpn_manage_selinux: true
サンプル Playbook で指定されている設定は次のとおりです。
hosts: <list>
VPN を設定するホストを含む YAML ディクショナリーを定義します。エントリーが Ansible 管理対象ノードでない場合は、
hostname
パラメーターに完全修飾ドメイン名 (FQDN) または IP アドレスを指定する必要があります。次に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ... - hosts: ... external-host.example.com: hostname: 192.0.2.1
... - hosts: ... external-host.example.com: hostname: 192.0.2.1
このロールは、各管理対象ノード上の VPN 接続を設定します。接続の名前は
<host_A>-to-<host_B>
です (例:managed-node-01.example.com-to-managed-node-02.example.com
)。このロールは外部 (管理対象外) ノード上で Libreswan を設定することはできないことに注意してください。そのようなホストでは手動で設定を作成する必要があります。auth_method: psk
-
ホスト間の PSK 認証を有効にします。ロールはコントロールノードで
openssl
を使用して PSK を作成します。 auto: <start-up_method>
-
接続の起動方法を指定します。有効な値は
add
、ondemand
、start
、およびignore
です。詳細は、Libreswan がインストールされているシステム上のipsec.conf(5)
man ページを参照してください。この変数のデフォルト値は null です。この値は自動起動操作を実行しないことを示します。 vpn_manage_firewall: true
-
ロールにより、管理対象ノード上の
firewalld
サービスで必要なポートを開くことを指定します。 vpn_manage_selinux: true
- ロールにより、IPsec ポートに必要な SELinux ポートタイプを設定することを指定します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.vpn/README.md
ファイルを参照してください。Playbook の構文を検証します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
検証
接続が正常に開始されたことを確認します。次に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "managed-node-01.example.com-to-managed-node-02.example.com"'
# ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "managed-node-01.example.com-to-managed-node-02.example.com"' ... 006 #3: "managed-node-01.example.com-to-managed-node-02.example.com", type=ESP, add_time=1741857153, inBytes=38622, outBytes=324626, maxBytes=2^63B, id='@managed-node-02.example.com'
このコマンドは、VPN 接続がアクティブでないと成功しないことに注意してください。Playbook 内の
auto
変数をstart
以外の値に設定する場合は、まず管理対象ノードで接続を手動でアクティブ化する必要がある場合があります。
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.vpn/README.md
ファイル -
/usr/share/doc/rhel-system-roles/vpn/
ディレクトリー