본문 바로가기
공부/Cloud

[AWS] VPN client endpoint 설정하기

by kyoung-ho 2022. 5. 24.
반응형

VPN client endpoint란?

모든 클라이언트 VPN 세션은 Client VPN 엔드포인트에서 종료됩니다. Client VPN 엔드포인트를 구성하여 모든 클라이언트 VPN 세션을 관리하고 제어합니다.라고 AWS 안내서에 나와있지만 말이 어렵다. AWS에서 인스턴스 접속시 사설아이피 접속을 할 수 있게 터널링을 맺어주는 역할 이다.

 * https://docs.aws.amazon.com/ko_kr/vpn/latest/clientvpn-admin/cvpn-working-endpoints.html#cvpn-working-endpoint-create 참고.

 

그럼 어떻게 구성하느냐?

먼저 사전에 VPC 생성 및 서버 인증서(ARN)가 AWS내에 만들어져 있어야 한다.

 

VPC는 인스턴스 구성하면서 만들어 졌을태고 AWS 입문시 기본이니 생략하겠다.

 

서버인증서 발급과정

1. https://github.com/OpenVPN/easy-rsa/releases EasyRSA-3.1.0-win64.zip ( 환경에 따라 다른버전 받으면됨)

2. 다운받은 압축파일을 풀고 해당 폴더에서 현재 명령프롬프트 또는 파워셸 열기. 쉬프트 오른쪽마우스 -> cmd

3. 아래와 같이 .\EsayRSA-Start.bat 실행하면 EasyRSA 3 셸 시작됨.

.\EsayRSA-Start.bat 실행

4. 새 pki 환경 시작.

./easyrsa init-pki 실행

 

5. 새 CA(인증 기관)를 빌드

./easyrsa build-ca nopass 실행 CA이름 아무거나

 

6. 서버 인증서 및 키를 생성

./easyrsa build-server-full server nopass 실행

7. 클라이언트 인증서 및 키를 생성

./easyrsa build-client-full client1.domain.tld nopass 실행

 

8. EasyRSA 3 셸을 종료

exit 실행

위 과정을 모두 마쳤으면 압축푼 폴더 안에 pki라는 폴더가 생성 되었을 것이다.

pki 폴더 확인

 

issued,private 중요

 

Open VPN 설치 및 OpenVPN Config 설정

위 폴더는 일단 그대로 두고 아래 url을 통해 자신의 운영체제 환경에 맞게 openVPN을 설치 한다. 

https://openvpn.net/community-downloads/

설치시 꼭 custom installation으로 선택하고 OpenSSL Utilities-> Entire feature will be installed on local hard drive를 선택한다. 

 

OpenSSL을 활성화하고, 아래 설치 경로를 잘 확인한다.

설치 완료 후 설치 경로로 이동하여 easy-rsa 폴더를 확인한다.

easy-rsa 폴더 확인

easy-rsa 폴더에 위에 압축푼 EasyRSA-3.1.0폴더에 생성한 pki 폴더를 옴긴다.

 

pki 폴더 이동

 

위 과정까지 했으면 이제 인증서 준비과정은 끝났다. 다음 AWS에 인증서를 등록해주자!

 

서버 인증서(ARN)?

서버에서 사용할 TLS 인증서의 ARN을 지정합니다. 클라이언트는 서버 인증서를 사용하여 연결할 Client VPN 엔드포인트를 인증합니다.

 * https://docs.aws.amazon.com/ko_kr/vpn/latest/clientvpn-admin/cvpn-working-endpoints.html#cvpn-working-endpoint-create 참고.

 

 

 

Certificate Manager 선택.
인증서 가져오기 선택.(둘 중 아무거나)

*인증서 가져오기는 VPN을 사용할려는 리전에 꼭 두어야한다. ex) 서울 - 서울(인증서) O /서울 - 캘리포니아(인증서) X

 

openVPN 설치경로 pki 폴더에 인증서를 가져오면 되는데 어떤걸 넣을지 햇갈린다.

 

인증서 본문 : C:\[OpenVPN 설치경로]\easy-rsa\pki\issued\server 인증서

server인증서 워드나 노트패드 열고 전체 복사.
server인증서 붙여넣기

인증서 프라이빗 키 : C:\[OpenVPN 설치경로]\easy-rsa\pki\private\server.key

server.key 워드나 노트패드 열고 전체 복사
server.key 붙여넣기

인증서 체인 : C:\[OpenVPN 설치경로]\easy-rsa\pki\ca

ca체인 인증서 워드나 노트패드 열고 전체 복사
ca 체인 붙여넣기
다음 클릭
태크 아무거나 설정하고 다음 클릭
가져오기 클릭~!
문제 없이 가져옴. 부적격은 신경쓰지 말자~!

client 인증서도 가져와야하는데 위와 같이 가져오면 됨. 스샷찍기 귀찮음...

 

 

가져오기 요약.

AWS에 가져오기 해야할 인증서 두가지 server , client 인증서

 

server 인증서

인증서 본문 : C:\[OpenVPN 설치경로]\easy-rsa\pki\issued\server

인증서 프라이빗 키 :  C:\[OpenVPN 설치경로]\easy-rsa\pki\private\server.key

인증서 체인 : C:\[OpenVPN 설치경로]\easy-rsa\pki\ca (공통)

 

client 인증서

인증서 본문 : C:\[OpenVPN 설치경로]\easy-rsa\pki\issued\client1.domain.tld

인증서 프라이빗 키 :  C:\[OpenVPN 설치경로]\easy-rsa\pki\private\client1.domain.tld.key

인증서 체인 : C:\[OpenVPN 설치경로]\easy-rsa\pki\ca (공통)

 

OK?

 

VPN Client Endpoint 설정

드디어 멀고도 험한 사전준비를 끝냈다...

VPC 클릭!
클라이언트 VPN 엔트포인트 탭 -> 엔드포인트 생성 클릭!

 

이름,설명(안써도됨),클라이언트 IPv4 설정

이름 태그 : 아무거나

설명 : 써도되고 안써도되고

클라이언트 Ipv4 CIDR : 이게 제일 중요함. VPC에 생성된 아이피대역대에 서브네팅 아이피대역대와 겹치지 않게 설정. 단, 같은대역에 CIDR이여야 한다. ex) 겹치지 않는 대역대 설정. 192.168.64.0/24 --> 이 대역대가 openVPN연결할때 할당받는 아이피 대역이다. ex) clinet1 -> 192.168.64.3/32

 

여기서 멈추고 새창을 열어서 VPC 정보를 확인해보면

VPC
서브넷
설정 방법.
인증 정보 설정 방법.

서버 인증서 ARN은 이전에 등록한 server인증서를 가져오면 된다. client인증서는 상호 인증 사용 옵션을 체크하여 가져온다.

 

server 인증서 선택.
client 인증서 선택.
인증 정보 확인.
설정 안함. 하고싶은사람 하면됨.

DNS 서버는 존재하지 않지만 VPC 16비트 대역대에 아무거나 적어주면된다? 나도 잘모르겠다.

 

VPC ID : 192.168.0.0/16 VPC

보안 그룹 ID : 보안그룹 아이디는 생성하면된다. 새로운창 하나 열어서 보안그룹 생성 만들때 192.168.0.0/16 SSH 인바운드 설정 해주면됨.

 

분할 터널 활성화 : 활성화 안하면 처음 접속한 사람이 연결을 끊을때까지 연결을 못함.(다중연결 활성화)

 

VPN 포트 : 설명에 써져있듯 443 or 1194 설정.

세션 제한 시간 : 원하는 시간

 

 

생성 완료.

 

Endpoint 생성 후 후속 작업

대상네트워크 연결, 보안그룹, 권한 부여 규칙, 라우팅 테이블 설정 필요.

 

대상네트워크 연결 탭

대상 네트워크 연결

VPC : 16비트 대역

연결할 서브넷 선택 : 서브넷 된것 중 아무거나.

 

보안 그룹

보안 그룹

보안 그룹은 처음 생성할때 선택 or 추후 적용 가능.

 

권한부여 규칙

 

권한 부여 규칙 추가

모든 네트워크를 활성화 or 192.168.64.0/24 활성화

 

라우팅 테이블

라우팅 테이블 경로생성

경로 대상 : 192.168.0.0/16 VPC

대상 네트워크 연결을 위한 서브넷 ID : 왜인진 모르겠지만 서브네팅이 4개되어있는데 1개만 나온다. 궁금..... 암튼 서브넷 되어있는 ID 선택 (local 선택 ㄴㄴ)

 

VPN 엔드포인트 생성은 완료 되었다. 이전에 설치한 openVPN을 사용하여 연결을 해보자!

 

OpenVPN config 설정

클라이언트 구성 다운로드

클라이언트 구성 다운로드 하면 config가 다운로드가된다.

다운로드한 config를 열어보면

client
dev tun
proto udp
remote cvpn-endpoint-093f64ed05278f330.prod.clientvpn.us-west-1.amazonaws.com 443
remote-random-hostname
resolv-retry infinite
nobind
remote-cert-tls server
cipher AES-256-GCM
verb 3
<ca>
-----BEGIN CERTIFICATE-----
MIIDRTCCAi2gAwIBAgIUFj8O2iz6sKdezt/QBcslIPB2cOkwDQYJKoZIhvcNAQEL
BQAwFDESMBAGA1UEAwwJdnBuc2VydmVyMB4XDTIxMTIxNzAwMzM0MVoXDTMxMTIx
NTAwMzM0MVowFDESMBAGA1UEAwwJdnBuc2VydmVyMIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEA1Xra5aJDxrJM3a0M4Ug/WY/XrqWzm2CSq2KF84zsRwaJ
20vqf6ShDuI/3UXaU//pg52EBCY5YblFRJrPYSHQDJax84qiAIAZKyykQS6O+XHX
wcCiNhUEm7/9HDN6SZiVIOceYG/VfEvdykYquswpN8/eyMKwpDzYp5jWDQMSQYpT
TZG/CkUs2z2PjjkHWxfDEksMamhyCvogPYka6uw5v2THKJrqDrkcCdWJ1Y1+kZe/
ndHDje1c+HaV/J5R7kIQifADy8QZu+bs93i43hAL/IQ5mu0WicJa2nnP5W4iaxKL
R2+5ZDuxya7AojtdVSCE1Si9EIa6F3s/td1Q7Oz7DQIDAQABo4GOMIGLMB0GA1Ud
DgQWBBTNt2tKGUSPsJ3oKPuWh1gAwQBmSjBPBgNVHSMESDBGgBTNt2tKGUSPsJ3o
KPuWh1gAwQBmSqEYpBYwFDESMBAGA1UEAwwJdnBuc2VydmVyghQWPw7aLPqwp17O
39AFyyUg8HZw6TAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjANBgkqhkiG9w0B
AQsFAAOCAQEAJMDwixVTQRn3dBlOKm2aTi5SD7J9jRWVqq1GEQfiQHHYNv/7Bbmu
uzA5F1RRSQsRTW8xUiMpxIL4dtSXwmg/PhZyJw94eGHBlGT4D5iES393NpVSO4oN
8J3ibkxjPerWSg3Jw5ImLQcsF9JdlFAvgkwnEyEG+qWins7eQZ9f1Dc68TTLmguO
CXR+NtJbj9gANHsayv6DWPgBJkrO+2txtczzKAe2uEcVgXNPuTo0Ms6njYu5/Jq9
dj6AAcJejXoNPkgYQ2kjW4rWvmkVJy2qA43+plZJb9YnBJBdftL51Vrfw4Q8t/NK
BPnrAh3Ww+jLtBWbMdzRnh+DmuxayJ5PJw==
-----END CERTIFICATE-----

</ca>


reneg-sec 0

 

아래와 같이 변경.

client
dev tun
proto udp
remote cvpn-endpoint-093f64ed05278f330.prod.clientvpn.us-west-1.amazonaws.com 443
remote-random-hostname
resolv-retry infinite
nobind
remote-cert-tls server
cipher AES-256-GCM
--cert "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\issued\\client1.domain.tld.crt"
--key "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\private\\client1.domain.tld.key"

verb 3
<ca>
-----BEGIN CERTIFICATE-----
MIIDRTCCAi2gAwIBAgIUFj8O2iz6sKdezt/QBcslIPB2cOkwDQYJKoZIhvcNAQEL
BQAwFDESMBAGA1UEAwwJdnBuc2VydmVyMB4XDTIxMTIxNzAwMzM0MVoXDTMxMTIx
NTAwMzM0MVowFDESMBAGA1UEAwwJdnBuc2VydmVyMIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEA1Xra5aJDxrJM3a0M4Ug/WY/XrqWzm2CSq2KF84zsRwaJ
20vqf6ShDuI/3UXaU//pg52EBCY5YblFRJrPYSHQDJax84qiAIAZKyykQS6O+XHX
wcCiNhUEm7/9HDN6SZiVIOceYG/VfEvdykYquswpN8/eyMKwpDzYp5jWDQMSQYpT
TZG/CkUs2z2PjjkHWxfDEksMamhyCvogPYka6uw5v2THKJrqDrkcCdWJ1Y1+kZe/
ndHDje1c+HaV/J5R7kIQifADy8QZu+bs93i43hAL/IQ5mu0WicJa2nnP5W4iaxKL
R2+5ZDuxya7AojtdVSCE1Si9EIa6F3s/td1Q7Oz7DQIDAQABo4GOMIGLMB0GA1Ud
DgQWBBTNt2tKGUSPsJ3oKPuWh1gAwQBmSjBPBgNVHSMESDBGgBTNt2tKGUSPsJ3o
KPuWh1gAwQBmSqEYpBYwFDESMBAGA1UEAwwJdnBuc2VydmVyghQWPw7aLPqwp17O
39AFyyUg8HZw6TAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjANBgkqhkiG9w0B
AQsFAAOCAQEAJMDwixVTQRn3dBlOKm2aTi5SD7J9jRWVqq1GEQfiQHHYNv/7Bbmu
uzA5F1RRSQsRTW8xUiMpxIL4dtSXwmg/PhZyJw94eGHBlGT4D5iES393NpVSO4oN
8J3ibkxjPerWSg3Jw5ImLQcsF9JdlFAvgkwnEyEG+qWins7eQZ9f1Dc68TTLmguO
CXR+NtJbj9gANHsayv6DWPgBJkrO+2txtczzKAe2uEcVgXNPuTo0Ms6njYu5/Jq9
dj6AAcJejXoNPkgYQ2kjW4rWvmkVJy2qA43+plZJb9YnBJBdftL51Vrfw4Q8t/NK
BPnrAh3Ww+jLtBWbMdzRnh+DmuxayJ5PJw==
-----END CERTIFICATE-----

</ca>


reneg-sec 0

클라이언트 cert와 key가 존재하는 위치를 config에 추가 시켜줘야한다.  (내가 연결하는 입장이니까 클라이언트)

 

openVPN 실행 후 import -> 파일 불러오기

수정 한 config를 가져오기 한다.

 

가져온 config를 연결

 

연결 관련 로그
연결 성공
엔드포인트 상태창 -> 연결 탭

연결 탭에서 192.168.64.162를 할당 받은 클라이언트가 연결 되었다고 상태 확인 할 수 있다.

반응형

'공부 > Cloud' 카테고리의 다른 글

[AWS] Amazon EC2  (0) 2024.06.06
[AWS] VPC Endpoint  (0) 2024.06.06
[AWS] Amazon VPC  (0) 2024.06.06
[AWS] On-premise 서버 CloudFront+WAF 이용한 공격대응  (0) 2021.11.24
[AWS] 클라우드 인프라 구축 - 리전, VPC  (0) 2021.11.18

댓글