본문 바로가기

Networking

[실습] AWS Native Client VPN 구성하기 (OpenVPN)

반응형

안녕하세요 서후아빠입니다. ^_^

이번 세션은 OpenVPN을 이용하여 AWS Native Client VPN 구성하는 실습을 해보겠습니다.

개인적으로는 AWS Native Client VPN 구성보다 Market Place에서 EC2 Type으로 제공되는 3rd Party 제품이 구축, 유지보수 측면에서 더 효율적이라고 생각됩니다.

 3rd Party 제품을 통한 구성은 아래 링크를 참조 바랍니다.

2022.09.20 - [Networking] - [실습] AWS Client VPN 구성하기 (OpenVPN, 구글OTP 2차 인증)-2편

 

[실습] AWS Client VPN 구성하기 (OpenVPN, 구글OTP 2차 인증)-2편

안녕하세요 서후아빠입니다. ^_^ 이번 세션은 3rd-Party OpenVPN을 이용하여 Client VPN 구성하되 ID/PW + 2FA(구글 OTP) 인증하는 실습을 해보겠습니다. AWS에서 제공되는 Client VPN으로 2FA 사용하기 위해서는 A

sh-t.tistory.com


구성도

Client VPN으로 접속(ex : priA-sn-c로 연결)을 하면 User Cleint가 priA-sn-c의 IP로 SNAT 처리됩니다. 
  ① User Client에서 OpenVPN으로 Client VPN 연결을 시도합니다. 
  ② AWS는 Client VPN 연결 요청이 오면, ACM에 등록된 인증서와 비교하여 인증처리를 합니다.
  ③ 인증이 완료되면 endpoint(clientVPN-ep)를 통해 IP를 부여받습니다. 
      - VPN 터널링이 되면 Local(User Client)는 172.168.0.0/22 대역 중 하나의 IP를 부여 받음
      - Local에 부여된 터널용 IP(172.168.0.0/22)는 터널 구간(IDC~AWS)구간에서만 사용
  ④ User Client는 부여받은 IP로 VPN 연결되며, IDC에서 AWS로 Private 통신이 가능합니다. 
  ⑤ cloudwatch 로그그룹에서는 Client VPN 연결에 대한 접속 로그를 기록합니다. 

사전 작업

인프라 생성 : vpc, subnet, igw, routing table, iam, ec2, CloudWatch의 로그 그룹  등은 설명 생략합니다. 

2022.07.02 - [Networking] - [실습] Amazon VPC 구성요소 생성하기

 

[실습] Amazon VPC 구성요소 생성하기

안녕하세요 서후아빠입니다. ^_^ 이번 세션은 VPC 관련 구성요소에 대해서 실습을 해보겠습니다. 구성도 1단계 : VPC 생성 VPC > Your VPCs > Create VPC 구분 VPC settings (VPC Only 방식) VPC settings (VPC a..

sh-t.tistory.com

1단계 : EasyRSA 설정

OpenVPN 다운로드 및 설치

설정파일 다운로드 및 C:\Program Files\OpenVPN에 압축 풀기 > C:\Program Files\OpenVPN\EasyRSA-3.0.8에 파일 생성 확인

관리자 권한으로 cmd.exe 실행

# 경로 이동
C:\Windows\System32> cd c:\Program Files\OpenVPN\EasyRSA-3.0.8
EasyRSA-Start

# 인증서 생성 (client1.domain.tld : client VPN 접속 시 계정명으로 인식)
./easyrsa init-pki
./easyrsa build-ca nopass
Common Name (eg: your user, host, or server name) [Easy-RSA CA]: 그냥 Enter
./easyrsa build-server-full server nopass
./easyrsa build-client-full client1.domain.tld nopass 
exit

파일 3개 생성 확인

  - C:\Program Files\OpenVPN\EasyRSA-3.0.8\pki\issued\server.crt

  - C:\Program Files\OpenVPN\EasyRSA-3.0.8\pki\private\server.key

  - C:\Program Files\OpenVPN\EasyRSA-3.0.8\pki\ca.crt

2단계 : AWS Certificate Manager(ACM)에서 외부 인증서 가져오기

ACM > 인증서 가져오기

구분 Certificate body certificate private key Certificate chain - optional
내용 server.crt 내용 등록 server.key 내용 등록 ca.crt 내용 등록

3단계 : AWS Client VPN Endpoint 생성

VPC > Client VPN Endpoints > Create Client VPN Endpoint

구분 Details Authentication information Connection logging Other parameters
내용 Name : clientVPN-ep
Client IPv4 CIDR : 172.168.0.0/22
Server certificate : 2단계 생성 인증서, 상호 인증 사용 
Authentication options : Use mutual authentication
Client certificate : 2단계 생성 인증서
logging : Enable
CloudWatch logs log group name : clientVPN-ep-logs
CloudWatch logs log stream name : none
Enable split-tunnel : Enable
Client IPv4 CIDR : 최소 /22 이상
Authentication information에서 Use user-based authentication :  AD 인증 or SAML 연동 인증
분할 터널(Split-tunnel)
  - VPN 통신 : VPN 클라이언트로 연결 
  - 그 외 통신 : 클라이언트 Gateway로 연결

VPC > Client VPN Endpoints > clientVPN-ep > Target network associations (tab) > Associate target network

구분 VPC Subnet remark
내용 vpcA priA-sn-c 1개의 subnet만 선택 가능
연결되는 서브넷은 최소 /27 이상만 등록 가능합니다.
User Client가 VPN 연결을 하면 여기에 등록된 Subnet에서 하나의 IP를 할당받고 그 IP를 이용하여 사내 통신합니다.

VPC > Client VPN Endpoints > clientVPN-ep > Authorization rules (tab) > Add authorization rule

구분 Destination network to enable access Grant access to remark
내용 0.0.0.0/0 Allow access to all users
(or Allow access to users in a specific access group)
-
User Clinet가 접근할 때 통제에 대한 항목입니다.
  - 0.0.0.0/0은 User Client의 모든 출발지 IP를 허용한다는 의미입니다.
  - 모든 사용자를 허용할 것이지, 특정 그룹만 허용할 것인지 지정하는 부분입니다. (기본적으로 모두 허용 선택)

VPC > Client VPN Endpoints > clientVPN-ep > State 컬럼 :  “Active” 확인 (5분 이상 소요)

VPC > Client VPN Endpoints > clientVPN-ep > Route table (tab)

구분 Route destination Subnet ID for target network association remark
내용 20.0.0.0/16 priA-sn-c 1개의 subnet만 선택 가능
현재 구성도는 vpcA(10.0.0.0/16) 대역만 존재하는데요. 만약 vpcA와 Peering된 vpcB(20.0.0.0/16)가 존재한다면 vpcB까지 통신을 해야하는데요. 이때 Route table에 경로 설정을 하게되면 VPN 연결 시 vpcB까지 Private 통신이 가능해집니다.

4단계 : 클라이언트 구성 및 VPN 연결

VPC > Client VPN Endpoints > clientVPN-ep > Dlownload client configuration 클릭하여 설정값 다운로드

다운로드한 downloaded-client-config.ovpn을 메모장 열어서 아래처럼 내용 추가

 

</ca>

<cert>

-----BEGIN CERTIFICATE-----

 

이 부분은 “C:\Program Files\OpenVPN\EasyRSA-3.0.8\pki\issued\client1.domain.tld.crt” 해시값만 입력

 

-----END CERTIFICATE-----

</cert>

 

<key>

-----BEGIN PRIVATE KEY-----

 

이 부분은 “C:\Program Files\OpenVPN\EasyRSA-3.0.8\pki\private\client1.domain.tld.key” 해시값만 입력

 

-----END PRIVATE KEY-----

</key>

 

바탕화면 OpenVPN GUI 아이콘 클릭하여 openvpn 실행
바탕화면 우측 하단 작업표시줄 > openvpn 우클릭 > Import > 파일 불러오기 > downloaded-client-config.ovpn 열기 
바탕화면 우측 하단 작업표시줄 > openvpn 우클릭 > 연결

로컬 User Client에서 priA-ec2-1 or priA-ec2-2를 사설 IP로 PING or SSH 통신 테스트 

5단계 : Client VPN 접속 로깅 확인

VPC > Client VPN endpoints > clientVPN-ep > Connectoins (tab)

CloudWatch > Log groups > clientVPN-ep-logs > cvpn-endpoint****

 

{ "connection-log-type": "connection-attempt",    "connection-attempt-status": "successful",    "connection-attempt-failure-reason": "NA",    "connection-id": "cvpn-connection-010863c21ca7766b4",    "client-vpn-endpoint-id": "cvpn-endpoint-0e3889f1deb117683",    "transport-protocol": "udp",    "connection-start-time": "2022-03-06 04:26:40",    "connection-last-update-time": "2022-03-06 04:26:40",    "client-ip": "172.168.0.34",    "common-name": "client1.domain.tld",    "device-type": "win",    "device-ip": "106.250.166.66",    "port": "55985",    "ingress-bytes": "0",    "egress-bytes": "0",    "ingress-packets": "0",    "egress-packets": "0",    "connection-end-time": "NA",    "connection-duration-seconds": "0"}

ETC

Client VPN Endpoint가 1개이지만 기본적으로 2개의 터널링(EIP 생성)으로 연결됩니다.

연결 시 ID+PW를 구성할 경우 Market Place에서 "OpenVPN Access Server"를 구독하여 서버를 구성해야합니다.

반응형