5.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 데이터베이스가 초기화됩니다.
이전 NSS 데이터베이스가 이미 있는 경우 이전 데이터베이스 파일을 제거하십시오.
# systemctl stop ipsec # rm /var/lib/ipsec/nss/*db
다음 명령을 사용하여 새 데이터베이스를 초기화할 수 있습니다.
# ipsec initnss
절차
각 노드에서 PKCS #12 파일을 가져옵니다. 이 단계에서는 PKCS #12 파일을 생성하는 데 사용되는 암호가 필요합니다.
# ipsec import nodeXXX.p12
필요한 IPsec
(private)에 대해 다음 세 가지 연결 정의 (private-or-clear) 및No
(clear) 프로파일에 대해 다음 세 가지 연결 정의를 만듭니다.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
leftid
및rightid
변수는 IPsec 터널 연결의 오른쪽과 왼쪽 채널을 식별합니다. 이러한 변수를 사용하여 구성된 경우 로컬 IP 주소의 값 또는 로컬 인증서의 제목 DN을 가져올 수 있습니다.- 3
leftcert
변수는 사용하려는 NSS 데이터베이스의 닉네임을 정의합니다.네트워크의 IP 주소를 해당 카테고리에 추가합니다. 예를 들어 모든 노드가
10.15.0.0/16
네트워크에 있고 모든 노드가 IPsec 암호화를 사용해야 하는 경우 다음을 수행합니다.# echo "10.15.0.0/16" >> /etc/ipsec.d/policies/private
특정 노드(예:
10.15.34.0/24
)가 IPsec과 함께 작동하도록 허용하려면 해당 노드를 private-or-clear 그룹에 추가합니다.# echo "10.15.34.0/24" >> /etc/ipsec.d/policies/private-or-clear
IPsec을 clear 그룹으로 할 수 없는 호스트(예:
10.15.1.2
)를 정의하려면 다음을 사용합니다.# echo "10.15.1.2/32" >> /etc/ipsec.d/policies/clear
각 새 노드의 템플릿에서
/etc/ipsec.d/policies
디렉터리에 파일을 생성하거나 Puppet 또는 Ansible을 사용하여 파일을 프로비저닝할 수 있습니다.모든 노드에는 예외 또는 트래픽 흐름 예상과 동일한 목록이 있습니다. 따라서 두 개의 노드는 IPsec이 필요하고 다른 하나는 IPsec을 사용할 수 없기 때문에 통신할 수 없습니다.
노드를 재시작하여 구성된 메시에 추가합니다.
# systemctl restart ipsec
검증
ping
명령을 사용하여 IPsec 터널을 엽니다.# ping <nodeYYY>
가져온 인증서를 사용하여 NSS 데이터베이스를 표시합니다.
# certutil -L -d sql:/etc/ipsec.d Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI west u,u,u ca CT,,
노드에서 열려 있는 터널을 확인합니다.
# 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'
추가 리소스
-
시스템의 IPsec.conf(5)
도움말 페이지 -
authby
변수에 대한 자세한 내용은 6.2를 참조하십시오. Libreswan의 인증 방법.