5.18. nmstatectl을 사용하여 IPsec 기반 VPN 연결 구성
IPsec (Internet Protocol Security)은 VPN 구현을 위해 Libreswan
에서 제공하는 보안 프로토콜 제품군입니다. IPsec에는 데이터 전송 중에 연결 설정 및 키를 관리하는 프로토콜이 포함됩니다. 애플리케이션이 네트워크에 배포하고 IP 프로토콜을 사용하여 통신할 때 IPsec은 데이터 통신을 보호할 수 있습니다.
VPN 연결을 인증하기 위한 IPsec 기반 구성을 관리하려면 nmstatectl
유틸리티를 사용할 수 있습니다. 이 유틸리티는 호스트 네트워크 관리를 위해 선언적 API에 대한 명령줄 액세스를 제공합니다. 다음은 host-to-subnet
및 host-to-host
통신 모드에 대한 인증 유형입니다.
- Host-to-subnet PKI 인증
- host-to-subnet RSA 인증
- Host-to-subnet PSK 인증
- 호스트 간 터널 모드 인증
- 호스트 간 전송 모드 인증
5.18.1. nmstatectl을 사용하여 PKI 인증 및 터널 모드를 사용하여 호스트 간 IPSec VPN 구성
IPsec의 신뢰할 수 있는 엔티티 인증을 기반으로 암호화를 사용하려는 경우 PKI(Public Key Infrastructure)는 두 호스트 간에 암호화 키를 사용하여 보안 통신을 제공합니다. 통신 호스트는 모두 공개 키를 신뢰할 수 있는 CA(인증 기관)와 공유하여 각 호스트가 개인 키를 유지 관리하는 개인 및 공개 키를 생성합니다. 인증 여부를 확인한 후 CA에서 디지털 인증서를 생성합니다. 암호화 및 암호 해독의 경우 호스트는 암호 해독에 암호화 및 공개 키에 개인 키를 사용합니다.
네트워크 관리를 위한 선언적 API인 Nmstate를 사용하면 PKI 인증 기반 IPsec 연결을 구성할 수 있습니다. 구성을 설정한 후 Nmstate API에서 결과가 구성 파일과 일치하는지 확인합니다. 문제가 발생하면 nmstate
가 시스템의 잘못된 상태를 방지하기 위해 변경 사항을 자동으로 롤백합니다.
host-to-subnet
구성에서 암호화된 통신을 설정하기 위해 원격 IPsec 엔드는 매개변수 dhcp: true
를 사용하여 호스트에 다른 IP를 제공합니다. nmstate에서 IPsec
에 대한 시스템을 정의하는 경우 왼쪽
-named 시스템은 로컬 호스트이고 오른쪽
이름이 원격 호스트입니다. 두 호스트 모두에서 다음 절차를 실행해야 합니다.
사전 요구 사항
- 암호를 사용하면 인증서 및 암호화 키를 저장하는 PKCS #12 파일을 생성했습니다.
절차
필수 패키지를 설치합니다.
# dnf install nmstate libreswan NetworkManager-libreswan
NetworkManager 서비스를 다시 시작하십시오.
# systemctl restart NetworkManager
Libreswan
이 이미 설치되어 있으므로 이전 데이터베이스 파일을 제거하고 다시 생성합니다.# systemctl stop ipsec # rm /etc/ipsec.d/*db # ipsec initnss
ipsec
서비스를 활성화하고 시작합니다.# systemctl enable --now ipsec
PKCS#12 파일을 가져옵니다.
# ipsec import node-example.p12
PKCS#12 파일을 가져올 때 파일을 생성하는 데 사용된 암호를 입력합니다.
다음 콘텐츠를 사용하여 YAML 파일(예:
~/create-pki-authentication.yml
)을 만듭니다.--- interfaces: - name: 'example_ipsec_conn1' 1 type: ipsec ipv4: enabled: true dhcp: true libreswan: ipsec-interface: 'yes' 2 left: '192.0.2.250' 3 leftid: '%fromcert' 4 leftcert: 'local-host.example.com' 5 right: '192.0.2.150' 6 rightid: '%fromcert' 7 ikev2: 'insist' 8 ikelifetime: '24h' 9 salifetime: '24h' 10
YAML 파일은 다음 설정을 정의합니다.
- 1
- IPsec 연결 이름
- 2
- 값
yes
는libreswan
이 IPsecxfrm
가상 인터페이스ipsec<number
>를 생성하고 다음 사용 가능한 번호를 자동으로 찾습니다 - 3
- 로컬 호스트에 대한 공용 네트워크 인터페이스의 정적 IPv4 주소
- 4
- 로컬 호스트에서
%fromcert
의 값은 로드된 인증서에서 가져온 ID를 고유 이름(DN)으로 설정합니다. - 5
- 로컬 호스트의 공개 키의 고유 이름(DN)
- 6
- 원격 호스트에 대한 공용 네트워크 인터페이스의 정적 IPv4 주소
- 7
- 원격 호스트에서
%fromcert
의 값은 로드된 인증서에서 가져온 ID를 고유 이름(DN)으로 설정합니다. - 8
insist
값은IKEv2(Internet Key Exchange) 프로토콜만 수락하고 수신합니다.- 9
- IKE 프로토콜의 기간
- 10
- IPsec 보안 연관 (SA)의 기간
시스템에 설정을 적용합니다.
# nmstatectl apply ~/create-pki-authentication.yml
검증
IPsec 상태를 확인합니다.
# ip xfrm status
IPsec 정책을 확인합니다.
# ip xfrm policy
추가 리소스
-
시스템의 IPsec.conf(5)
도움말 페이지
5.18.2. nmstatectl을 사용하여 RSA 인증 및 터널 모드를 사용하여 호스트 간 IPSec VPN 구성
IPsec에서 비대칭 암호화 기반 키 인증을 사용하려는 경우 RSA 알고리즘은 두 호스트 간의 암호화 및 암호 해독에 대해 개인 키와 공개 키를 사용하여 보안 통신을 제공합니다. 이 방법은 암호화에 개인 키를 사용하고 암호 해독에 공개 키를 사용합니다.
네트워크 관리를 위한 선언적 API인 Nmstate를 사용하면 RSA 기반 IPsec 인증을 구성할 수 있습니다. 구성을 설정한 후 Nmstate API에서 결과가 구성 파일과 일치하는지 확인합니다. 문제가 발생하면 nmstate
가 시스템의 잘못된 상태를 방지하기 위해 변경 사항을 자동으로 롤백합니다.
host-to-subnet
구성에서 암호화된 통신을 설정하기 위해 원격 IPsec 엔드는 매개변수 dhcp: true
를 사용하여 호스트에 다른 IP를 제공합니다. nmstate에서 IPsec
에 대한 시스템을 정의하는 경우 왼쪽
-named 시스템은 로컬 호스트이고 오른쪽
이름이 원격 호스트입니다. 두 호스트 모두에서 다음 절차를 실행해야 합니다.
절차
필수 패키지를 설치합니다.
# dnf install nmstate libreswan NetworkManager-libreswan
NetworkManager 서비스를 다시 시작하십시오.
# systemctl restart NetworkManager
Libreswan
이 이미 설치된 경우 이전 데이터베이스 파일을 제거하고 다시 생성합니다.# systemctl stop ipsec # rm /etc/ipsec.d/*db # ipsec initnss
각 호스트에 RSA 키 쌍을 생성합니다.
# ipsec newhostkey --output
공개 키를 표시합니다.
# ipsec showhostkey --list
이전 단계에서 생성된 키
ckaid
를 반환했습니다. 왼쪽에서 다음 명령과 함께 해당ckaid
를 사용합니다. 예를 들면 다음과 같습니다.# ipsec showhostkey --left --ckaid <0sAwEAAesFfVZqFzRA9F>
이전 명령의 출력에서 구성에 필요한
leftrsasigkey=
행을 생성했습니다. 두 번째 호스트에서 동일한 작업을 수행합니다(오른쪽).# ipsec showhostkey --right --ckaid <0sAwEAAesFfVZqFzRA9E>
ipsec
서비스를 활성화하여 부팅 시 자동으로 시작합니다.# systemctl enable --now ipsec
다음 콘텐츠를 사용하여 YAML 파일(예:
~/create-rsa-authentication.yml
)을 만듭니다.--- interfaces: - name: 'example_ipsec_conn1' 1 type: ipsec 2 ipv4: enabled: true dhcp: true libreswan: ipsec-interface: '99' 3 leftrsasigkey: '0sAwEAAesFfVZqFzRA9F' 4 left: '192.0.2.250' 5 leftid: 'local-host-rsa.example.com' 6 right: '192.0.2.150' 7 rightrsasigkey: '0sAwEAAesFfVZqFzRA9E' 8 rightid: 'remote-host-rsa.example.com' 9 ikev2: 'insist' 10
YAML 파일은 다음 설정을 정의합니다.
- 1
- IPsec 연결 이름
- 2
- 인터페이스 이름
- 3
- 값
99
는libreswan
이 IPsecxfrm
가상 인터페이스ipsec<number
>를 생성하고 사용 가능한 다음 번호를 자동으로 찾습니다 - 4
- 로컬 호스트의 RSA 공개 키
- 5
- 로컬 호스트의 공용 네트워크 인터페이스의 정적 IPv4 주소
- 6
- 로컬 호스트의 고유 이름(DN)
- 7
- 원격 호스트의 RSA 공개 키
- 8
- 원격 호스트의 공용 네트워크 인터페이스의 정적 IPv4 주소
- 9
- 원격 호스트의 고유 이름(DN)
- 10
insist
값은IKEv2(Internet Key Exchange) 프로토콜만 수락하고 수신합니다.
시스템에 설정을 적용합니다.
# nmstatectl apply ~/create-rsa-authentication.yml
검증
네트워크 인터페이스의 IP 설정을 표시합니다.
# ip addr show example_ipsec_conn1
IPsec 상태를 확인합니다.
# ip xfrm status
IPsec 정책을 확인합니다.
# ip xfrm policy
추가 리소스
-
시스템의 IPsec.conf(5)
도움말 페이지
5.18.3. nmstatectl을 사용하여 PSK 인증 및 터널 모드를 사용하여 호스트 간 IPSec VPN 구성
IPsec의 상호 인증을 기반으로 암호화를 사용하려면 PSK(Pre-Shared Key) 방법은 두 호스트 간에 시크릿 키를 사용하여 보안 통신을 제공합니다. 파일은 시크릿 키를 저장하고 동일한 키는 터널을 통과하는 데이터를 암호화합니다.
네트워크 관리를 위한 선언적 API인 Nmstate를 사용하면 PSK 기반 IPsec 인증을 구성할 수 있습니다. 구성을 설정한 후 Nmstate API에서 결과가 구성 파일과 일치하는지 확인합니다. 문제가 발생하면 nmstate
가 시스템의 잘못된 상태를 방지하기 위해 변경 사항을 자동으로 롤백합니다.
host-to-subnet
구성에서 암호화된 통신을 설정하기 위해 원격 IPsec 엔드는 매개변수 dhcp: true
를 사용하여 호스트에 다른 IP를 제공합니다. nmstate에서 IPsec
에 대한 시스템을 정의하는 경우 왼쪽
-named 시스템은 로컬 호스트이고 오른쪽
이름이 원격 호스트입니다. 두 호스트 모두에서 다음 절차를 실행해야 합니다.
이 방법은 인증 및 암호화를 위해 정적 문자열을 사용하므로 테스트/개발 목적으로만 사용합니다.
절차
필수 패키지를 설치합니다.
# dnf install nmstate libreswan NetworkManager-libreswan
NetworkManager 서비스를 다시 시작하십시오.
# systemctl restart NetworkManager
Libreswan
이 이미 설치된 경우 이전 데이터베이스 파일을 제거하고 다시 생성합니다.# systemctl stop ipsec # rm /etc/ipsec.d/*db # ipsec initnss
ipsec
서비스를 활성화하여 부팅 시 자동으로 시작합니다.# systemctl enable --now ipsec
다음 콘텐츠를 사용하여 YAML 파일(예:
~/create-pks-authentication.yml
)을 만듭니다.--- interfaces: - name: 'example_ipsec_conn1' 1 type: ipsec ipv4: enabled: true dhcp: true libreswan: ipsec-interface: 'no' 2 right: '192.0.2.250' 3 rightid: 'remote-host.example.org' 4 left: '192.0.2.150' 5 leftid: 'local-host.example.org' 6 psk: "example_password" ikev2: 'insist' 7
YAML 파일은 다음 설정을 정의합니다.
시스템에 설정을 적용합니다.
# nmstatectl apply ~/create-pks-authentication.yml
검증
네트워크 인터페이스의 IP 설정을 표시합니다.
# ip addr show example_ipsec_conn1
IPsec 상태를 확인합니다.
# ip xfrm status
IPsec 정책을 확인합니다.
# ip xfrm policy
5.18.4. nmstatectl을 사용하여 PKI 인증 및 터널 모드를 사용하여 호스트 간 IPsec VPN 구성
IPsec (Internet Protocol Security)은 네트워크 및 장치 내에서 IP 통신을 인증하고 암호화하기 위한 보안 프로토콜 제품군입니다. Libreswan
소프트웨어는 VPN에 대한 IPsec 구현을 제공합니다.
터널 모드에서는 통신의 소스 및 대상 IP 주소가 IPsec 터널에서 암호화됩니다. 외부 네트워크 스니퍼는 왼쪽 IP 및 오른쪽 IP만 가져올 수 있습니다. 일반적으로 터널 모드의 경우 host-to-host
,host-to-subnet
및 subnet -to-subnet을
지원합니다. 이 모드에서 새 IP 패킷은 페이로드 및 헤더와 함께 기존 패킷을 캡슐화합니다. 이 모드에서 캡슐화는 비보안 네트워크를 통해 IP 데이터, 소스 및 대상 헤더를 보호합니다. 이 모드는 서브넷 간 데이터, 원격 액세스 연결 및 오픈 공용 Wi-
Fi 네트워크와 같은 신뢰할 수 없는 네트워크에서 데이터를 전송하는 데 유용합니다. 기본적으로 IPsec은 터널 모드에서 두 사이트 간에 보안 채널을 설정합니다. 다음 구성을 사용하면 호스트 간
아키텍처로 VPN 연결을 설정할 수 있습니다.
네트워크 관리를 위한 선언적 API인 Nmstate를 사용하면 IPsec VPN 연결을 구성할 수 있습니다. 구성을 설정한 후 Nmstate API에서 결과가 구성 파일과 일치하는지 확인합니다. 문제가 발생하면 nmstate
가 시스템의 잘못된 상태를 방지하기 위해 변경 사항을 자동으로 롤백합니다.
host-to-host
구성에서 leftmodecfgclient: no
를 설정하여 서버에서 네트워크 구성을 수신할 수 없으므로 값이 no
입니다. nmstate에서 IPsec
에 대한 시스템을 정의하는 경우 왼쪽
-named 시스템은 로컬 호스트이고 오른쪽
이름이 원격 호스트입니다. 두 호스트 모두에서 다음 절차를 실행해야 합니다.
사전 요구 사항
- 암호를 사용하면 인증서 및 암호화 키를 저장하는 PKCS #12 파일을 생성했습니다.
절차
필수 패키지를 설치합니다.
# dnf install nmstate libreswan NetworkManager-libreswan
NetworkManager 서비스를 다시 시작하십시오.
# systemctl restart NetworkManager
Libreswan
이 이미 설치되어 있으므로 이전 데이터베이스 파일을 제거하고 다시 생성합니다.# systemctl stop ipsec # rm /etc/ipsec.d/*db # ipsec initnss
PKCS#12 파일을 가져옵니다.
# ipsec import node-example.p12
PKCS#12 파일을 가져올 때 파일을 생성하는 데 사용된 암호를 입력합니다.
ipsec
서비스를 활성화하고 시작합니다.# systemctl enable --now ipsec
다음 콘텐츠를 사용하여 YAML 파일(예:
~/create-p2p-vpn-authentication.yml
)을 만듭니다.--- interfaces: - name: 'example_ipsec_conn1' 1 type: ipsec libreswan: left: '192.0.2.250' 2 leftid: 'local-host.example.com' 3 leftcert: 'local-host.example.com' 4 leftmodecfgclient: 'no' 5 right: '192.0.2.150' 6 rightid: 'remote-host.example.com' 7 rightsubnet: '192.0.2.150/32' 8 ikev2: 'insist' 9
YAML 파일은 다음 설정을 정의합니다.
시스템에 설정을 적용합니다.
# nmstatectl apply ~/create-p2p-vpn-authentication.yml
검증
생성된 P2P 정책을 표시합니다.
# ip xfrm policy
IPsec 상태를 확인합니다.
# ip xfrm status
추가 리소스
-
시스템의 IPsec.conf(5)
도움말 페이지
5.18.5. nmstatectl을 사용하여 PSK 인증 및 전송 모드를 사용하여 호스트 간 IPsec VPN 구성
IPsec (Internet Protocol Security)은 네트워크 및 장치 내에서 IP 통신을 인증하고 암호화하기 위한 보안 프로토콜 제품군입니다. Libreswan
유틸리티는 VPN에 대한 IPsec 기반 구현을 제공합니다.
전송 모드에서 암호화는 IP 패킷의 페이로드에만 작동합니다. 또한 원래 IP 헤더를 그대로 유지하여 새 IPsec 헤더가 IP 패킷에 추가됩니다. 전송 모드는 통신의 소스 및 대상 IP를 암호화하지 않지만 외부 IP 헤더에 복사합니다. 따라서 암호화는 네트워크에서 IP 데이터만 보호합니다. 이 모드는 네트워크의 호스트 간
연결에서 데이터를 전송하는 데 유용합니다. 이 모드는 종종 20바이트(IP 헤더)의 오버헤드를 저장하기 위해 GRE 터널과 함께 사용됩니다. 기본적으로 IPsec
유틸리티는 터널 모드를 사용합니다. 전송 모드를 사용하려면 호스트 간 연결 데이터 전송을 위한
설정합니다.
type: transport
를
네트워크 관리를 위한 선언적 API인 Nmstate를 사용하면 IPsec VPN 연결을 구성할 수 있습니다. 구성을 설정한 후 Nmstate API에서 결과가 구성 파일과 일치하는지 확인합니다. 문제가 발생하면 nmstate
가 시스템의 잘못된 상태를 방지하기 위해 변경 사항을 자동으로 롤백합니다. 기본 터널
모드를 재정의하려면 전송
모드를 지정합니다.
nmstate에서 IPsec
에 대한 시스템을 정의하는 경우 왼쪽
-named 시스템은 로컬 호스트이고 오른쪽
이름이 원격 호스트입니다. 두 호스트 모두에서 다음 절차를 실행해야 합니다.
사전 요구 사항
- 암호를 사용하면 인증서 및 암호화 키를 저장하는 PKCS #12 파일을 생성했습니다.
절차
필수 패키지를 설치합니다.
# dnf install nmstate libreswan NetworkManager-libreswan
NetworkManager 서비스를 다시 시작하십시오.
# systemctl restart NetworkManager
Libreswan
이 이미 설치되어 있으므로 이전 데이터베이스 파일을 제거하고 다시 생성합니다.# systemctl stop ipsec # rm /etc/ipsec.d/*db # ipsec initnss
PKCS#12 파일을 가져옵니다.
# ipsec import node-example.p12
PKCS#12 파일을 가져올 때 파일을 생성하는 데 사용된 암호를 입력합니다.
ipsec
서비스를 활성화하고 시작합니다.# systemctl enable --now ipsec
다음 콘텐츠를 사용하여 YAML 파일(예:
~/create-p2p-transport-authentication.yml
)을 만듭니다.--- interfaces: - name: 'example_ipsec_conn1' 1 type: ipsec libreswan: type: 'transport' 2 ipsec-interface: '99' 3 left: '192.0.2.250' 4 leftid: '%fromcert' 5 leftcert: 'local-host.example.org' 6 right: '192.0.2.150' 7 prefix-length: '32' 8 rightid: '%fromcert' 9 ikev2: 'insist' 10 ikelifetime: '24h' 11 salifetime: '24h' 12
YAML 파일은 다음 설정을 정의합니다.
- 1
- IPsec 연결 이름
- 2
- IPsec 모드
- 3
- 값
99
는libreswan
이 IPsecxfrm
가상 인터페이스ipsec<number
>를 생성하고 사용 가능한 다음 번호를 자동으로 찾습니다 - 4
- 로컬 호스트에 대한 공용 네트워크 인터페이스의 정적 IPv4 주소
- 5
- 로컬 호스트에서
%fromcert
의 값은 로드된 인증서에서 가져온 ID를 고유 이름(DN)으로 설정합니다. - 6
- 로컬 호스트의 공개 키의 고유 이름(DN)
- 7
- 원격 호스트에 대한 공용 네트워크 인터페이스의 정적 IPv4 주소
- 8
- 로컬 호스트의 정적 IPv4 주소의 서브넷 마스크
- 9
- 원격 호스트에서
%fromcert
의 값은 로드된 인증서에서 가져온 ID를 고유 이름(DN)으로 설정합니다. - 10
- IKEv2(Internet Key Exchange) 프로토콜을 수락하고 받을 값
- 11
- IKE 프로토콜의 기간
- 12
- IPsec 보안 연관 (SA)의 기간
시스템에 설정을 적용합니다.
# nmstatectl apply ~/create-p2p-transport-authentication.yml
검증
IPsec 상태를 확인합니다.
# ip xfrm status
IPsec 정책을 확인합니다.
# ip xfrm policy
추가 리소스
-
시스템의 IPsec.conf(5)
도움말 페이지