[AWS] Client VPN 만들기

HYEOB KIM·2022년 6월 19일
2

aws

목록 보기
45/62

개요

  • VPC에 대해 VPN을 만들고 싶다면 Client VPN을 이용합니다.

아키텍처

비용

AWS Client VPN에서는 시간당 활성 클라이언트 연결 수와 시간당 Client VPN과 연결된 서브넷 수에 대해 요금이 청구됩니다.

자세한 사항은 AWS Client VPN 비용을 참고하세요.

Client VPN 만들기

AWS 공식 문서 - Client VPN 시작하기를 참고하여 작성되었습니다.

사전 조건

  • Client VPN 엔드포인트로 작업하는 데 필요한 권한이 필요합니다.
  • 인증서를 AWS Certificate Manager로 가져오는 데 필요한 권한이 필요합니다.
  • 하나 이상의 서브넷과 인터넷 게이트웨이가 있는 VPC. 서브넷과 연결된 라우팅 테이블에는 인터넷 게이트웨이에 대한 경로가 있어야 합니다.

1단계: 서버와 클라이언트 인증서 및 키 생성

  1. OpenVPN 사이트에 들어가서 자신의 로컬과 맞는 운영체제로 프로그램을 설치합니다.

  2. easy-rsa 사이트에 들어가서 자신의 로컬과 맞는 운영체제로 압축 파일을 다운로드 받습니다.

압축을 풀고 OpenVPN 폴더 아래로 옮깁니다.(C:\Program Files\OpenVPN)

  1. PowerShell을 실행하고, easy-rsa 폴더로 이동해 easy-rsa를 실행합니다.
% cd 'C:\Program Files\OpenVPN\EasyRSA-3.1.0-win64\EasyRSA-3.1.0'
% .\EasyRSA-Start
  1. 아래의 명령어들을 입력하여 인증서 및 키를 생성합니다(서버, 클라이언트)
# 새로운 pki 환경 구성
% ./easyrsa init-pki

# CA 생성
% ./easyrsa build-ca nopass

# 서버 인증서와 키 생성
% ./easyrsa build-server-full server nopass

# 사용자별 클라이언트 인증서와 키 생성
% ./easyrsa build-client-full client1.domain.tld nopass

# 종료
% exit
  1. 이중에 필요한 파일들을 다른 경로에 보기 쉽게 복사합니다.
% mkdir 'C:\Program Files\OpenVPN\EasyRSA-3.1.0-win64\client-vpn'
% copy pki\ca.crt 'C:\Program Files\OpenVPN\EasyRSA-3.1.0-win64\client-vpn'
% copy pki\issued\server.crt 'C:\Program Files\OpenVPN\EasyRSA-3.1.0-win64\client-vpn'
% copy pki\private\server.key 'C:\Program Files\OpenVPN\EasyRSA-3.1.0-win64\client-vpn'
% copy pki\issued\client1.domain.tld.crt 'C:\Program Files\OpenVPN\EasyRSA-3.1.0-win64\client-vpn'
% copy pki\private\client1.domain.tld.key 'C:\Program Files\OpenVPN\EasyRSA-3.1.0-win64\client-vpn'

  1. AWS Certificate Manager 콘솔 > 인증서 가져오기

  2. 복사해둔 키들을 메모장으로 연 후 값들을 넣어줍니다.

인증서파일
인증서 본문server.crt
인증서 프라이빗 키server.key
인증서 체인ca.crt

  1. 서버 인증서가 성공적으로 가져와졌습니다.

  2. 마찬가지로 클라이언트 인증서도 가져옵니다.

인증서파일
인증서 본문client1.domain.tld.crt
인증서 프라이빗 키client1.domain.tld.key
인증서 체인ca.crt

2단계: 클라이언트 VPN 엔드포인트 생성

  1. VPC 콘솔 > 클라이언트 VPN 엔드포인트 > 클라이언트 VPN 엔드포인트 생성

  2. 클라이언트 IPv4 CIDR에서 클라이언트 IP 주소를 할당할 IP 주소 범위(CIDR 표기법)를 지정합니다.

참고
주소 범위는 Client VPN 엔드포인트와 연결될 대상 네트워크 주소 범위, VPC 주소 범위 또는 경로와 중복될 수 없습니다. 클라이언트 주소 범위는 최소 /22 이상이어야 하며 /12 CIDR 블록 크기를 넘지 않아야 합니다. Client VPN 엔드포인트를 생성한 후에는 클라이언트 주소 범위를 변경할 수 없습니다.

  1. 서버 인증서 ARN에서 1단계에서 생성한 서버 인증서의 ARN을 선택합니다.
    인증 방법상호 인증을 사용합니다.
    클라이언트 인증서 ARN에서 역시 1단계에서 생성한 클라이언트 인증서의 ARN을 선택합니다.

참고
서버 인증서와 클라이언트 인증서가 동일한 인증 기관(CA)에 의해 발급된 경우 서버 인증서 ARN을 서버 인증서와 클라이언트 인증서 모두에 지정할 수 있습니다.

인터넷에 액세스하고 싶다면 DNS 서버 1 IP 주소8.8.8.8을 지정합니다.

  1. 나머지 기본 설정을 그대로 두고 클라이언트 VPN 엔드포인트 생성을 선택합니다.

나머지 항목에 대한 자세한 사항은 AWS 공식 문서 - Client VPN 엔드포인트를 참고하세요.

3단계: 대상 네트워크 연결

대상 네트워크Client VPN 엔드포인트와 연결합니다.
대상 네트워크는 VPC 안의 서브넷입니다.

  1. 이전 절차에서 생성한 Client VPN 엔드포인트를 선택 > 대상 네트워크 연결, 대상 네트워크 연결

  2. 연결할 VPC서브넷을 선택합니다.

첫 번째 서브넷Client VPN 엔드포인트와 연결하면 다음과 같은 결과가 발생합니다.

  • Client VPN 엔드포인트의 상태가 available로 변경됩니다. 이제 클라이언트가 VPN 연결을 설정할 수 있지만, 권한 부여 규칙을 추가할 때까지는 VPC 내 리소스에 액세스할 수 없습니다.
  • VPC의 로컬 라우팅이 Client VPN 엔드포인트 라우팅 테이블에 자동으로 추가됩니다.
  • VPC의 기본 보안 그룹이 자동으로 Client VPN 엔드포인트에 적용됩니다.

4단계: VPC에 대한 권한 부여 규칙 추가

클라이언트가 VPC 내 리소스에 액세스할 수 있으려면 VPN에 권한 부여 규칙을 추가해주어야 합니다.

  1. 이전 절차에서 생성한 Client VPN 엔드포인트를 선택 > 권한 부여 규칙 > 권한 부여 규칙 추가
  1. 액세스를 활성화할 대상 네트워크에 액세스를 허용할 네트워크의 CIDR을 입력합니다. 예를 들어, 전체 VPC에 대한 액세스를 허용하려면 VPC의 IPv4 CIDR 블록을 지정합니다.
    모든 사용자에게 액세스 허용을 선택해서 모든 사용자가 접근할 수 있도록 합니다.

5단계: 인터넷 액세스 제공

해당 VPN에 라우팅 테이블을 통해 경로를 생성하면, AWS 서비스, 피어링된 VPC, 온프레미스 네트워크, 인터넷 등 VPC에 연결된 추가 네트워크에 대한 액세스를 제공할 수 있습니다. 아래에선 인터넷(0.0.0.0/0)에 대한 액세스를 구성해 보겠습니다.

  1. 이전 절차에서 생성한 Client VPN 엔드포인트를 선택 > 라우팅 테이블 > 경로 생성

  2. 경로 대상0.0.0.0/0을 입력합니다. 대상 네트워크 연결을 위한 서브넷 ID에서 트래픽을 라우팅할 서브넷의 ID를 입력합니다. local은 현재 클라이언트 VPN 엔드포인트에 연결된 서브넷을 나타냅니다.

  3. 권한 부여 규칙 > 권한 부여 규칙 추가를 선택합니다.

  4. 액세스를 활성화할 대상 네트워크0.0.0.0/0을 입력하고 모든 사용자에게 액세스 허용을 선택합니다.

6단계: 보안 그룹 요구 사항 확인

앞서 액세스를 허용한 네트워크들에 대한 보안 그룹 설정을 확인합니다.

  • 트래픽을 라우팅하는 서브넷과 연결된 보안 그룹(이 경우 기본 VPC 보안 그룹)이 인터넷으로의 아웃바운드 트래픽을 허용합니다. 이렇게 하려면 대상 0.0.0.0/0에 대한 모든 트래픽을 허용하는 아웃바운드 규칙을 추가합니다.

  • VPC의 리소스에 대한 보안 그룹에 Client VPN 엔드포인트에 적용되는 보안 그룹(이 경우 기본 VPC 보안 그룹)에서의 액세스를 허용하는 규칙이 있습니다. 이렇게 하면 클라이언트가 VPC의 리소스에 액세스할 수 있습니다.

7단계: Client VPN 엔드포인트 구성 파일 다운로드

  1. 이전 절차에서 생성한 Client VPN 엔드포인트를 선택 > 클라이언트 구성 다운로드

  2. 1단계에서 생성한 클라이언트 인증서 및 키를 찾습니다.

  3. 원하는 텍스트 편집기를 사용하여 Client VPN 엔드포인트 구성 파일을 엽니다. <cert></cert><key></key> 태그를 파일에 추가합니다. 클라이언트 인증서의 내용과 프라이빗 키의 내용을 다음과 같이 해당 태그 사이에 배치합니다.

<cert>
client1.domain.tld.crt의 내용 복붙
</cert>

<key>
client1.domain.tld.key의 내용 복붙
</key>

8단계: Client VPN 엔드포인트에 연결

OpenVPN 기반 클라이언트 애플리케이션과 방금 생성한 구성 파일을 사용하여 Client VPN 엔드포인트에 연결할 수 있습니다.

  1. OpenVPN에서 7단계에서 만든 구성 파일을 import합니다.

  2. VPN에 연결합니다.

  3. private IP로 VPC 내의 EC2 인스턴스에 ssh 접속해봅니다.

    VPN에 연결하지 않고 private IP로 연결하려하면 연결이 되지 않습니다.

  4. 인터넷 역시 정상적으로 접속됩니다.

    인터넷이 접속되지 않을 경우 Client VPN 엔드포인트를 생성할 때 DNS 서버를 지정하지 않아서일 수 있습니다. 엔드포인트를 이미 생성했다면 수정을 통해서 DNS 서버를 지정할 수 있습니다.

Client VPN 문제 해결

Client VPN을 운영함에 있어 다양한 문제들에 대해 AWS 공식 문서 - Client VPN 문제 해결을 참고해서 해결할 수 있습니다.

profile
Devops Engineer

0개의 댓글