아마존 vpn 터널링
Client VPN Endpoints이란
vpn은 쉽게 말해 내 컴퓨터가 마치 다른 네트워크 상에 있는 것처럼 만들어주는 기술이다.
AWS Client VPN은 OpenVPN 서버를 AWS에서 쉽게 이용할 수 있도록 한 관리형 서비스로서, 다음과 같이 VPN을 통해 AWS 외부에서 VPC 상에 프라이빗한 리소스에 접근할 수 있도록 해준다.
구성법
ACM 인증서 등록
Client VPN Endpoints를 사용하기 위해서는 우선 ACM(AWS Certificate Manager)에서 인증서를 발급해야 한다.
인증서는 서버 인증서와 클라이언트 인증서 총 2개가 필요하다.
인증서를 생성해주는 easyrsa3를 이용한다. 설치법은 다음과 같다(mac기준)
- git clone https://github.com/OpenVPN/easy_rsa.git
인증서 생성은 다음 sh스크립트 참고한다.
#!/bin/bash
set -e
cd ./easy-rsa/easyrsa3
### 인증서 생성 ###
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa --san=DNS:server.example.com build-server-full server nopass
./easyrsa build-client-full client1.domain.tld nopass
cd ../../
### 생성된 인증서를 개인폴더로 이동 ###
cp ./easy-rsa/easyrsa3/pki/ca.crt ./custom_folder/
cp ./easy-rsa/easyrsa3/pki/issued/server.crt ./custom_folder/
cp ./easy-rsa/easyrsa3/pki/private/server.key ./custom_folder/
cp ./easy-rsa/easyrsa3/pki/issued/client1.domain.tld.crt ./custom_folder
cp ./easy-rsa/easyrsa3/pki/private/client1.domain.tld.key ./custom_folder/
cd ./custom_folder/
### aws 설정 ###
aws configure set region us-east-2
#아래는 수동으로 실행할것
# aws acm import-certificate --certificate fileb://./custom_folder/server.crt --private-key fileb://./custom_folder/server.key --certificate-chain fileb://./custom_folder/ca.crt
# aws acm import-certificate --certificate fileb://./custom_folder/client1.domain.tld.crt --private-key fileb://./custom_folder/client1.domain.tld.key --certificate-chain fileb://./custom_folder/ca.crt
# cat ./custom_folder/server.crt | pbcopy
인증서 생성부분에서 서버 인증서 생성에 --san=DNS:server.example.com 이 추가되어있는데, 이걸 추가해야 AWS에 업로드할 때 도메인 이름이 뜬다(도메인 이름이 안뜨면, VPN 엔드포인트 생성할때 키 지정이 안됨)
aws acm 으로 시작하는 명령어는 생성한 인증서와 키를 업로드하기 위한 명령어이다.
업로드가 되면 다음 화면처럼 보여야한다.
VPN 엔드포인트 생성
다음 화면과 같이 인증서 생성을 진행해준다.
클라이언트 IPv4 CIDR은 사용중인 VPC 대역과 겹치지 않도록 설정해준다. (필자는 10.2.0.0/16 로 지정함)
인증정보는 조금 전에 등록한 서버, 클라이언트 인증서를 지정해준다.
전송 프로토콜은 UDP로 두고, 분할 터널 활성화를 켜준다.(대상 트래픽만 VPN 터널을 통과하도록 AWS 하여 클라이언트의 트래픽 라우팅을 최적화할 수 있고,
발신 트래픽의 양을 줄여 데이터 전송 비용을 줄일 수 있다.)
해당 네트워크에 연결할 서브넷을 지정해준다. (필자는 k8s 내부접속을 위해 private subnet 3개를 연결함)
보안그룹을 지정해준다.
443 UDP 허용 보안그룹을 생성해주거나, 해당 포트와 프로토콜이 포함된 보안그룹을 지정해주면 된다.
권한 규칙을 지정해준다. 모든 네트워크에서 연결할 수 있도록 "0.0.0.0/0" 로 지정한다.
설정이 끝나면 상단에 클라이언트 구성 다운로드를 클릭하여 접속에 필요한 .ovpn 파일을 다운로드 받는다.
.ovpn파일을 열고 내부에 다음 내용을 추가해준다.
<cert>
Contents of client certificate (.crt) file
</cert>
<key>
Contents of private key (.key) file
</key>
클라이언트 측의 cert와 key내용을 기입해 준다.
VPN 네트워크 터널링
다음 링크를 통해 vpn클라이언트를 설치한다.
aws vpn client download
다운받고 실행한 다음, 프로필을 추가하고 아까 설정한 .ovpn파일을 열어준다.
해당 네트워크에 접속한다.