실습
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
-
routing table 생성
-
서브넷 연결
- name : hanna-idc-private
- 10.50.0.0/16 → IDC CGW EC2의 eni
Internet Gateway 생성
IDC VPC의 Public subnet 전용 인터넷 게이트웨이를 생성한다.
-
인터넷 게이트웨이 생성
-
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에서도 정상적으로 서비스가 실행되는 것을 확인할 수 있다.
결과 확인
터널이 정상적으로 올라온 것을 확인할 수 있다.