본문 바로가기

Networking

[실습] AWS Site-to-Site VPN 구성하기 (Static, Openswan)-2편

반응형

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

이번 세션은 AWS(ap-northeast-2)와 Openswan(AWS, us-east-2, On-premise 역할) 사이에 Site-to-Site VPN 연결에 대해서 실습을 해보겠습니다.

실무적으로 쓸일이 없어서 안하려다가 TGW에서 VPN 연결 테스트 상황에서 필요하여 구성해 보았습니다. 만약 On-premise의 VPN장비가 있으시면 굳이 Openswan을 사용하지 않아도 될 것 같습니다.


구성도

Openswan은 일반 EC2에 Openswan을 설치하여 VPN 장비로 구현이 가능한 애플리케이션입니다.
구성하는 과정이 어렵지 않기 때문에 쉽게 따라하실 수 있으리라 생각됩니다. 

사전 작업

인프라 생성 : vpc, subnet, igw, routing table, ec2 등은 설명 생략합니다.

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단계 (us-east-2) : OpenSwan용 EC2 준비

EC2 > Instances > Launch instances : Name(pubB-ec2), AMI(Amazon Linux)

AMI 선택 시 ubuntu는 제외하는 것이 좋겠습니다. Openswan 관련 자료를 찾을 수 없더라고요.

EC2 > Instances > pubB-ec2 선택 > Actions > Networking > Change source/destination check > Stop > save

EC2 인스턴스는 기본적으로 source/destination check를 수행합니다. 이는 인스턴스가 전송하거나 수신하는 트래픽의 소스 또는 대상이어야 함을 의미합니다. 그러나 NAT 인스턴스(=NAT 구조로 동작하는 인스턴스)는 source or destination이 자신이 아닐 때 트래픽을 보내고 받을 수 있어야 합니다. 따라서 NAT 인스턴스에서 source/destination check를 Stop해야 합니다.

EC2 > Elastic IPs > Allocate Elastic IP address > 기본값 > Allocate

EC2 > Elastic IPs > 생성된 EIP(eipB) 선택 > Actions > Associate Elastic IP address  > Resource type(Instance), Instance(pubB-ec2)

테스트용으로 구성할 경우, 굳이 고정 Elastic IP address(EIP)가 불필요하기 때문에 이 행위 SKIP해도 됩니다. 
왜냐하면 public subnet에 배포되는 pubB-ec2가 기본적으로 유동적인 public IP를 할당받기 때문입니다.

EC2 > Instances > pubB-ec2 선택 > Details (tab) > Public IPv4 address가 EIP로 변경됨을 확인
EC2 > Instances > pubB-ec2 선택 > Security (tab) > Security groups 링크 클릭 > SG  Inbound rules (tab) > Edit inbound rules > Add rule

Type Port range Source
Custom UDP 4500 0.0.0.0/0
Custom ICMP - IPv4 - 0.0.0.0/0

pubB-ec2 SSH로 접속하여 OpenSwan 설치만 진행

sudo yum install openswan

2단계 (ap-northeast-2) : VGW 및 CGW 생성, VPN 연결

VPC > Virtual private gateways > Create virtual private gateway

Name tag Autonomous System Number (ASN)
vgwA Amazon default ASN (AWS 기본값은 64512)
Openswan과 BGP(동적)으로 VPN 구성을 하는 경우는 ASN값이 Openswan에 설정된 값과 다르게 해야합니다.
하지만 이번 세션에는 BGP(동적)으로 VPN 구성을 하지 않기 때문에 Default값으로 진행해도 무방합니다.

VPC > Virtual private gateways > vgwA 선택 > Attach to VPC > vpcA 선택 > Attach to VPC
VPC > Customer gateways > Create customer gateway

Name tag BGP ASN IP Address
cgwA 65000 eipB (pubB-ec2의 public IP)
ASN값은 BGP(동적)으로 구성할 때만 사용되며, Openswan을 BGP(동적)으로 구성하지 않기 때문에 기본값(65000)으로 진행하시면 됩니다.

VPC > Site-to-Site VPN Connections > Create VPN connection 

구분 Details Tunnel Options 
1 Name tag : vpnA
Target gateway type : Virtual private gateway
Virtual private gateway : vgwA
Customer fateway : Existing
Customer gateway ID : cgwA
Routing options : static
Static IP prefixes : 20.0.0.0/16 (vpcB 대역정보)
설정하지 않음

VPC > Route tables > pubA-rt 선택 > Route propagation (tab) > Edit route progagation > Enable > Save

Enable 설정하면 아래 VPN 연결이 되면서 On-premise(20.0.0.0/16) 대역이 Route tables에 자동 등록됩니다.

VPC > Site-to-site VPN Connections > vpnA 선택 > Download configuration : 3단계(us-east-2) VPN 연결에서 사용하는 파일

VPC > Site-to-site VPN Connections > vpnA 선택 > Tunnel details (tab) > Status “Down” 확인

3단계 (us-east-2) : VPN 연결

다운로드 받은 구성 파일을 이용하여 pubB-ec2 SSH 접속하여 아래처럼 설정 진행

# 패킷 포워딩 활성화 : 다운로드 받은 구성 파일 내용 사용
sudo vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 0

# 패킷 포워딩 활성화 적용 : 다운로드 받은 구성 파일 내용 사용
sudo sysctl -p

# include /etc/ipsec.d/*.conf 주석처리만 제거, 나머지 그대로 유지 : 다운로드 받은 구성 파일 내용 사용
sudo vi /etc/ipsec.conf
include /etc/ipsec.d/*.conf

# VPN 연결 구성 : 다운로드 받은 구성 파일 내용 사용
sudo vi /etc/ipsec.d/aws.conf
conn Tunnel1
     authby=secret
     auto=start
     left=%defaultroute
     leftid=pubB-ec2_공인IP_입력(자동 등록되어 있음)
     leftsubnet=vpcB_대역_입력
     right=AWS터널1번_공인IP_입력(자동 등록되어 있음)
     rightsubnet=vpcA_대역_입력
     type=tunnel
     ikelifetime=8h
     keylife=1h
     phase2alg=aes_gcm
     ike=aes256-sha2_256;dh14
     #phase2alg=aes128-sha1;modp1024
     #ike=aes128-sha1;modp1024
     #auth=esp
     keyingtries=%forever
     keyexchange=ike
     dpddelay=10
     dpdtimeout=30
     dpdaction=restart_by_peer
conn Tunnel2
     authby=secret
     auto=start
     left=%defaultroute
     leftid=pubB-ec2_공인IP_입력(자동 등록되어 있음)
     leftsubnet=vpcB_대역_입력
     right=AWS터널2번_공인IP_입력(자동 등록되어 있음)
     rightsubnet=vpcA_대역_입력
     type=tunnel
     ikelifetime=8h
     keylife=1h
     phase2alg=aes_gcm
     ike=aes256-sha2_256;dh14
     #phase2alg=aes128-sha1;modp1024
     #ike=aes128-sha1;modp1024
     #auth=esp
     keyingtries=%forever
     keyexchange=ike
     dpddelay=10
     dpdtimeout=30
     dpdaction=restart_by_peer

# VPN 연결키 설정 : 다운로드 받은 구성 파일 내용 사용
sudo vi /etc/ipsec.d/aws.secrets
pubB-ec2_공인IP AWS터널1번_공인IP : PSK "비밀번호"(자동 등록되어 있음)
pubB-ec2_공인IP AWS터널2번_공인IP : PSK "비밀번호"(자동 등록되어 있음)

# ipsec 구동하여 Active 상태 확인
sudo systemctl start ipsec.service
sudo systemctl enable ipsec.service
sudo systemctl status ipsec.service

# ipsec 상태 확인 : 터널 개수만큼 표시
sudo ipsec status | grep Total
000 Total IPsec connections: loaded 2, active 2

# ipsec 서비스 포트 리슨 확인
sudo netstat -nptul | grep 500
udp        0      0 127.0.0.1:500     0.0.0.0:*       4835/pluto
udp        0      0 20.0.1.9:500      0.0.0.0:*       4835/pluto
udp        0      0 127.0.0.1:4500    0.0.0.0:*       4835/pluto
udp        0      0 20.0.1.9:4500     0.0.0.0:*       4835/pluto

# ipsec 통신 상태 확인
sudo yum install tcpdump -y
sudo tcpdump -nni eth0 port 4500
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
08:49:36.858237 IP 20.0.1.9.4500 > 3.34.237.21.4500: isakmp-nat-keep-alive
08:49:37.015659 IP 20.0.1.9.4500 > 3.34.237.21.4500: NONESP-encap: isakmp: phase 2/others ? inf[E]
AWS에서 다운로드 받은 구성 파일 중 아래 3가지 항목으로 인하여 많은 고생을 했습니다.
AWS에서 제공되는 구성파일이 문제가 될줄은 생각도 못했습니다.
아무튼 3개의 항목은 주석처리(or 삭제)하시고, 아래 2줄로 대체해야 정상적으로 Tunnel이 연결됩니다.
   #phase2alg=aes128-sha1;modp1024
   #ike=aes128-sha1;modp1024
   #auth=esp

   phase2alg=aes_gcm
   ike=aes256-sha2_256;dh14

4단계 (ap-northeast-2) : VPN 연결 확인

VPC > Site-to-site VPN Connections > vpnA 선택 > Tunnel details (tab) > Status “Up” 확인
VPC > Route tables > pubA-rt 선택 > Routes (tab) > 자동으로 On-premise 대역에 대해서 라우팅 등록 확인

5단계 (ap-northeast-2, us-east-2) : VPN 통신 확인

vpcA의 pubA-ec2에서 vpcB의 priB-ec2의 사설 IP로 Ping or SSH 접속 시도 : Success 확인

vpcA, vpcB 모두 NACL, SG 등 보안 설정에 대해서 Inbound, Outbound 정책을 꼭 확인해서 허용하도록 합니다.
반응형