클라우드에 가상 온프레미스 환경을 구축하고 Site-to-Site VPN으로 연결하기
Site to Site VPN 이란?
IPSec 암호화 프로토콜을 사용해 AWS Cloud 환경과 On-Premise 환경을 연결해주는 서비스입니다.
AWS에는 VGW(Virtual Private Gateway), On-Premise에는 CGW(Customer Gateway)가 붙어있으며 이 둘 사이에 IPSec 프로토콜을 이용해 터널링을 만들어 줘 인터넷을 통해서 상호 간 통신이 가능하게 해주는 원리입니다.
하단의 이미지는 Site-to-Site VPN의 기본 구성입니다.

VGW(Virtual Private Gateway)란?
✔️ VGW는 가상 사설 네트워크인 VPC와 온프레미스 네트워크를 연결하는 방식 중 가장 오래된 방식입니다.
✔️ VGW는 VPC와 온프레미스 네트워크를 연결하는 VPC 쪽의 라우터 역할을 합니다.
✔️ VGW를 이용해 온프레스 네트워크와 연결하기 위해서는 온프레미스 네트워크 쪽에 CGW(Customer Gateway)를 구성해 줘야 합니다.
VGW는 다음과 같은 특징들을 가지고 있습니다.
- VGW는 여러 개의 온프레미스 라우터와 연결이 가능합니다.
- 다만 VGW는 하나의 VPC에만 연결할 수 있습니다.
- VGW는 Site-to-Site VPN, Direct Connect 연결을 통해 온프레미스 네트워크와 연결이 가능합니다.
- VGW 생성시 동적 라우팅을 사용할 경우 ASN(Autonomous System Number)를 지정해 줘야합니다.
※ Autonomous System Number(ASN)은 인터넷 상에서 독립적으로 라우팅 정책을 운영하는 네트워크나 네트워크 그룹을 식별하는 고유한 번호입니다. ASN을 통해 네트워크는 다른 네트워크와 데이터를 효과적으로 주고받을 수 있습니다.
CGW(Customer Gateway)란?
✔️ CGW는 온프레미스 네트워크의 CGD(Customer Gateway Device)의 설정 값을 VGW에 제공하기 위한 가상 게이트웨이입니다. CGW는 AWS에서 설정할 수 있습니다.
CGW는 다음과 같은 특징들을 가지고 있습니다.
- CGD에 있는 IP 정보 등 CGD와 연결할 수 있는 설정 값들을 CGW에 지정함으로써 VGW는 CGW에 있는 해당 값들을 참조해 CGD에 연결할 수 있게 됩니다.
- CGW 역시 동적 라우팅을 사용할 경우 ASN을 지정해 줘야합니다.
CGD(Customer Gateway Device)란?
✔️ CGD는 Site-to-Site VPN 연결을 위해 온프레미스에 설치된 라우터 등의 물리적 디바이스 또는 소프트웨어를 의미합니다.
CGD는 다음과 같은 특징들을 가지고 있습니다.
- CGD가 BGP를 지원하지 않을 경우 VPN 연결시 동적 라우팅을 사용할 수 없습니다. 따라서 이 경우 정적 라우팅을 사용해야 합니다.
- VGW와 CGW의 설정을 모두 구성한 뒤 구성 파일을 다운로드 받아 CGD에 설치하게 되면 VPC와 온프레미스 네트워크 간의 VPN Tunnel이 구성됩니다.
VPN Tunnel
✔️ VPN 터널은 VPC와 온프레미스 네트워크 간의 서로 데이터를 주고받을 수 있는 암호화된 링크입니다.
VPN 터널은 다음과 같은 특징들을 가지고 있습니다.
- VPN 터널은 IPSec 프로토콜 스위트를 사용해 데이터를 암호화하여 처리합니다.
- 각 VPN 터널은 인터넷 연결을 위한 Public IP와 내부 연결을 위한 내부 CIDR로 구성됩니다.
- 또한 VPN 터널이 생성될 때 AWS에서 기본값을 지정하게 되는데, 암호화, Dead Peer Detection(DPD) 시간 초과, IP 주소 등의 터널옵션을 직접 지정할 수 있습니다.
- Site-to-Site VPN을 구성할 때 두 개의 VPN 터널을 생성하게 되는데, 그 이유는 VPN 터널이 사용 불가능 해질 경우 다른 VPN 터널로 자동으로 라우팅되어 고가용성을 겸비할 수 있습니다.
- VPN 터널당 최대 대역폭은 1.25Gpbs 입니다.
Site-to-Site VPN 라우팅 옵션
고객 게이트웨이 디바이스의 제조업체와 모델에 따라 라우팅 유형을 선택할 수 있습니다.
고객 게이트웨이 디바이스에서 **Border Gateway Protocol(BGP)**을 지원할 경우 Site-to-Site VPN 연결을 구성할 때 동적 라우팅을 지정합니다. 고객 게이트웨이 디바이스가 BGP를 지원하지 않는 경우 정적 라우팅을 지정합니다.
※ 자세한 내용은 아래의 링크를 참고 부탁 드리겠습니다.
🔗 https://docs.aws.amazon.com/ko_kr/vpn/latest/s2svpn/VPNRoutingTypes.html
구성해볼 Site to Site VPN 아키텍처

Site to Site VPN 실습
VPC 생성
1. OnPrem용 VPC 생성
아래와 같이 OnPrem용 VPC 생성을 진행합니다.
- IPv4 CIDR 블록 : 172.32.0.0/16
- 가용영역 : 1개
- 퍼블릭 서브넷 수 : 1개
- Nat GW 없음, VPC Endpoint 없음
- DNS 호스트 이름 및 확인 활성화
위의 내용대로 생성한 OnPrem VPC 의 리소스 맵

2. Cloud VPC 생성
아래와 같이 Cloud용 VPC 생성을 진행합니다.
- IPv4 CIDR 블록 : 52.0.0.0/16
- 가용영역 : 1개
- 퍼블릭 서브넷 수 : 1개
- Nat GW 없음, VPC Endpoint 없음
- DNS 호스트 이름 및 확인 활성화
위의 내용대로 생성한 Cloud VPC 의 리소스 맵

보안 그룹 생성
1. OnPrem VPC 보안 그룹 생성
※ 보안 상 인바운드 규칙을 0.0.0.0/0으로 설정 것은 좋지 않은 방법이나 테스트 용도를 위해 아래와 같이 생성하도록 하겠습니다.
SSH 접속을 위하여 22번 포트 오픈 해줍니다.

PingTest를 위하여 ICMP – IPv4 대역을 오픈 해줍니다.

우리는 OnPrem VPC 내 인스턴스에 openswan을 설치 해줄 예정이고 openswan이 UDP 4500 포트를 사용하기 때문에 UDP 4500포트 또한 오픈 해줍니다.

2. Cloud VPC 보안 그룹 생성
위와 동일하게 SSH 접속 및 PingTest를 위해 보안 그룹을 별도로 생성하여 줍니다.


Key Pair 생성
실습에서는 OpenSSH와 함께 사용해볼 예정이라 .pem 형식의 프라이빗 키 파일을 사용할 것입니다.
아래와 같이 키 페어를 생성해줍니다.
키 페어 유형 : RSA
프라이빗 키 파일 형식 : .pem

인스턴스 생성 및 내부 설치 작업
1. OnPrem VPC 내 인스턴스 생성
EC2 이름 : OnPrem-Server
AMI : Amazon Linux 2 AMI (HVM) – Kernel 5.10, SSD Volume Type
인스턴스 유형 : t3.nano
Key Pair : 앞서 생성했던 Peter_VPNTest_Key
- 네트워크 설정
- VPC : OnPrem-vpc
- 서브넷 : Onprem-subnet-Public1
- 퍼블릭 IP : 활성화
- 보안 그룹 : 앞서 생성하였던 OnPrem-SSH-SG, OnPrem-openswan-SG, OnPrem-PingTest-SG
2. 생성한 OnPrem EC2 인스턴스에 SSH 접속 및 openswan 설치
- ssh로 OnPrem EC2에 접속해 openswan을 아래와 같이 설치 합니다.
[ec2-user@ip-10-0-0-195 ~\]$ sudo su -
[root@ip-10-0-0-195 ~\]# yum install -y openswan
- /etc/ipsec.conf 파일을 열어서 include /etc/ipsec.d/*.conf 라인의 주석을 해제합니다. 만일 이미 해제되어 있다면 그대로 두시면 됩니다.
[root@ip-10-0-0-195 ~\]# vim /etc/ipsec.conf
...
# It is best to add your IPsec connections as separate files in /etc/ipsec.d/
include /etc/ipsec.d/\*.conf

※ vi 편집기에서 Ins를 누르면 편집가능하고 나갈때는 ESC 누른 뒤 :wq! 를 하시면 저장 후 종료가 됩니다.
- 이번에는 /etc/sysctl.conf 파일을 열어서 아래의 내용을 추가해줍니다.
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 0

- 그런 다음 아래의 명령으로 내트워크 서비스를 재시작 해줍니다.
[root@ip-10-0-0-195 ~\]# systemctl restart network
3. Cloud VPC 내 인스턴스 생성
EC2 이름 : Cloud-Server
AMI : Amazon Linux 2 AMI (HVM) – Kernel 5.10, SSD Volume Type
인스턴스 유형 : t3.nano
Key Pair : 앞서 생성했던 Peter_VPNTest_Key
- 네트워크 설정
- VPC : Cloud-vpc
- 서브넷 : Cloud-subnet-Public1
- 퍼블릭 IP : 활성화
- 보안 그룹 : 앞서 생성하였던 Cloud-SSH-SG, Cloud-PingTest-SG
VPN Connection 연결 과정
1. Customer Gateway(CGW) 생성
이름 : OnPrem-CGW
BGP ASN : 65000
IP주소 : 13.228.78.255 (OnPrem-Server EC2의 퍼블릭 IP)

2. Virtual Private Gateway(VGW) 생성
이름 : AWS-OnPrem-VGW
Autonomous System Number(ASN) : Amazon 기본 ASN

아래와 같이 생성한 VGW를 Cloud-VPC에 Attach 시켜줍니다.



3. VPN Connection
아래와 같이 VPN Connection을 생성하여 줍니다.
이름 : AWS-OnPrem-Connection
대상 게이트웨이 유형 : 가상 프라이빗 게이트웨이(VGW) → AWS-OnPrem-VGW
고객 게이트웨이 : 기존 → OnPrem-CGW
정적 접두사 : 172.32.0.0/16 → OnPrem VPC의 IPv4 CIDR 대역을 기입

※ 선택 사항
- 로컬 IPv4 네트워크 CIDR : 고객 게이트웨이와 VPN상에서 통신할 대역을 제한
- 원격 IPv4 네트워크 CIDR : AWS측과 VPN상에서 통시할 대역을 제한

※ 터널 옵션 항목은 기입하지 않아도 AWS에서 자동으로 생성해줍니다.
따라서 이번 실습에서는 따로 옵션 지정 없이 그대로 사용할 예정입니다.
만일 사전에 준비된 키가 있다면 입력하여 사용 하실 수 있습니다.
VPN Connection을 생성하고 State가 available이 될 때 까지 잠시 기다린 후 하단의 Tunnel Details 항목에서 2개의 VPN Tunnel을 확인할 수 있습니다. 아직은 두 터널 모두 Down 상태인 것이 정상입니다.

4. Configuration 다운로드
다시 Site-to-Site VPN Connection 메뉴로 돌아와서 AWS-OnPrem-Connection을 선택하고 상단의 Download Configuration 클릭합니다.

아래와 같이 구성을 맞추고 다운로드 합니다.
공급 업체 : openswan
플랫폼 : openswan
소프트웨어 : openswan 2.6.38+
IKE버전 : ikev1

- 다운로드 화면

5. openswan 설정
- OnPrem-Server EC2에 SSH로 접속한 상태에서 root 권한으로 전환합니다.
[ec2-user@ip-10-0-0-195 ~]$ sudo su -
- 이 단계에서부터 필요한 내용은 앞서 다운로드한 Configuration 파일에서 그대로 복사합니다.
- /etc/ipsec.d/aws.conf 설정을 아래와 형식에 맞게 내용을 수정 후 저장해줍니다.
[root@ip-172-32-10-234 ipsec.d]# vim /etc/ipsec.d/aws.conf
conn Tunnel1
authby=secret
auto=start
left=%defaultroute
leftid=13.228.78.255
right=18.143.239.236
type=tunnel
ikelifetime=8h
keylife=1h
phase2alg=aes_gcm
ike=aes128-sha1
keyingtries=%forever
keyexchange=ike
leftsubnet=172.32.0.0/16
rightsubnet=52.0.0.0/16
dpddelay=10
dpdtimeout=30
dpdaction=restart_by_peer

- /etc/ipsec.d/aws.secrets 설정을 아래와 같이 다운로드한 Configuration 파일에서 Pre-Shared Key 값을 붙여 넣습니다.
13.228.78.255 18.143.239.236: PSK "u94wi4E9Ybba1tmS4GrQyXL8MMYdXKwl"
<위 값은 사람마다 다름>

- 아래 명령을 실행하여 openswan(ipsec) 서비스 시작 해줍니다.
systemctl start ipsec.service
systemctl enable ipsec.service
systemctl status ipsec.service
- 아래와 같이 정상적으로 Active 되었는지 확인합니다.

라우팅 테이블 전파 활성화 및 PingTest
전파를 활성화 하기 전 Cloud VPC내의 EC2(Cloud-Server)에서 OnPrem VPC 내의 EC2(Cloud-Server) 프라이빗 ip로 ping 테스트를 실시하면 아래와 같이 ping이 가지 않는 것을 확인 할 수 있습니다.

VGW를 통해 CGW와 연결되어 VPN이 구성되게 되는데, 이 과정에서 둘 사이의 라우팅 테이블을 주고받기 위해서는 AWS즉, Cloud VPC의 라우팅 테이블에서 라우팅 전파 옵션을 활성화 시켜야 합니다.
왼쪽 메뉴에 Route Tables을 선택한 후 Cloud-rtb-public를 선택해 줍니다.
그 다음 Edit route propagation 버튼을 눌러 라우팅 전파 옵션을 편집해줍니다.
그렇다면 아래와 같이 자동으로 라우팅 테이블 라우팅 대상에 자동으로 입력되는 것을 확인하실 수 있습니다.



그런 다음 각 인스턴스의 Private IP로 Ping 테스트를 해보면 정상적으로 Ping이 수신 되는 것을 확인하실 수 있습니다.
이번 구성을 진행하면서 Site-to-Site VPN은 단순히 VPN 연결 리소스를 생성하는 것만으로 완성되는 것이 아니라는 점을 알 수 있었습니다. 양쪽 네트워크의 게이트웨이와 라우팅 설정, 터널 상태, 실제 트래픽이 이동하는 경로까지 함께 이해해야 정상적인 통신을 구성할 수 있었습니다.
처음에는 각각의 설정 항목이 독립적으로 보였지만, 직접 연결 과정을 따라가면서 모든 구성 요소가 하나의 네트워크 경로를 만들기 위해 서로 연결되어 있다는 점을 이해할 수 있었습니다. 이번 경험을 통해 하이브리드 네트워크의 기본적인 연결 구조를 보다 명확하게 익힐 수 있었으며, 앞으로 비슷한 VPN 연결 문제를 마주했을 때도 구성 요소별로 원인을 나누어 확인할 수 있을 것 같습니다.
글 | 메가존클라우드 Commercial Managed Unit 최영훈 매니저





