Wisdom’s Cloud

[AWS] 2. Site-to-Site VPN을 사용하여 AWS와 IDC 간의 연결 (Openswan 활용) 본문

AWS/VPN

[AWS] 2. Site-to-Site VPN을 사용하여 AWS와 IDC 간의 연결 (Openswan 활용)

지혜로운지혜쓰 2022. 2. 23. 10:36

Site-to-Site VPN

  • 기본적으로 Amazon VPC로 시작하는 인스턴스는 자체(원격) 네트워크와 통신할 수 없습니다. 하지만 Site-to-Site VPN 연결을 생성하고 연결을 통해 트래픽을 전달하도록 라우팅을 구성하면, VPC에서 원격 네트워크에 대한 액세스를 활성화할 수 있습니다.

 

 

실습

구성 아키텍처

 

인스턴스 생성 및 ping 테스트

기본 네트워크 환경을 구성한 후, 진행합니다. idc-cgw 인스턴스는 ping 테스트를 위해 ICMP를 허용하고, Openswan 사용을 위해 UDP 4500 포트를 허용하여 생성합니다.
그리고 고객 게이트웨이 연결을 위해 idc-cgw 인스턴스에 EIP를 할당합니다.

 

idc-private와 aws-public, aws-private 인스턴스는 SSH와 ICMP만 허용하여 생성합니다.
인스턴스를 모두 생성했다면, VPN 연결 전 ping 테스트 결과는 위와 같습니다.

 

고객 게이트웨이 생성

VPC 콘솔에서 고객 게이트웨이를 선택한 후, 고객 게이트웨이 생성을 클릭합니다.
이름을 입력하고 정적 라우팅을 선택하여 idc-cgw의 EIP 주소를 입력한 후, 고객 게이트웨이 생성을 클릭합니다.

 

가상 프라이빗 게이트웨이 생성 및 연결

다시 VPC 콘솔에서 가상 프라이빗 게이트웨이를 선택한 후, 가상 프라이빗 게이트웨이 생성을 클릭합니다.
이름을 입력한 후, 가상 프라이빗 게이트웨이 생성을 클릭합니다.
생성된 가상 프라이빗 게이트웨이를 선택한 후, 작업에서 VPC에 연결을 클릭합니다.
aws-vpc를 선택한 후, 연결을 클릭합니다.

 

라우팅 구성

aws-public 서브넷의 라우팅 테이블을 선택한 후, 라우팅 전파 부분에서 라우팅 전파 편집을 클릭합니다.
전파 활성화에 체크한 후, 저장을 클릭합니다.

더보기

라우팅 전파 활성화는 Site-to-Site VPN 연결을 생성하기 전에 해야 합니다. 만약 생성하고 나서 라우팅 전파 활성화를 하면, 라우팅 테이블 설정이 변경되지 않으며 tunnel이 올라오지 않습니다.

 

Site-to-Site VPN 연결 생성

VPC 콘솔에서 사이트 간 VPN 연결을 선택한 후, VPN 연결 생성을 클릭합니다.
이름을 입력하고, 생성한 가상 프라이빗 게이트웨이와 고객 게이트웨이를 선택합니다. 그리고 정적 라우팅을 선택하여 idc-vpc의 CIDR을 입력한 후, 맨 아래 VPN 연결 생성을 클릭합니다.
5분 정도 기다리면 사용 가능 상태로 변경됩니다.
그리고 라우팅 전파 활성화를 했기 때문에 aws-public 서브넷의 라우팅 테이블이 자동으로 업데이트된 것을 확인할 수 있습니다.

 

고객 게이트웨이 디바이스 구성

생성된 VPN 연결을 선택한 후, 구성 다운로드를 클릭합니다.
고객 게이트웨이 디바이스로 Openswan을 사용할 것이기 때문에 공급업체를 Openswan으로 선택한 후, 다운로드를 클릭합니다.

더보기

idc-cgw 인스턴스에 접속하여 Openswan을 설치하고, 다운로드 받은 구성 파일로 구성해 보겠습니다.

 

# Openswan 설치

sudo su -

yum install openswan

 

# /etc/sysctl.conf 파일에 내용 추가

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

 

# network 재시작

systemctl restart netwrok

 

# aws.conf 파일 생성 후, 다운로드한 구성 파일의 4번 내용 붙여넣기

# auth=esp는 반드시 주석 처리, leftsubnet은 idc-vpc의 CIDR, rightsubnet은 aws-vpc의 CIDR

vi /etc/ipsec.d/aws.conf

conn Tunnel1

          authby=secret

          auto=start

          left=%defaultroute

          leftid=18.235.74.130

          right=3.37.137.92

          type=tunnel

          ikelifetime=8h

          keylife=1h

          phase2alg=aes128-sha1;modp1024

          ike=aes128-sha1;modp1024

          # auth=esp

          keyingtries=%forever

          keyexchange=ike

          leftsubnet=10.0.0.0/16

          rightsubnet=11.0.0.0/16

          dpddelay=10

          dpdtimeout=30

          dpdaction=restart_by_peer

 

# aws.secrets 파일 생성 후, 다운로드한 구성 파일의 5번 내용 붙여넣기

vi /etc/ipsec.d/aws.secrets

18.235.74.130 3.37.137.92: PSK "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

 

# ipsec(Openswan) 서비스 재시작

systemctl start ipsec.service

systemctl enable ipsec.service

systemctl status ipsec.service

 

# 터널 up 확인 => "Total IPsec connections: loaded 1, active 1"이 출력되면 성공

ipsec status

 

터널 세부 정보를 확인해보면, 구성한 Tunnel 1이 작동 상태로 변경된 것을 확인할 수 있습니다.

더보기

AWS에서는 VPN 생성 시 고가용성을 위해 터널을 2개 생성합니다. 실제 운영 환경에서 1개의 터널에 문제가 발생했을 때를 대비하려면, 나머지 1개의 터널도 연결하여 운영하는 것이 좋기 때문에 Tunnel 2도 구성해 보겠습니다.

 

# aws.conf 파일에서 Tunnel 2의 설정 추가 후, overlapip=yes 설정 추가

vi /etc/ipsec.d/aws.conf

conn Tunnel1

          authby=secret

          auto=start

          left=%defaultroute

          leftid=18.235.74.130

          right=3.37.137.92

          type=tunnel

          ikelifetime=8h

          keylife=1h

          phase2alg=aes128-sha1;modp1024

          ike=aes128-sha1;modp1024

          # auth=esp

          keyingtries=%forever

          keyexchange=ike

          leftsubnet=10.0.0.0/16

          rightsubnet=11.0.0.0/16

          dpddelay=10

          dpdtimeout=30

          dpdaction=restart_by_peer

          overlapip=yes

conn Tunnel2

          authby=secret

          auto=start

          left=%defaultroute

          leftid=18.235.74.130

          right=13.124.97.156

          type=tunnel

          ikelifetime=8h

          keylife=1h

          phase2alg=aes128-sha1;modp1024

          ike=aes128-sha1;modp1024

          # auth=esp

          keyingtries=%forever

          keyexchange=ike

          leftsubnet=10.0.0.0/16

          rightsubnet=11.0.0.0/16

          dpddelay=10

          dpdtimeout=30

          dpdaction=restart_by_peer

          overlapip=yes

 

# aws.secrets 파일에서 Tunnel 2의 설정 추가

vi /etc/ipsec.d/aws.secrets

18.235.74.130 3.37.137.92: PSK "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

18.235.74.130 13.124.97.156: PSK "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"

 

# ipsec(Openswan) 서비스 재시작

systemctl restart ipsec.service

 

# 터널 up 확인 => "Total IPsec connections: loaded 2, active 2"이 출력되면 성공

ipsec status

 

다시 터널 세부 정보를 확인해보면, Tunnel 2도 작동 상태로 변경된 것을 확인할 수 있습니다.

 

ping 테스트

따라서 VPN 연결 후 ping 테스트 결과는 위와 같으며, Site-to-Site VPN 연결을 통해 IDC에서 AWS로 접근할 수 있게 됩니다.