5.13. RHEL 시스템 역할을 사용하여 IPsec으로 VPN 연결 구성
vpn
시스템 역할을 사용하면 Red Hat Ansible Automation Platform을 사용하여 RHEL 시스템에서 VPN 연결을 구성할 수 있습니다. 이를 사용하여 host-to-host, network-to-network, VPN Remote Access Server 및 메시 구성을 설정할 수 있습니다.
호스트 간 연결의 경우 역할은 필요에 따라 기본 매개 변수를 사용하여 vpn_connections
목록에 있는 각 호스트 쌍 간에 VPN 터널을 설정합니다. 또는 나열된 모든 호스트 간에 opportunistic 메시 구성을 생성하도록 구성할 수 있습니다. 이 역할은 호스트에
있는 호스트의 이름이 Ansible 인벤토리에 사용된 호스트의 이름과 동일하고 해당 이름을 사용하여 터널을 구성할 수 있다고 가정합니다.
vpn
RHEL 시스템 역할은 현재 IPsec 구현인 Libreswan만 VPN 공급자로 지원합니다.
5.13.1. vpn
RHEL 시스템 역할을 사용하여 IPsec으로 호스트 간 VPN 생성
vpn
시스템 역할을 사용하여 제어 노드에서 Ansible 플레이북을 실행하여 인벤토리 파일에 나열된 모든 관리 노드를 구성하여 호스트 간 연결을 구성할 수 있습니다.
사전 요구 사항
- 컨트롤 노드 및 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo
권한이 있습니다.
절차
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/playbook.yml
)을 생성합니다.- name: Host to host VPN hosts: managed-node-01.example.com, managed-node-02.example.com roles: - rhel-system-roles.vpn vars: vpn_connections: - hosts: managed-node-01.example.com: managed-node-02.example.com: vpn_manage_firewall: true vpn_manage_selinux: true
이 플레이북은 시스템 역할에 의해 자동으로 생성되는 키와 함께 사전 공유 키 인증을 사용하여
managed-node-01.example.com-to-managed-node-02.example.com
연결을 구성합니다.vpn_manage_firewall
및vpn_manage_selinux
둘 다true
로 설정되므로vpn
역할은firewall
및selinux
역할을 사용하여vpn
역할에서 사용하는 포트를 관리합니다.인벤토리 파일에 나열되지 않은 외부 호스트로의 관리 호스트에서 연결을 구성하려면 다음 섹션을 호스트
vpn_connections
목록에 추가합니다.vpn_connections: - hosts: managed-node-01.example.com: <external_node>: hostname: <IP_address_or_hostname>
그러면 하나의 추가 연결을 구성합니다
. managed-node-01.example.com-to-<external_node>
참고연결은 관리형 노드에서만 구성되며 외부 노드에는 구성되지 않습니다.
선택 사항:
vpn_connections
내의 추가 섹션을 사용하여 관리 노드에 대해 여러 VPN 연결을 지정할 수 있습니다(예: 컨트롤 플레인 및 데이터 플레인).- name: Multiple VPN hosts: managed-node-01.example.com, managed-node-02.example.com roles: - rhel-system-roles.vpn vars: vpn_connections: - name: control_plane_vpn hosts: managed-node-01.example.com: hostname: 192.0.2.0 # IP for the control plane managed-node-02.example.com: hostname: 192.0.2.1 - name: data_plane_vpn hosts: managed-node-01.example.com: hostname: 10.0.0.1 # IP for the data plane managed-node-02.example.com: hostname: 10.0.0.2
플레이북 구문을 확인합니다.
$ ansible-playbook --syntax-check ~/playbook.yml
이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
Playbook을 실행합니다.
$ ansible-playbook ~/playbook.yml
검증
관리형 노드에서 연결이 성공적으로 로드되었는지 확인합니다.
# ipsec status | grep <connection_name>
&
lt;connection_name
>을 이 노드의 연결 이름으로 바꿉니다(예:managed_node1-to-managed_node
2) .참고기본적으로 역할은 각 시스템의 관점에서 생성하는 각 연결에 대해 설명이 포함된 이름을 생성합니다. 예를 들어
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
파일에 보고됩니다. 이러한 로그는 구문 분석하기 어렵기 때문에 대신 표준 출력에서 로그 메시지를 가져오는 데 수동으로 연결을 추가합니다.
추가 리소스
-
/usr/share/ansible/roles/rhel-system-roles.vpn/README.md
파일 -
/usr/share/doc/rhel-system-roles/vpn/
directory
5.13.2. vpn
RHEL 시스템 역할을 사용하여 IPsec을 통한 opportunistic 메시 VPN 연결 생성
vpn
시스템 역할을 사용하여 제어 노드에서 Ansible 플레이북을 실행하여 인증에 인증서를 사용하는 opportunistic 메시 VPN 연결을 구성할 수 있습니다. 이 연결은 인벤토리 파일에 나열된 모든 관리 노드를 구성합니다.
사전 요구 사항
- 컨트롤 노드 및 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo
권한이 있습니다. -
/etc/ipsec.d/
디렉터리의 NSS(Network Security Services) 암호화 라이브러리에는 필요한 인증서가 포함되어 있습니다.
절차
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/playbook.yml
)을 생성합니다.- name: Mesh VPN hosts: managed-node-01.example.com, managed-node-02.example.com, managed-node-03.example.com roles: - rhel-system-roles.vpn vars: vpn_connections: - opportunistic: true auth_method: cert policies: - policy: private cidr: default - policy: private-or-clear cidr: 198.51.100.0/24 - policy: private cidr: 192.0.2.0/24 - policy: clear cidr: 192.0.2.7/32 vpn_manage_firewall: true vpn_manage_selinux: true
인증서를 사용한 인증은 플레이북에
auth_method: cert
매개변수를 정의하여 구성됩니다. 기본적으로 노드 이름은 인증서 닉네임으로 사용됩니다. 이 예에서는managed-node-01.example.com
입니다. 인벤토리에서cert_name
속성을 사용하여 다른 인증서 이름을 정의할 수 있습니다.이 예제 절차에서는 Ansible 플레이북을 실행하는 시스템인 제어 노드에서 관리 노드(192.0.2.0/24)와 동일한 classless inter-domain routing (CIDR) 번호를 공유하며 IP 주소 192.0.2.7을 갖습니다. 따라서 제어 노드는 CIDR 192.0.2.0/24에 대해 자동으로 생성되는 개인 정책에 속합니다.
플레이 중에 SSH 연결 손실을 방지하기 위해 제어 노드에 대한 명확한 정책이 정책 목록에 포함됩니다. CIDR이 기본값과 같은 정책 목록에도 항목이 있습니다. 이 플레이북은 기본 정책의 규칙을 재정의하여 private-or-clear 대신 비공개로 만들기 때문입니다.
vpn_manage_firewall
및vpn_manage_selinux
둘 다true
로 설정되므로vpn
역할은firewall
및selinux
역할을 사용하여vpn
역할에서 사용하는 포트를 관리합니다.플레이북 구문을 확인합니다.
$ ansible-playbook --syntax-check ~/playbook.yml
이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
Playbook을 실행합니다.
$ ansible-playbook ~/playbook.yml
추가 리소스
-
/usr/share/ansible/roles/rhel-system-roles.vpn/README.md
파일 -
/usr/share/doc/rhel-system-roles/vpn/
directory