6.13. nmstatectl을 사용하여 IPsec VPN 연결 구성


VPN(Virtual Private Network)을 사용하여 인터넷과 같이 신뢰할 수 없는 네트워크를 통해 안전하고 암호화된 터널을 설정할 수 있습니다. 이러한 터널은 전송 중 데이터의 기밀성과 무결성을 보장합니다. 일반적인 사용 사례에는 지사 사무실을 본사에 연결하는 것이 포함됩니다.

nmstatectl 유틸리티를 사용하여 Nmstate API를 통해 Libreswan IPsec VPN 연결을 구성할 수 있습니다. nmstatectl 유틸리티는 선언적 Nmstate API를 통해 호스트 네트워킹을 관리하는 명령줄 도구입니다. 인터페이스를 구성하기 위해 여러 필수 명령을 실행하는 대신 YAML 파일에서 예상되는 상태를 정의합니다. NMState는 이 정의를 가져와서 시스템에 적용합니다. 이 방법의 주요 장점은 원자성 결과입니다. NMState를 사용하면 결과 구성이 YAML 정의와 정확히 일치하는지 확인합니다. 구성의 일부가 적용되지 않으면 모든 변경 사항을 자동으로 롤백하고 시스템이 잘못되거나 손상된 네트워크 상태가 되지 않도록 합니다.

참고

NetworkManager-libreswan 플러그인의 설계로 인해 nmstatectl 을 하나의 피어에서만 사용할 수 있으며 다른 피어에 Libreswan을 수동으로 구성해야 합니다.

호스트 간 VPN은 두 장치 간에 직접, 보안 및 암호화된 연결을 설정하여 애플리케이션과 인터넷과 같은 비보안 네트워크를 통해 안전하게 통신할 수 있습니다.

인증을 위해 RSA 키는 대칭 암호화가 공유 보안의 위험을 제거하기 때문에 PSK(사전 공유 키)보다 안전합니다. RSA 키를 사용하면 강력한 피어 투 피어 인증을 제공하면서 CA(인증 기관)의 필요성을 방지하여 배포가 간소화됩니다.

Nmstate API를 사용하여 기존 Libreswan IPsec 호스트와의 연결을 구성할 수 있습니다. 이 경우 Nmstate는 결과 구성이 YAML 파일의 정의와 일치하는지 확인하거나 잘못된 시스템 상태를 방지하기 위해 변경 사항을 자동으로 롤백합니다. Nmstate는 상태만 검증하고 잘못된 구성이지만 유효한 구성으로부터 보호하지 않습니다.

참고

일반적으로 왼쪽오른쪽 이라는 이름의 호스트는 임의의 값입니다. 그러나 NetworkManager는 항상 로컬 호스트에 왼쪽 이라는 용어를 사용하고 원격 호스트에는 right 을 사용합니다.

사전 요구 사항

  • 원격 피어는 Libreswan IPsec을 실행하고 호스트 간 연결을 위해 준비되었습니다.

    NetworkManager-libreswan 플러그인의 설계로 인해 Nmstate는 동일한 연결에 이 플러그인을 사용하는 다른 피어와 통신할 수 없습니다.

프로세스

  1. Libreswan이 아직 설치되지 않은 경우 다음 단계를 수행합니다.

    1. 필수 패키지를 설치합니다.

      # dnf install nmstate libreswan NetworkManager-libreswan
      Copy to Clipboard Toggle word wrap
    2. NetworkManager 서비스를 다시 시작하십시오.

      # systemctl restart NetworkManager
      Copy to Clipboard Toggle word wrap
    3. NSS(Network Security Services) 데이터베이스를 초기화합니다.

      # ipsec initnss
      Copy to Clipboard Toggle word wrap

      이 명령은 /var/lib/ipsec/nss/ 디렉터리에 데이터베이스를 생성합니다.

    4. 방화벽에서 IPsec 포트 및 프로토콜을 엽니다.

      # firewall-cmd --permanent --add-service="ipsec"
      # firewall-cmd --reload
      Copy to Clipboard Toggle word wrap
  2. RSA 키 쌍을 생성합니다.

    # ipsec newhostkey
    Copy to Clipboard Toggle word wrap

    ipsec 유틸리티는 키 쌍을 NSS 데이터베이스에 저장합니다.

  3. 왼쪽 및 오른쪽 피어 모두에서 인증서 키 속성 ID(CKAID)를 표시합니다.

    # ipsec showhostkey --list
    < 1> RSA keyid: <key_id> ckaid: <ckaid>
    Copy to Clipboard Toggle word wrap

    다음 단계에서 두 피어의 CKAID가 필요합니다.

  4. 공개 키를 표시합니다.

    1. 왼쪽 피어에서 다음을 입력합니다.

      # ipsec showhostkey --left --ckaid <ckaid_of_left_peer>
              # rsakey AwEAAdKCx
              leftrsasigkey=0sAwEAAdKCxpc9db48cehzQiQD...
      Copy to Clipboard Toggle word wrap
    2. 오른쪽 피어에서 다음을 입력합니다.

      # ipsec showhostkey --right --ckaid <ckaid_of_right_peer>
              # rsakey AwEAAcNWC
              rightrsasigkey=0sAwEAAcNWCzZO+PR1j8WbO8X...
      Copy to Clipboard Toggle word wrap

    명령은 구성 파일에서 사용해야 하는 해당 매개 변수가 있는 공개 키를 표시합니다.

  5. 다음 콘텐츠를 사용하여 YAML 파일(예: ~/ipsec-host-to-host-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
    
        right: <ip_address_or_fqdn_of_right_peer>
        rightid: peer_a
        rightrsasigkey: <public_key_of_right_peer>
        rightsubnet: <ip_address_of_right_peer>/32
    Copy to Clipboard Toggle word wrap

    예제에 지정된 설정은 다음과 같습니다.

    ikev2: insist
    IKEv2 프로토콜을 IKEv1에 대체하지 않고 허용된 유일한 프로토콜로 정의합니다. 이 설정은 Nmstate를 사용하여 호스트 간 구성에서 필수입니다.
    left= <ip_address_or_fqdn_of_left_peer > 및 right= <ip_address_or_fqdn_of_right_peer>
    피어의 IP 주소 또는 DNS 이름을 정의합니다.
    leftid= &lt;id>rightid= <id>
    각 피어가IKE(Internet Key Exchange) 협상 프로세스 중에 식별되는 방법을 정의합니다. IP 주소 또는 리터럴 문자열일 수 있습니다. NetworkManager는 IP 주소가 아닌 모든 값을 리터럴 문자열로 해석하고 내부적으로 선행 @ 기호를 추가합니다. 이를 위해서는 Libreswan 피어도 ID 또는 인증에 실패로 리터럴 문자열을 사용해야 합니다.
    leftrsasigkey= <public_key > 및 rightrsasigkey= <public_key>
    피어의 공개 키를 지정합니다. 이전 단계에서 ipsec showhostkey 명령으로 표시되는 값을 사용합니다.
    leftmodecfgclient: false
    이 호스트에서 동적 구성을 비활성화합니다. 이 설정은 Nmstate를 사용하여 호스트 간 구성에서 필수입니다.
    rightsubnet: <ip_address_of_right_peer>/32
    호스트가 이 피어에만 액세스할 수 있도록 정의합니다. 이 설정은 Nmstate를 사용하여 호스트 간 구성에서 필수입니다.
  6. 시스템에 설정을 적용합니다.

    # nmstatectl apply ~/ipsec-host-to-host-rsa-auth.yml
    Copy to Clipboard Toggle word wrap

검증

  • IPsec 상태를 표시합니다.

    # ipsec status
    Copy to Clipboard Toggle word wrap

    연결이 성공적으로 설정된 경우 출력에는 다음과 같은 행이 포함됩니다.

    • 인터넷 키 교환 버전 2(IKEv2) 협상의 1단계가 성공적으로 완료되었습니다.

      000 #1: "<connection_name>":500 STATE_V2_ESTABLISHED_IKE_SA (established IKE SA); REKEY in 27935s; REPLACE in 28610s; newest; idle;
      Copy to Clipboard Toggle word wrap

      보안 연계(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;
      Copy to Clipboard Toggle word wrap

      데이터 트래픽이 통과하는 실제 터널입니다.

문제 해결

  • NetworkManager가 Libreswan에 전달하는 실제 구성을 표시하려면 다음을 입력합니다.

    # nmcli connection export <connection_name>
    Copy to Clipboard Toggle word wrap

    출력은 원격 호스트의 Libreswan 구성과 비교할 때 ID 및 키와 같은 편차하는 설정을 식별하는 데 도움이 될 수 있습니다.

다음 단계

사이트 간 VPN은 두 개의 개별 네트워크 간에 안전하고 암호화된 터널을 설정하여 인터넷과 같은 안전하지 않은 공용 네트워크에서 원활하게 연결합니다. 예를 들어 분기 사무실의 장치는 마치 모두 동일한 로컬 네트워크의 일부인 것처럼 회사 본사의 리소스에 액세스할 수 있습니다.

게이트웨이 장치를 인증하기 위해 대칭 암호화가 공유 보안의 위험을 제거하기 때문에 RSA 키는 PSK(사전 공유 키)보다 안전합니다. RSA 키를 사용하면 강력한 피어 투 피어 인증을 제공하면서 CA(인증 기관)의 필요성을 방지하여 배포가 간소화됩니다.

Nmstate API를 사용하여 기존 Libreswan IPsec 게이트웨이와의 연결을 구성할 수 있습니다. 이 경우 Nmstate는 결과 구성이 YAML 파일의 정의와 일치하는지 확인하거나 잘못된 시스템 상태를 방지하기 위해 변경 사항을 자동으로 롤백합니다. Nmstate는 상태만 검증하고 잘못된 구성이지만 유효한 구성으로부터 보호하지 않습니다.

참고

일반적으로 왼쪽오른쪽 이라는 이름의 호스트는 임의의 값입니다. 그러나 NetworkManager는 항상 로컬 호스트에 왼쪽 이라는 용어를 사용하고 원격 호스트에는 right 을 사용합니다.

사전 요구 사항

  • 원격 게이트웨이는 Libreswan IPsec을 실행하고 사이트 간 연결을 위해 준비되었습니다.

    NetworkManager-libreswan 플러그인의 설계로 인해 Nmstate는 동일한 연결에 이 플러그인을 사용하는 다른 피어와 통신할 수 없습니다.

프로세스

  1. Libreswan이 아직 설치되지 않은 경우 다음 단계를 수행합니다.

    1. 필수 패키지를 설치합니다.

      # dnf install nmstate libreswan NetworkManager-libreswan
      Copy to Clipboard Toggle word wrap
    2. NetworkManager 서비스를 다시 시작하십시오.

      # systemctl restart NetworkManager
      Copy to Clipboard Toggle word wrap
    3. NSS(Network Security Services) 데이터베이스를 초기화합니다.

      # ipsec initnss
      Copy to Clipboard Toggle word wrap

      이 명령은 /var/lib/ipsec/nss/ 디렉터리에 데이터베이스를 생성합니다.

    4. 방화벽에서 IPsec 포트 및 프로토콜을 엽니다.

      # firewall-cmd --permanent --add-service="ipsec"
      # firewall-cmd --reload
      Copy to Clipboard Toggle word wrap
  2. RSA 키 쌍을 생성합니다.

    # ipsec newhostkey
    Copy to Clipboard Toggle word wrap

    ipsec 유틸리티는 키 쌍을 NSS 데이터베이스에 저장합니다.

  3. 왼쪽 및 오른쪽 피어 모두에서 인증서 키 속성 ID(CKAID)를 표시합니다.

    # ipsec showhostkey --list
    < 1> RSA keyid: <key_id> ckaid: <ckaid>
    Copy to Clipboard Toggle word wrap

    다음 단계에서 두 피어의 CKAID가 필요합니다.

  4. 공개 키를 표시합니다.

    1. 왼쪽 피어에서 다음을 입력합니다.

      # ipsec showhostkey --left --ckaid <ckaid_of_left_peer>
              # rsakey AwEAAdKCx
              leftrsasigkey=0sAwEAAdKCxpc9db48cehzQiQD...
      Copy to Clipboard Toggle word wrap
    2. 오른쪽 피어에서 다음을 입력합니다.

      # ipsec showhostkey --right --ckaid <ckaid_of_right_peer>
              # rsakey AwEAAcNWC
              rightrsasigkey=0sAwEAAcNWCzZO+PR1j8WbO8X...
      Copy to Clipboard Toggle word wrap

    명령은 구성 파일에서 사용해야 하는 해당 매개 변수가 있는 공개 키를 표시합니다.

  5. 다음 콘텐츠를 사용하여 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
    Copy to Clipboard Toggle word wrap

    예제에 지정된 설정은 다음과 같습니다.

    ikev2: insist
    IKEv2 프로토콜을 IKEv1에 대체하지 않고 허용된 유일한 프로토콜로 정의합니다. 이 설정은 Nmstate를 사용하여 사이트 간 구성에서 필수입니다.
    left= <ip_address_or_fqdn_of_left_peer > 및 right= <ip_address_or_fqdn_of_right_peer>
    피어의 IP 주소 또는 DNS 이름을 정의합니다.
    leftid= &lt;id>rightid= <id>
    각 피어가IKE(Internet Key Exchange) 협상 프로세스 중에 식별되는 방법을 정의합니다. IP 주소 또는 리터럴 문자열일 수 있습니다. NetworkManager는 IP 주소가 아닌 모든 값을 리터럴 문자열로 해석하고 내부적으로 선행 @ 기호를 추가합니다. 이를 위해서는 Libreswan 피어도 ID 또는 인증에 실패로 리터럴 문자열을 사용해야 합니다.
    leftrsasigkey= <public_key > 및 rightrsasigkey= <public_key>
    피어의 공개 키를 지정합니다. 이전 단계에서 ipsec showhostkey 명령으로 표시되는 값을 사용합니다.
    leftmodecfgclient: false
    이 호스트에서 동적 구성을 비활성화합니다. 이 설정은 Nmstate를 사용하여 사이트 간 구성에서 필수입니다.
    leftsubnet= &lt;subnet>rightsubnet= <subnet>
    터널을 통해 연결된 CIDR(Classless inter-domain routing) 형식으로 서브넷을 정의합니다.
  6. 패킷 전달을 활성화합니다.

    # echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf
    # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
    Copy to Clipboard Toggle word wrap
  7. 시스템에 설정을 적용합니다.

    # nmstatectl apply ~/ipsec-site-to-site-rsa-auth.yml
    Copy to Clipboard Toggle word wrap

검증

  1. IPsec 상태를 표시합니다.

    # ipsec status
    Copy to Clipboard Toggle word wrap

    연결이 성공적으로 설정된 경우 출력에는 다음과 같은 행이 포함됩니다.

    • 인터넷 키 교환 버전 2(IKEv2) 협상의 1단계가 성공적으로 완료되었습니다.

      000 #1: "<connection_name>":500 STATE_V2_ESTABLISHED_IKE_SA (established IKE SA); REKEY in 27935s; REPLACE in 28610s; newest; idle;
      Copy to Clipboard Toggle word wrap

      보안 연계(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;
      Copy to Clipboard Toggle word wrap

      데이터 트래픽이 통과하는 실제 터널입니다.

  2. 로컬 서브넷의 클라이언트에서 원격 서브넷의 클라이언트를 ping합니다.

문제 해결

  • NetworkManager가 Libreswan에 전달하는 실제 구성을 표시하려면 다음을 입력합니다.

    # nmcli connection export <connection_name>
    Copy to Clipboard Toggle word wrap

    출력은 원격 호스트의 Libreswan 구성과 비교할 때 ID 및 키와 같은 편차하는 설정을 식별하는 데 도움이 될 수 있습니다.

다음 단계

원격 사설 네트워크의 리소스에 액세스하려면 먼저 IPsec VPN 연결을 구성해야 합니다. Nmstate API를 사용하여 기존 Libreswan IPsec 게이트웨이와의 연결을 구성할 수 있습니다. 이 경우 Nmstate는 결과 구성이 YAML 파일의 정의와 일치하는지 확인하거나 잘못된 시스템 상태를 방지하기 위해 변경 사항을 자동으로 롤백합니다. Nmstate는 상태만 검증하고 잘못된 구성이지만 유효한 구성으로부터 보호하지 않습니다.

참고

일반적으로 왼쪽오른쪽 이라는 이름의 호스트는 임의의 값입니다. 그러나 NetworkManager는 항상 로컬 호스트에 왼쪽 이라는 용어를 사용하고 원격 호스트에는 right 을 사용합니다.

사전 요구 사항

  • 원격 게이트웨이는 Libreswan IPsec을 실행하며 인증서 기반 인증을 사용한 호스트 간 연결을 위해 준비되었습니다.

    NetworkManager-libreswan 플러그인의 설계로 인해 Nmstate는 동일한 연결에 이 플러그인을 사용하는 다른 피어와 통신할 수 없습니다.

  • PKCS#12 파일 ~/file.p12 는 다음 콘텐츠가 있는 클라이언트에 있습니다.

    • 사용자의 개인 키
    • 사용자 인증서
    • CA 인증서
    • 필요한 경우 중간 인증서

    개인 키 및 CSR(인증서 서명 요청) 생성 및 CA에서 인증서를 요청하는 방법에 대한 자세한 내용은 CA 설명서를 참조하십시오.

  • 인증서의 확장 키 사용량(EKU)은 TLS 웹 클라이언트 인증으로 설정됩니다.

프로세스

  1. Libreswan이 아직 설치되지 않은 경우:

    1. 필수 패키지를 설치합니다.

      # dnf install nmstate libreswan NetworkManager-libreswan
      Copy to Clipboard Toggle word wrap
    2. NetworkManager 서비스를 다시 시작하십시오.

      # systemctl restart NetworkManager
      Copy to Clipboard Toggle word wrap
    3. NSS(Network Security Services) 데이터베이스를 초기화합니다.

      # ipsec initnss
      Copy to Clipboard Toggle word wrap

      이 명령은 /var/lib/ipsec/nss/ 디렉터리에 데이터베이스를 생성합니다.

    4. 방화벽에서 IPsec 포트 및 프로토콜을 엽니다.

      # firewall-cmd --permanent --add-service="ipsec"
      # firewall-cmd --reload
      Copy to Clipboard Toggle word wrap
  2. PKCS #12 파일을 NSS 데이터베이스로 가져옵니다.

    # ipsec import ~/file.p12
    Enter password for PKCS12 file: <password>
    pk12util: PKCS12 IMPORT SUCCESSFUL
    correcting trust bits for Example-CA
    Copy to Clipboard Toggle word wrap
  3. 사용자 및 CA 인증서의 닉네임을 표시합니다.

    # certutil -L -d /var/lib/ipsec/nss/
    Certificate Nickname     Trust Attributes
                             SSL,S/MIME,JAR/XPI
    
    user                     u,u,u
    Example-CA               CT,,
    ...
    Copy to Clipboard Toggle word wrap

    Nmstate YAML 파일에 이 정보가 필요합니다.

  4. 다음 콘텐츠를 사용하여 YAML 파일(예: ~/ipsec-host-to-site-cert-auth.yml )을 생성합니다.

    ---
    interfaces:
    - name: '<connection_name>'
      type: ipsec
      libreswan:
        ikev2: insist
    
        left: <ip_address_or_fqdn_of_left_peer>
        leftid: '%fromcert'
        leftcert: <user_certificate_nickname>
    
        right: <ip_address_or_fqdn_of_right_peer>
        rightid: '%fromcert'
        rightsubnet: 192.0.2.0/24
    Copy to Clipboard Toggle word wrap

    예제에 지정된 설정은 다음과 같습니다.

    ikev2: insist
    IKEv2 프로토콜을 IKEv1에 대체하지 않고 허용된 유일한 프로토콜로 정의합니다. 이 설정은 Nmstate를 사용하여 호스트 간 구성에서 필수입니다.
    left= <ip_address_or_fqdn_of_left_peer > 및 right= <ip_address_or_fqdn_of_right_peer>
    피어의 IP 주소 또는 DNS 이름을 정의합니다.
    leftid=%fromcertrightid=%fromcert
    인증서의 고유 이름(DN) 필드에서 ID를 검색하도록 Libreswan을 구성합니다.
    leftcert="<server_certificate_nickname>"
    NSS 데이터베이스에 사용된 서버 인증서의 닉네임을 설정합니다.
    rightsubnet: <subnet>
    게이트웨이에 연결된 CIDR(Classless inter-domain routing) 형식으로 서브넷을 정의합니다.
  5. 시스템에 설정을 적용합니다.

    # nmstatectl apply ~/ipsec-host-to-site-cert-auth.yml
    Copy to Clipboard Toggle word wrap

검증

  • 원격 네트워크에서 호스트에 대한 연결을 설정하거나 ping합니다.

문제 해결

  • NetworkManager가 Libreswan에 전달하는 실제 구성을 표시하려면 다음을 입력합니다.

    # nmcli connection export <connection_name>
    Copy to Clipboard Toggle word wrap

    출력은 원격 호스트의 Libreswan 구성과 비교할 때 ID 및 키와 같은 편차하는 설정을 식별하는 데 도움이 될 수 있습니다.

다음 단계

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat