[AWS] Site-to-Site VPN 실습

수정일 수, 7월 19, 2023 시간: 5:03 PM

실습


IDC 를 AWS 다른 region 에 구성한 뒤, ec2로 openswan 을 설치한 cgw를 만든다.

이후 AWS VPC에서 SITE-TO-SITE VPN을 연결하는 실습을 해본다.


IDC 구성


임의로 IDC 를 구성해보았다. 오레곤 region에 openswam을 설치한 customer gateway device를 생성 하여 구성하였다.


  • Region : 오레곤


VPC 생성

  • name : hanna-idc-vpc
  • CIDR : 10.60.0.0/16
  • 테넌시 : Default


subnet 생성

Public subnet


Private subnet


routing table 생성 및 서브넷 연결

Public routing table

  • name : hanna-idc-public-rt
  • 0.0.0.0/0 → IGW

Private routing table

  1. routing table 생성

  2. 서브넷 연결

  • name : hanna-idc-private
  • 10.50.0.0/16 → IDC CGW EC2의 eni


Internet Gateway 생성


IDC VPC의 Public subnet 전용 인터넷 게이트웨이를 생성한다.


  1. 인터넷 게이트웨이 생성


  2. VPC에 연결

  • name : hanna-idc-IGW


라우팅 테이블 편집


Public subnet routing table 편집


public subnet에 IGW를 추가한다.


CGW 인스턴스 생성


인스턴스 생성



보안그룹 생성



Openswarm 은 udp 4500 포트 사용

PING을 위해 ICMP를 허용하였으며, 터미널 접속을 위해 SSH Port 역시 열어두었다.


eip 연결


인스턴스 접속 후 openswan 설치

public subnet에 있는 ec2에 cgw를 구성하기 위함.


sudo su -
yum install -y openswan



/etc/sysctl.conf 파일을 수정하고, network를 다시 시작한다.


# vi /etc/sysctl.conf
 
net.ipv4.ip_forward=1
 net.ipv4.conf.all.accept_redirects = 0
 net.ipv4.conf.all.send_redirects = 0
 net.ipv4.conf.default.send_redirects = 0
 net.ipv4.conf.eth0.send_redirects = 0
 net.ipv4.conf.default.accept_redirects = 0
 net.ipv4.conf.eth0.accept_redirects = 0
 net.ipv4.conf.ip_vti0.rp_filter = 0
 net.ipv4.conf.eth0.rp_filter = 0
 net.ipv4.conf.default.rp_filter = 0
 net.ipv4.conf.all.rp_filter = 0
 
# systemctl restart network 



Private subnet에 EC2 생성

해당 EC2는 VPN 구성 테스트를 위한 용도이다.


보안그룹은 SSH와 ICMP만 허용.


라우팅 테이블 편집


Private subnet의 라우팅 테이블 편집



이후 생성 할 VPN의 VPC CIDR과 방금 전 public subnet에 생성한 CGW EC2의 ENI를 설정한다.

(대상 → 네트워크 인터페이스 → hanna-idc-public)


AWS 측


Site-to-Site vpn을 생성하여 고객 IDC와 연결을 맺는 AWS측 구성. Seoul 리전에 구성하였다.


VPC 생성

  • name : hanna-aws-vpc
  • CIDR : 10.50.0.0/16


Subnet 생성



라우팅 테이블 생성



서브넷 연결



인터넷 게이트웨이 생성



VPC 연결



ec2 생성


Site-to-Site VPN 연결


고객 게이트웨이 생성 (CGW)


  • 이름 : hanna-cgw
  • 라우팅 : 정적 (static)
  • ip 주소 : idc cgw 의 eip
  • 나머지는 설정하지 않아도 된다.


가상 게이트웨이 생성 (VGW)


VGW 생성 후 → vpc 에 연결




Site-to-Site vpn 연결 생성


  • 앞서 만들어 둔 가상 프라이빗 게이트웨이와 고객 게이트 웨이를 입력한다.
  • 라우팅 옵션 : 정적
  • 정적 IP 접두사
    • 10.60.0.0/16 (IDC의 VPC CIDR을 입력한다)


생성이 완료되면 사용가능 상태가 되지만, 터널 모두 작동 중지 상태인 것을 확인할 수 있다.

터널을 UP 하기 위해서는 CGW에 구성을 따로 해주어야 한다.




라우팅테이블 설정


AWS VPC의 public subnet의 라우팅 테이블에서 라우팅 전파를 활성화 시켜주어야 한다.

중요한 점은, site-to-site vpn을 생성하기 전에 vgw 생성만 완료하고 라우팅 전파를 해주어야 하는 점이다.

만약 vpn 을 생성하고 라우팅 테이블을 설정하면 라우팅 테이블 설정이 변경되지 않으며 tunnel 이 올라오지 않는다.



라우팅 테이블의 idc vpc와 관련된 규칙은(맨 아래) 이후 자동으로 업데이트 된다.




구성 다운로드

본격적으로 터널을 구성하기 위한 작업이다.

site-to-site vpn 을 선택하여 맨 왼쪽 위의 구성 다운로드를 선택하여 다운받는다.


IDC VPC의 CGW에서 구성


구성 다운로드 파일로 CGW 설정


aws.conf 파일 생성


# vi /etc/ipsec.d/aws.conf
 
conn Tunnel1
     authby=secret
     auto=start
     left=%defaultroute
     leftid=52.42.3.179
     right=3.34.222.44
     type=tunnel
     ikelifetime=8h
     keylife=1h
     phase2alg=aes128-sha1;modp1024
     ike=aes128-sha1;modp1024
     # auth=esp
     keyingtries=%forever
     keyexchange=ike
     leftsubnet=<LOCAL NETWORK>
     rightsubnet=<REMOTE NETWORK>
     dpddelay=10
     dpdtimeout=30
     dpdaction=restart_by_peer



구성 파일을 다운로드하면 .txt 파일로 다운되어 안에 위와 같은 정보와 구성 방법이 안내 되어 있다.

먼저 openswan을 설치한 cgw ec2의 /etc/ipsec.d/ 폴더에 aws.conf 와 같이 뒤에 .conf 로 끝나는 설정 파일을 생성하여 위의 내용을 복사 붙여 넣기 한다.


‼️ 주의할 점

✅ leftid, rightid는 구성파일에 적혀있으므로 고대로 복사하면 되지만, leftsubnet, rightsubnet 은 입력해야한다.

  • leftsubnet : IDC VPC CIDR (10.60.0.0/16)
  • rightsubnet : AWS VPC CIDR (10.50.0.0/16) 즉, S2S VPN 을 생성한 곳.

✅ openswan 사용 시 구성 파일을 그대로 복붙하면 아마 터널이 작동되지 않을 것이다. 구성파일에서 "auth=esp" 이 부분을 제거해주면 된다.


aws.secrets 파일 생성


/etc/ipsec.d/aws.secrets
 
**52.42.3.179 3.34.222.44: PSK "hanna_tunnel1"**



.secrets 로 된 파일을 생성하여 구성 파일에 있는 Pre-shared key 값을 복사 붙여넣는다.


openswan(ipsec) 서비스 재시작


systemctl status ipsec.service
systemctl start ipsec.service
systemctl enabel ipsec.service



# ipsec status
 000 Total IPsec connections: loaded 1, active 1



위와 같이 출력되면 제대로 터널이 up 된 것이다.


[ec2-user@ip-10-60-0-134 ~]$ sudo netstat -nptul
 Active Internet connections (only servers)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
 tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      2477/rpcbind
 tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3094/sshd
 tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2892/master
 tcp6       0      0 :::111                  :::*                    LISTEN      2477/rpcbind
 tcp6       0      0 :::22                   :::*                    LISTEN      3094/sshd
 udp        0      0 127.0.0.1:4500          0.0.0.0:*                           17823/pluto
 udp        0      0 10.60.0.134:4500        0.0.0.0:*                           17823/pluto
 udp        0      0 0.0.0.0:951             0.0.0.0:*                           2477/rpcbind
 udp        0      0 127.0.0.1:500           0.0.0.0:*                           17823/pluto
 udp        0      0 10.60.0.134:500         0.0.0.0:*                           17823/pluto
 udp        0      0 0.0.0.0:68              0.0.0.0:*                           17406/dhclient
 udp        0      0 0.0.0.0:111             0.0.0.0:*                           2477/rpcbind
 udp        0      0 127.0.0.1:323           0.0.0.0:*                           2507/chronyd
 udp6       0      0 :::951                  :::*                                2477/rpcbind
 udp6       0      0 ::1:500                 :::*                                17823/pluto
 udp6       0      0 fe80::5b:2bff:fe6b::546 :::*                                17453/dhclient
 udp6       0      0 :::111                  :::*                                2477/rpcbind
 udp6       0      0 ::1:323                 :::*                                2507/chronyd



4500 port에서도 정상적으로 서비스가 실행되는 것을 확인할 수 있다.


결과 확인

터널이 정상적으로 올라온 것을 확인할 수 있다.

아티클이 유용했나요?

훌륭합니다!

피드백을 제공해 주셔서 감사합니다.

도움이 되지 못해 죄송합니다!

피드백을 제공해 주셔서 감사합니다.

아티클을 개선할 수 있는 방법을 알려주세요!

최소 하나의 이유를 선택하세요
CAPTCHA 확인이 필요합니다.

피드백 전송

소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.