7.5. nmstatectl을 사용하여 IPsec 기반 VPN 연결 구성

IPsec (Internet Protocol Security)은 VPN 구현을 위해 Libreswan 에서 제공하는 보안 프로토콜 제품군입니다. IPsec에는 데이터 전송 중에 연결 설정 및 키를 관리하는 프로토콜이 포함됩니다. 애플리케이션이 네트워크에 배포하고 IP 프로토콜을 사용하여 통신할 때 IPsec은 데이터 통신을 보호할 수 있습니다.

VPN 연결을 인증하기 위한 IPsec 기반 구성을 관리하려면 nmstatectl 유틸리티를 사용할 수 있습니다. 이 유틸리티는 호스트 네트워크 관리를 위해 선언적 API에 대한 명령줄 액세스를 제공합니다. 다음은 host-to-subnethost-to-host 통신 모드에 대한 인증 유형입니다.

  • Host-to-subnet PKI 인증
  • host-to-subnet RSA 인증
  • Host-to-subnet PSK 인증
  • 호스트 간 터널 모드 인증
  • 호스트 간 전송 모드 인증

7.5.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 파일을 생성했습니다.

절차

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

    # dnf install nmstate libreswan NetworkManager-libreswan
  2. NetworkManager 서비스를 다시 시작하십시오.

    # systemctl restart NetworkManager
  3. Libreswan 이 이미 설치되어 있으므로 이전 데이터베이스 파일을 제거하고 다시 생성합니다.

    # systemctl stop ipsec
    # rm /etc/ipsec.d/*db
    # ipsec initnss
  4. ipsec 서비스를 활성화하고 시작합니다.

    # systemctl enable --now ipsec
  5. PKCS#12 파일을 가져옵니다.

    # ipsec import node-example.p12

    PKCS#12 파일을 가져올 때 파일을 생성하는 데 사용된 암호를 입력합니다.

  6. 다음 콘텐츠를 사용하여 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
    yeslibreswan 이 IPsec xfrm 가상 인터페이스 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)의 기간
  7. 시스템에 설정을 적용합니다.

    # nmstatectl apply ~/create-pki-authentication.yml

검증

  1. IPsec 상태를 확인합니다.

    # ip xfrm status
  2. IPsec 정책을 확인합니다.

    # ip xfrm policy

추가 리소스

  • IPsec.conf(5) 도움말 페이지

7.5.2. nmstatectl을 사용하여 RSA 인증 및 터널 모드를 사용하여 호스트 간 IPSec VPN 구성

IPsec에서 비대칭 암호화 기반 키 인증을 사용하려는 경우 RSA 알고리즘은 두 호스트 간의 암호화 및 암호 해독에 대해 개인 키와 공개 키를 사용하여 보안 통신을 제공합니다. 이 방법은 암호화에 개인 키를 사용하고 암호 해독에 공개 키를 사용합니다.

네트워크 관리를 위한 선언적 API인 Nmstate를 사용하면 RSA 기반 IPsec 인증을 구성할 수 있습니다. 구성을 설정한 후 Nmstate API에서 결과가 구성 파일과 일치하는지 확인합니다. 문제가 발생하면 nmstate 가 시스템의 잘못된 상태를 방지하기 위해 변경 사항을 자동으로 롤백합니다.

host-to-subnet 구성에서 암호화된 통신을 설정하기 위해 원격 IPsec 엔드는 매개변수 dhcp: true 를 사용하여 호스트에 다른 IP를 제공합니다. nmstate에서 IPsec 에 대한 시스템을 정의하는 경우 왼쪽-named 시스템은 로컬 호스트이고 오른쪽이름이 원격 호스트입니다. 두 호스트 모두에서 다음 절차를 실행해야 합니다.

절차

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

    # dnf install nmstate libreswan NetworkManager-libreswan
  2. NetworkManager 서비스를 다시 시작하십시오.

    # systemctl restart NetworkManager
  3. Libreswan 이 이미 설치된 경우 이전 데이터베이스 파일을 제거하고 다시 생성합니다.

    # systemctl stop ipsec
    # rm /etc/ipsec.d/*db
    # ipsec initnss
  4. 각 호스트에 RSA 키 쌍을 생성합니다.

    # ipsec newhostkey --output
  5. 공개 키를 표시합니다.

    # ipsec showhostkey --list
  6. 이전 단계에서 생성된 키 ckaid 를 반환했습니다. 왼쪽에서 다음 명령과 함께 해당 ckaid 를 사용합니다. 예를 들면 다음과 같습니다.

    # ipsec showhostkey --left --ckaid <0sAwEAAesFfVZqFzRA9F>
  7. 이전 명령의 출력에서 구성에 필요한 leftrsasigkey= 행을 생성했습니다. 두 번째 호스트에서 동일한 작업을 수행합니다(오른쪽).

    # ipsec showhostkey --right --ckaid <0sAwEAAesFfVZqFzRA9E>
  8. ipsec 서비스를 활성화하여 부팅 시 자동으로 시작합니다.

    # systemctl enable --now ipsec
  9. 다음 콘텐츠를 사용하여 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
    99libreswan 이 IPsec xfrm 가상 인터페이스 ipsec<number >를 생성하고 사용 가능한 다음 번호를 자동으로 찾습니다
    4
    로컬 호스트의 RSA 공개 키
    5
    로컬 호스트의 공용 네트워크 인터페이스의 정적 IPv4 주소
    6
    로컬 호스트의 고유 이름(DN)
    7
    원격 호스트의 RSA 공개 키
    8
    원격 호스트의 공용 네트워크 인터페이스의 정적 IPv4 주소
    9
    원격 호스트의 고유 이름(DN)
    10
    insist 값은IKEv2(Internet Key Exchange) 프로토콜만 수락하고 수신합니다.
  10. 시스템에 설정을 적용합니다.

    # nmstatectl apply ~/create-rsa-authentication.yml

검증

  1. 네트워크 인터페이스의 IP 설정을 표시합니다.

    # ip addr show example_ipsec_conn1
  2. IPsec 상태를 확인합니다.

    # ip xfrm status
  3. IPsec 정책을 확인합니다.

    # ip xfrm policy

추가 리소스

  • IPsec.conf(5) 도움말 페이지

7.5.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 시스템은 로컬 호스트이고 오른쪽이름이 원격 호스트입니다. 두 호스트 모두에서 다음 절차를 실행해야 합니다.

참고

이 방법은 인증 및 암호화를 위해 정적 문자열을 사용하므로 테스트/개발 목적으로만 사용합니다.

절차

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

    # dnf install nmstate libreswan NetworkManager-libreswan
  2. NetworkManager 서비스를 다시 시작하십시오.

    # systemctl restart NetworkManager
  3. Libreswan 이 이미 설치된 경우 이전 데이터베이스 파일을 제거하고 다시 생성합니다.

    # systemctl stop ipsec
    # rm /etc/ipsec.d/*db
    # ipsec initnss
  4. ipsec 서비스를 활성화하여 부팅 시 자동으로 시작합니다.

    # systemctl enable --now ipsec
  5. 다음 콘텐츠를 사용하여 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 파일은 다음 설정을 정의합니다.

    1
    IPsec 연결 이름
    2
    값을 설정하지 않으면 libreswan 이 가상 xfrm 인터페이스가 아닌 xfrm 정책만 생성됨을 나타냅니다.
    3
    원격 호스트의 공용 네트워크 인터페이스의 정적 IPv4 주소
    4
    원격 호스트의 고유 이름(DN)
    5
    로컬 호스트의 공용 네트워크 인터페이스의 정적 IPv4 주소
    6
    로컬 호스트의 고유 이름(DN)
    7
    insist 값은IKEv2(Internet Key Exchange) 프로토콜만 수락하고 수신합니다.
  6. 시스템에 설정을 적용합니다.

    # nmstatectl apply ~/create-pks-authentication.yml

검증

  1. 네트워크 인터페이스의 IP 설정을 표시합니다.

    # ip addr show example_ipsec_conn1
  2. IPsec 상태를 확인합니다.

    # ip xfrm status
  3. IPsec 정책을 확인합니다.

    # ip xfrm policy

7.5.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 파일을 생성했습니다.

절차

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

    # dnf install nmstate libreswan NetworkManager-libreswan
  2. NetworkManager 서비스를 다시 시작하십시오.

    # systemctl restart NetworkManager
  3. Libreswan 이 이미 설치되어 있으므로 이전 데이터베이스 파일을 제거하고 다시 생성합니다.

    # systemctl stop ipsec
    # rm /etc/ipsec.d/*db
    # ipsec initnss
  4. PKCS#12 파일을 가져옵니다.

    # ipsec import node-example.p12

    PKCS#12 파일을 가져올 때 파일을 생성하는 데 사용된 암호를 입력합니다.

  5. ipsec 서비스를 활성화하고 시작합니다.

    # systemctl enable --now ipsec
  6. 다음 콘텐츠를 사용하여 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 파일은 다음 설정을 정의합니다.

    1
    IPsec 연결 이름
    2
    로컬 호스트에 대한 공용 네트워크 인터페이스의 정적 IPv4 주소
    3
    로컬 호스트의 고유 이름(DN)
    4
    로컬 호스트에 설치된 인증서 이름
    5
    원격 호스트에서 클라이언트 구성을 검색하지 않는 값
    6
    원격 호스트에 대한 공용 네트워크 인터페이스의 정적 IPv4 주소
    7
    원격 호스트의 고유 이름(DN)
    8
    32 IPv4 주소가 있는 원격 호스트 - 192.0.2.150 의 서브넷 범위
    9
    IKEv2(Internet Key Exchange) 프로토콜을 수락하고 받을 값
  7. 시스템에 설정을 적용합니다.

    # nmstatectl apply ~/create-p2p-vpn-authentication.yml

검증

  1. 생성된 P2P 정책을 표시합니다.

    # ip xfrm policy
  2. IPsec 상태를 확인합니다.

    # ip xfrm status

추가 리소스

  • IPsec.conf(5) 도움말 페이지

7.5.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 파일을 생성했습니다.

절차

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

    # dnf install nmstate libreswan NetworkManager-libreswan
  2. NetworkManager 서비스를 다시 시작하십시오.

    # systemctl restart NetworkManager
  3. Libreswan 이 이미 설치되어 있으므로 이전 데이터베이스 파일을 제거하고 다시 생성합니다.

    # systemctl stop ipsec
    # rm /etc/ipsec.d/*db
    # ipsec initnss
  4. PKCS#12 파일을 가져옵니다.

    # ipsec import node-example.p12

    PKCS#12 파일을 가져올 때 파일을 생성하는 데 사용된 암호를 입력합니다.

  5. ipsec 서비스를 활성화하고 시작합니다.

    # systemctl enable --now ipsec
  6. 다음 콘텐츠를 사용하여 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
    99libreswan 이 IPsec xfrm 가상 인터페이스 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)의 기간
  7. 시스템에 설정을 적용합니다.

    # nmstatectl apply ~/create-p2p-transport-authentication.yml

검증

  1. IPsec 상태를 확인합니다.

    # ip xfrm status
  2. IPsec 정책을 확인합니다.

    # ip xfrm policy

추가 리소스

  • IPsec.conf(5) 도움말 페이지