6.13.2. nmstatectl을 사용하여 원시 RSA 키 인증을 사용하여 IPsec 사이트 간 VPN 구성
선언적 Nmstate API를 사용하여 두 개의 별도의 네트워크 간에 사이트 간 VPN을 구성하여 비보안 네트워크에서 연결할 수 있습니다. NMState를 사용하면 결과가 구성 파일과 일치하거나 변경 사항을 롤백합니다.
게이트웨이 장치를 인증하기 위해 대칭 암호화가 공유 보안의 위험을 제거하기 때문에 RSA 키는 PSK(사전 공유 키)보다 안전합니다. RSA 키를 사용하면 CA(인증 기관)의 필요성을 방지하여 배포를 단순화하고 강력한 피어 투 피어 인증을 제공합니다.
일반적으로 왼쪽 과 오른쪽 이라는 이름의 호스트는 임의의 값입니다. 그러나 NetworkManager는 항상 로컬 호스트에 왼쪽 이라는 용어를 사용하고 원격 호스트에는 right 을 사용합니다.
사전 요구 사항
원격 게이트웨이는 Libreswan IPsec을 실행하고 사이트 간 연결을 위해 준비되었습니다.
NetworkManager-libreswan플러그인의 설계로 인해 Nmstate는 동일한 연결에 이 플러그인을 사용하는 다른 피어와 통신할 수 없습니다.
프로세스
Libreswan이 아직 설치되지 않은 경우 다음 단계를 수행합니다.
필수 패키지를 설치합니다.
# dnf install nmstate libreswan NetworkManager-libreswanNetworkManager 서비스를 다시 시작하십시오.
# systemctl restart NetworkManagerNSS(Network Security Services) 데이터베이스를 초기화합니다.
# ipsec initnss이 명령은
/var/lib/ipsec/nss/디렉터리에 데이터베이스를 생성합니다.방화벽에서 IPsec 포트 및 프로토콜을 엽니다.
# firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
RSA 키 쌍을 생성합니다.
# ipsec newhostkeyipsec유틸리티는 키 쌍을 NSS 데이터베이스에 저장합니다.왼쪽 및 오른쪽 피어 모두에서 인증서 키 속성 ID(CKAID)를 표시합니다.
# ipsec showhostkey --list < 1> RSA keyid: <key_id> ckaid: <ckaid>다음 단계에서 두 피어의 CKAID가 필요합니다.
공개 키를 표시합니다.
왼쪽 피어에서 다음을 입력합니다.
# ipsec showhostkey --left --ckaid <ckaid_of_left_peer> # rsakey AwEAAdKCx leftrsasigkey=0sAwEAAdKCxpc9db48cehzQiQD...오른쪽 피어에서 다음을 입력합니다.
# ipsec showhostkey --right --ckaid <ckaid_of_right_peer> # rsakey AwEAAcNWC rightrsasigkey=0sAwEAAcNWCzZO+PR1j8WbO8X...
명령은 구성 파일에서 사용해야 하는 해당 매개 변수가 있는 공개 키를 표시합니다.
다음 콘텐츠를 사용하여 YAML 파일(예:
~/ipsec-site-to-site-rsa-auth.yml)을 생성합니다.--- interfaces: - name: '<connection_name>' type: ipsec libreswan: ikev2: insist left: <ip_address_or_fqdn_of_left_peer> leftid: peer_b leftrsasigkey: <public_key_of_left_peer> leftmodecfgclient: false leftsubnet: 198.51.100.0/24 right: <ip_address_or_fqdn_of_right_peer> rightid: peer_a rightrsasigkey: <public_key_of_right_peer> rightsubnet: 192.0.2.0/24예제에 지정된 설정은 다음과 같습니다.
ikev2: insist- IKEv2 프로토콜을 IKEv1에 대체하지 않고 허용된 유일한 프로토콜로 정의합니다. 이 설정은 Nmstate를 사용하여 사이트 간 구성에서 필수입니다.
left= <ip_address_or_fqdn_of_left_peer> 및right= <ip_address_or_fqdn_of_right_peer>- 피어의 IP 주소 또는 DNS 이름을 정의합니다.
leftid= <id>및rightid= <id>-
각 피어가IKE(Internet Key Exchange) 협상 프로세스 중에 식별되는 방법을 정의합니다. IP 주소 또는 리터럴 문자열일 수 있습니다. NetworkManager는 IP 주소가 아닌 모든 값을 리터럴 문자열로 해석하고 내부적으로 선행
@기호를 추가합니다. 이를 위해서는 Libreswan 피어도 ID 또는 인증에 실패로 리터럴 문자열을 사용해야 합니다. leftrsasigkey= <public_key> 및rightrsasigkey= <public_key>-
피어의 공개 키를 지정합니다. 이전 단계에서
ipsec showhostkey명령으로 표시되는 값을 사용합니다. leftmodecfgclient: false- 이 호스트에서 동적 구성을 비활성화합니다. 이 설정은 Nmstate를 사용하여 사이트 간 구성에서 필수입니다.
leftsubnet= <subnet>및rightsubnet= <subnet>- 터널을 통해 연결된 CIDR(Classless inter-domain routing) 형식으로 서브넷을 정의합니다.
패킷 전달을 활성화합니다.
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf시스템에 설정을 적용합니다.
# nmstatectl apply ~/ipsec-site-to-site-rsa-auth.yml
검증
IPsec 상태를 표시합니다.
# ipsec status연결이 성공적으로 설정된 경우 출력에는 다음과 같은 행이 포함됩니다.
인터넷 키 교환 버전 2(IKEv2) 협상의 1단계가 성공적으로 완료되었습니다.
000 #1: "<connection_name>":500 STATE_V2_ESTABLISHED_IKE_SA (established IKE SA); REKEY in 27935s; REPLACE in 28610s; newest; idle;보안 연계(SA)는 이제 자식 SA 또는 2단계 SA로 알려진 실제 데이터 암호화 터널을 협상할 준비가 되었습니다.
하위 SA가 설정되었습니다.
000 #2: "<connection_name>":500 STATE_V2_ESTABLISHED_CHILD_SA (established Child SA); REKEY in 27671s; REPLACE in 28610s; IKE SA #1; idle;데이터 트래픽이 통과하는 실제 터널입니다.
- 로컬 서브넷의 클라이언트에서 원격 서브넷의 클라이언트를 ping합니다.
문제 해결
NetworkManager가 Libreswan에 전달하는 실제 구성을 표시하려면 다음을 입력합니다.
# nmcli connection export <connection_name>출력은 원격 호스트의 Libreswan 구성과 비교할 때 ID 및 키와 같은 편차하는 설정을 식별하는 데 도움이 될 수 있습니다.
다음 단계
- DHCP 또는 SLAAC(상태 비저장 주소 자동 구성)가 있는 네트워크에서 이 호스트를 사용하는 경우 연결이 리디렉션될 수 있습니다. 자세한 내용 및 완화 단계는 연결이 터널을 우회하지 못하도록 전용 라우팅 테이블에 VPN 연결 할당을 참조하십시오.