📖 **가상 프라이빗 게이트웨이란?**
가상 프라이빗 게이트웨이는 Site-to-Site VPN 연결의 Amazon 측에 있는 VPN 집선기입니다.
가상 프라이빗 게이트웨이를 생성하여 Site-to-Site VPN 연결에 액세스해야 하는 리소스가 포함된 Virtual Private Cloud(VPC)에 연결합니다.
즉, 외부에서 VPN 연결을 통해 AWS VPC 에 접근 할 수 있도록 하는 게이트웨이를 만드는 것을 의미 합니다.

❗ **가상 프라이빗 게이트웨이 생성하기**


virtual-private-gateway 라고 작성 하겠습니다.

이렇게 함으로써 가상 프라이빗 게이트웨이와 연결되는 통신은 연결된 pirvate-vpc 와 연결되어 있습니다.
📖 **고객 게이트웨이란?**
고객 게이트웨이 (CGW) 는 온프레미스 네트워크의 고객 게이트웨이 디바이스를 나타내는 AWS에서 생성하는 리소스입니다.
즉, 외부의 On-premises 네트워크 로 부터 들어오는 AWS내 게이트웨이를 의미 합니다.

❗ **고객 게이트웨이 생성하기**



여기서는 다음 게시글에서 작성할 OpenSwan 을 통한 서버(온프레미스)의 공인 IP를 값으로 작성 하도록 하겠습니다.
다른 옵션들은 상황에 맞게 작성 하시면 됩니다.

위와 같이 고객 게이트웨이를 생성 하면 됩니다.
📖 **Site-To-Site VPN 란?**
기본적으로 Amazon VPC로 시작하는 인스턴스는 자체(원격) 네트워크와 통신할 수 없습니다.
Site-to-Site VPN(Site-to-Site VPN)을 통해 VPC에서 원격 네트워크에 대한 액세스를 활성화할 수 있습니다.
방금 생성한 고객 게이트웨이 및 가상 프라이빗 게이트웨이 를 통해 AWS VPC 와 온프레미스 네트워크간 VPN 연결을 할 수 있습니다.
❗ **가상 프라이빗 게이트웨이 생성하기**


가상 프라이빗 게이트웨이는 이전에 생성한 값을 선택, 고객 게이트웨이 또한 이전에 생성한 값을 선택 합니다. 정적 IP 접두사 의 경우 *외부 온프레미스 네트워크의 사설 IP 대역* 을 입력 해주면 됩니다.

구성 다운로드 라는 버튼이 생깁니다. 구성 다운로드 버튼을 클릭하면 아래와 같이 팝업이 나옵니다.
============================중략============================
--------------------------------------------------------------------------------------------------------------------
IPSEC Tunnel #1
--------------------------------------------------------------------------------------------------------------------
This configuration assumes that you already have a default openswan installation in place on the Amazon Linux operating system (but may also work with other distros as well)
1) Open /etc/sysctl.conf and ensure that its values match the following:
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 0
2) Apply the changes in step 1 by executing the command 'sysctl -p'
3) Open /etc/ipsec.conf and look for the line below. Ensure that the # in front of the line has been removed, then save and exit the file.
#include /etc/ipsec.d/*.conf
4) Create a new file at /etc/ipsec.d/aws.conf if doesn't already exist, and then open it. Append the following configuration to the end in the file:
#leftsubnet= is the local network behind your openswan server, and you will need to replace the <LOCAL NETWORK> below with this value (don't include the brackets). If you have multiple subnets, you can use 0.0.0.0/0 instead.
#rightsubnet= is the remote network on the other side of your VPN tunnel that you wish to have connectivity with, and you will need to replace <REMOTE NETWORK> with this value (don't include brackets).
conn Tunnel1
authby=secret
auto=start
left=%defaultroute
leftid=223.130.160.187 # 고객 Public IP 주소
right=13.125.8.252 # 터널 1의 접근 외부IP 주소
type=tunnel
ikelifetime=8h
keylife=1h
phase2alg=aes128-sha1;modp1024
ike=aes128-sha1;modp1024
auth=esp
keyingtries=%forever
keyexchange=ike
leftsubnet=<LOCAL NETWORK> # 온프레미스 서버의 Private IP CIDR 여기서는 10.1.0.0/16
rightsubnet=<REMOTE NETWORK> # AWS VPC의 서브넷 및 VPC IP CIDR 여기서는 10.3.2.0/24
dpddelay=10
dpdtimeout=30
dpdaction=restart_by_peer
5) Create a new file at /etc/ipsec.d/aws.secrets if it doesn't already exist, and append this line to the file (be mindful of the spacing!):
223.130.160.187 13.125.8.252: PSK "TC82j8r3ZKKNZkC0KcJ_GkpbNC8_vYrl"
============================중략============================
해당 정보는 온프레미스 서버에서 설정 값으로 설정 할 내용들이 담겨져 있으며, 해당 구성 정보를 온프레미스 측에 전달하여 ipsec 설정을 할 수 있도록 설정 합니다.

아직, 온프레미스 측에서 VPN 설정 작업을 하지 않았기 때문에 위와 같이 아래로 (DOWN) 상태로 확인 됩니다.

온프레미스 측에서 VPN 설정을 완료 하면 상태가 올라 온 것을 확인 할 수 있습니다.
VPN 이 연결 되어 있지만, 서브넷의 라우팅 테이블에서 연결을 막을 수 있습니다. 이에 따라서 연결을 설정 해줘야 합니다.
또한, 리소스와 연결된 보안그룹이 IP 접근을 막을 수 있기 때문에 이에 대해 보안그룹을 설정 해줘야 합니다.
❗ 라우팅 테이블 설정 하기


(Source)온프레미스 네트워크의 IP 가 가상 프라이빗 게이트웨이 로 갈 수 있도록 라우팅 테이블 설정 합니다.
(Source)온프레미스 네트워크의 IP 가 가상 프라이빗 게이트웨이 로 갈 수 있도록 보안그룹을 설정 합니다.
보안그룹 및 라우팅 테이블 설정을 하면 외부 온프레미스로 부터 AWS 내 Private VPC/Subnet 에 접근 할 수 있습니다.
다음글 보러가기: https://velog.io/@jwisgenius/AWS-VPN-Site-To-Site-VPN-설정-실습-하기-2-온프레미스-설정