Red Hat Training

A Red Hat training course is available for RHEL 8

6.7. 메시 VPN 구성

임의의 VPN이라고도 하는 메시 VPN 네트워크는 모든 노드가 IPsec을 사용하여 통신하는 네트워크입니다. 구성에서는 IPsec을 사용할 수 없는 노드에 예외를 허용합니다. 메시 VPN 네트워크는 두 가지 방법으로 구성할 수 있습니다.

  • IPsec이 필요합니다.
  • IPsec을 선호하지만 대체를 사용하여 일반 텍스트 통신을 허용합니다.

노드 간 인증은 X.509 인증서 또는 DNSSEC(DNS Security Extensions)를 기반으로 할 수 있습니다.

참고

이러한 연결은 right=%opportunisticgroup 항목에 정의된 opportunistic IPsec 을 제외하고 일반 Libreswan 구성이므로 opportunistic IPsec에 일반 IKEv2 인증 방법을 사용할 수 있습니다. 일반적인 인증 방법은 일반적으로 공유 CA(인증 기관)를 사용하여 X.509 인증서를 기반으로 호스트가 서로 인증하는 것입니다. 클라우드 배포에서는 일반적으로 표준 절차의 일부로 클라우드에 있는 각 노드의 인증서를 발급합니다.

손상된 호스트 하나로 인해 그룹 PSK도 손상될 수 있으므로 PreSharedKey(PSK) 인증을 사용하지 마십시오.

NULL 인증을 사용하여 수동 공격자로부터만 보호하는 인증 없이 노드 간에 암호화를 배포할 수 있습니다.

다음 절차에서는 X.509 인증서를 사용합니다. Dogtag Certificate System과 같은 모든 종류의 CA 관리 시스템을 사용하여 이러한 인증서를 생성할 수 있습니다. Dogtag는 각 노드의 인증서를 개인 키, 노드 인증서 및 기타 노드의 X.509 인증서의 유효성을 검사하는 데 사용되는 루트 CA 인증서가 포함된 PKCS #12 형식(.p12 파일)에서 사용할 수 있다고 가정합니다.

각 노드에는 X.509 인증서를 제외하고 동일한 구성이 있습니다. 이를 통해 네트워크의 기존 노드를 재구성하지 않고 새 노드를 추가할 수 있습니다. PKCS #12 파일에는 "간단한 이름"이 필요합니다. 이 경우 친숙한 이름을 참조하는 구성 파일이 모든 노드에서 동일하게 유지되도록 이름 "노드"를 사용합니다.

사전 요구 사항

  • Libreswan이 설치되고 ipsec 서비스가 각 노드에서 시작됩니다.
  • 새 NSS 데이터베이스가 초기화됩니다.

    1. 이전 NSS 데이터베이스가 이미 있는 경우 이전 데이터베이스 파일을 제거하십시오.

      # systemctl stop ipsec
      # rm /etc/ipsec.d/*db
    2. 다음 명령을 사용하여 새 데이터베이스를 초기화할 수 있습니다.

      # ipsec initnss

절차

  1. 각 노드에서 PKCS #12 파일을 가져옵니다. 이 단계에서는 PKCS #12 파일을 생성하는 데 사용되는 암호가 필요합니다.

    # ipsec import nodeXXX.p12
  2. IPsec 필수(사설), IPsec(공유 옵션) 및 No IPsec (공유) 프로필에 대해 다음 세 가지 연결 정의를 만듭니다.

    # cat /etc/ipsec.d/mesh.conf
    conn clear
    	auto=ondemand 1
    	type=passthrough
    	authby=never
    	left=%defaultroute
    	right=%group
    
    conn private
    	auto=ondemand
    	type=transport
    	authby=rsasig
    	failureshunt=drop
    	negotiationshunt=drop
    	ikev2=insist
    	left=%defaultroute
    	leftcert=nodeXXXX
    	leftid=%fromcert 2
    	rightid=%fromcert
    	right=%opportunisticgroup
    
    conn private-or-clear
    	auto=ondemand
    	type=transport
    	authby=rsasig
    	failureshunt=passthrough
    	negotiationshunt=passthrough
    	# left
    	left=%defaultroute
    	leftcert=nodeXXXX 3
    	leftid=%fromcert
    	leftrsasigkey=%cert
    	# right
    	rightrsasigkey=%cert
    	rightid=%fromcert
    	right=%opportunisticgroup
1
auto 변수에는 몇 가지 옵션이 있습니다.

opportunistic IPsec과 함께 온 디맨드 연결 옵션을 사용하여 IPsec 연결을 시작하거나 항상 활성화할 필요가 없는 명시적으로 구성된 연결에 사용할 수 있습니다. 이 옵션은 커널에 트랩 XFRM 정책을 설정하여 해당 정책과 일치하는 첫 번째 패킷을 수신할 때 IPsec 연결을 시작할 수 있습니다.

다음 옵션을 사용하여 Opportunistic IPsec 또는 명시적으로 구성된 연결을 사용하는지 여부에 관계없이 IPsec 연결을 효과적으로 구성하고 관리할 수 있습니다.

추가 옵션
연결 구성을 로드하고 원격 시작에 응답하기 위해 준비합니다. 그러나 연결은 로컬 측에서 자동으로 시작되지 않습니다. ipsec auto --up 명령을 사용하여 IPsec 연결을 수동으로 시작할 수 있습니다.
시작 옵션
연결 구성을 로드하고 원격 시작에 응답하기 위해 준비합니다. 또한 원격 피어에 대한 연결을 즉시 시작합니다. 영구 및 항상 활성 연결에 이 옵션을 사용할 수 있습니다.
2
leftidrightid 변수는 IPsec 터널 연결의 오른쪽 및 왼쪽 채널을 식별합니다. 이러한 변수를 사용하여 구성된 경우 로컬 IP 주소의 값 또는 로컬 인증서의 제목 DN을 가져올 수 있습니다.
3
leftcert 변수는 사용할 NSS 데이터베이스의 닉네임을 정의합니다.
  1. 네트워크의 IP 주소를 해당 카테고리에 추가합니다. 예를 들어 모든 노드가 10.15.0.0/16 네트워크에 있고 모든 노드가 IPsec 암호화를 사용해야 하는 경우 다음을 수행합니다.

    # echo "10.15.0.0/16" >> /etc/ipsec.d/policies/private
  2. 특정 노드(예: 10.15.34.0/24)가 IPsec과 함께 작동하도록 허용하려면 해당 노드를 private-or-clear 그룹에 추가합니다.

    # echo "10.15.34.0/24" >> /etc/ipsec.d/policies/private-or-clear
  3. 호스트를 정의하려면 (예: 10.15.1.2)를 명확한 그룹으로 IPsec을 사용할 수 없는 호스트를 정의하려면 다음을 사용합니다.

    # echo "10.15.1.2/32" >> /etc/ipsec.d/policies/clear

    각 새 노드의 템플릿에서 /etc/ipsec.d/policies 디렉터리에 파일을 생성하거나 Puppet 또는 Ansible을 사용하여 파일을 프로비저닝할 수 있습니다.

    모든 노드에는 예외 또는 트래픽 흐름 예상과 동일한 목록이 있습니다. 따라서 IPsec이 필요하고 다른 노드에서 IPsec을 사용할 수 없기 때문에 두 개의 노드가 통신할 수 없습니다.

  4. 노드를 재시작하여 구성된 메시에 추가합니다.

    # systemctl restart ipsec

검증

두 노드 간에 IPsec 터널을 열어 절차를 확인할 수 있습니다.

  1. ping 명령을 사용하여 IPsec 터널을 엽니다.

    # ping <nodeYYY>
  2. 가져온 인증서를 사용하여 NSS 데이터베이스를 표시합니다.

    # certutil -L -d sql:/etc/ipsec.d
    
    Certificate Nickname    Trust Attributes
                            SSL,S/MIME,JAR/XPI
    
    west                    u,u,u
    ca                      CT,,
  3. 노드가 열려 있는 터널을 확인합니다.

    # ipsec trafficstatus
    006 #2: "private#10.15.0.0/16"[1] ...nodeYYY, type=ESP, add_time=1691399301, inBytes=512, outBytes=512, maxBytes=2^63B, id='C=US, ST=NC, O=Example Organization, CN=east'

추가 리소스