第30章 RHEL システムロールを使用して IPsec VPN 接続を設定する
仮想プライベートネットワーク (VPN) を使用すると、インターネットなどの信頼できないネットワーク上で、セキュアで暗号化されたトンネルを確立できます。このようなトンネルにより、転送中のデータの機密性と整合性が確保されます。一般的なユースケースとしては、支社と本社を接続することなどが挙げられます。
vpn RHEL システムロールを使用すると、Libreswan IPsec VPN 設定の作成プロセスを自動化できます。
vpn RHEL システムロールで作成できるのは、事前共有鍵 (PSK) または証明書を使用してピアを相互に認証する VPN 設定だけです。
30.1. vpn RHEL システムロールを使用して PSK 認証による IPsec ホスト間 VPN を設定する リンクのコピーリンクがクリップボードにコピーされました!
ホスト間 VPN は、2 つのデバイス間に直接的で安全な暗号化された接続を確立し、アプリケーションがインターネットなどの安全でないネットワーク経由で安全に通信できるようにします。
認証の場合、事前共有鍵 (PSK) は、2 つのピアのみが知っている単一の共有秘密を使用する簡単な方法です。このアプローチは設定が簡単で、デプロイメントの容易さが優先される基本的なセットアップに最適です。ただし、キーは厳重に秘密にしておく必要があります。キーにアクセスできる攻撃者は接続を危険にさらす可能性があります。
vpn RHEL システムロールを使用すると、PSK 認証による IPsec ホスト間接続を作成するプロセスを自動化できます。デフォルトでは、このロールはトンネルベースの VPN を作成します。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml) を作成します。--- - 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 アドレスを指定する必要があります。次に例を示します。... - hosts: ... external-host.example.com: hostname: 192.0.2.1このロールは、各管理対象ノード上の VPN 接続を設定します。接続の名前は
<peer_A>-to-<peer_B>です (例:managed-node-01.example.com-to-managed-node-02.example.com)。このロールは、外部 (管理対象外) ノード上で Libreswan を設定することはできないことに注意してください。そのようなピアでは手動で設定を作成する必要があります。auth_method: psk-
ピア間の PSK 認証を有効にします。ロールはコントロールノードで
opensslを使用して PSK を作成します。 auto: <startup_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 の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.ymlこのコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
検証
接続が正常に開始されたことを確認します。次に例を示します。
# 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以外の値に設定する場合は、まず管理対象ノードで接続を手動でアクティブ化する必要がある場合があります。