StrongSwan으로 Cloud끼리 VPN 설정 해보기
/etc/strongswan/ipsec.confLinux는 IPSec VPN을 위해서 기본적으로 OpenSwan 또는 StrongSwan 패키지를 지원한다.
Windows도 RRAS를 통해 자체적으로 지원한다.
http://docs.aws.amazon.com/ko_kr/AmazonVPC/latest/NetworkAdminGuide/customer-gateway-windows-2012.html
http://techgenix.com/configure-vpn-windows-server-2012-r2/
아무래도 Linux가 설정이나 트러블 슈팅하기가 더 쉽다. Linux 머신만 있으면 VPN장비 부럽지 않다.
고급 설정이 좀 더 가능한 StrongSwan을 사용해보자. (물론 여기서 고급기능을 쓰지는 않지만...)
사실 AWS, Azure, Softlayer, Alibaba 아무관계가 없다. 모두 IPSec VPN 서비스가 있지만, 가끔 이렇게 직접 구축이 필요할 때가 있다.
다만 Softlayer는 Router Roll은 vyatta에 한정되어 있으므로, 서버에 VPN을 구축할 경우
모든 서버의 라우팅에 VPN서버를 별도 추가 해주어야 하는 불편함은 있다. (하지만, 그냥 하면 되므로 불편한거지 어려운 부분은 아니다)
vyatta을 쓰면 vyatta에서 모두 지원하므로 이렇게 쓸일이 없지만, vyatta는 비싸므로 서버만 쓰는 경우를 예로 든다.
CentOS7 기준으로 설명한다.
설정 편의를 위해 PSK(PreSharedKey)로 설정한다. 네트워크 정보는 아래를 예시로 했다.
|
VPN 서버 Public IP |
Network 사설 대역 |
A쪽 Network |
169.11.22.33 |
10.100.50.0/24 |
B쪽 Network |
211.66.77.88 |
192.168.20.0/24 |
일단 ip_forward를 활성화한다. 그리고 strongswan을 설치 및 자동 실행 설정을 한다.
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.d/ip_forward.conf
sysctl -p /etc/sysctl.d/ip_forward.conf
cat /proc/sys/net/ipv4/ip_forward
yum install -y epel-release
yum install -y strongswan
systemctl enable strongswan
systemctl start strongswan
설정은 ipsec.conf 만 해주면 되고, PSK는 ipsec.secret에 적어주면 끝이다.
아래 설정은 A쪽 설정이다, B쪽은 left와 right쪽 정보만 반대로 해주면 된다.
/etc/strongswan/ipsec.conf
# ipsec.conf
config setup
strictcrlpolicy=no
uniqueids=no
charondebug="cfg 2, ike 2, knl 2"
# charondebug="dmn 2, mgr 2, ike 2, chd 2, job 2, cfg 2, knl 2, net 2, enc 2, lib 2"
conn %default
ikelifetime=14400
keylife=3600
keyexchange=ikev2
conn sample
authby=secret
auto=start
type=tunnel
leftauth=psk
rightauth=psk
left=169.11.22.33
right=211.66.77.88
leftsubnet=10.100.50.0/24
rightsubnet=192.168.20.0/24
ike=aes256-sha256-modp2048
esp=aes256-sha256-modp2048
/etc/strongswan/ipsec.secret
# ipsec.secret
169.11.22.33 : PSK "Cloud1004@Test"
211.66.77.88 : PSK "Cloud1004@Test"
양단 설정이 다 되었으면 재 시작 하고 터널 상태를 확인한다.
strongswan restart
strongswan statusall
잘 안될경우 로그를 확인한다. 로그 레벨과 파트는 ipsec.conf에서 charondebug 부분을 참조 해서 변경한다. 경우에 따라 tcpdump 를 볼 필요성도 있다.
tail -f /var/log/message /var/log/secure
AWS/Alibaba는 라우팅 설정에서 상대편 대역은 해당 서버로 가게 끔 추가 해 준다.
IBM Cloud는 vyatta를 안쓰면 라우팅 설정을 못 바꾸므로 연결되는 모든 서버에서 각각 라우팅을 추가 해주어야 한다.
(VPN 장비의 사설 IP가 10.100.50.100 이라고 할 때)
리부팅 되도 유지되도록 설정한다.
Windwos의 경우 route add 명령에 -p 옵션만 주면 영구 설정이 되며 재부팅시 유지된다.
실제 다음 레지스트리에 기록된다.
HKEY_LOCAL_MACHINE\SYSTEM\CURRENTCONTROLSET\SERVICES\TCPIP\PARAMETERS\PERSISTENTROUTES
route -p add 10.100.50.0 MASK 255.255.255.0 10.100.50.100 METRIC 1
route print
Linux는 /etc/sysconfig/network-scripts/route-eth0 넣고
systemctl restart network 해주면 된다.
echo "10.100.50.0/24 via 10.100.50.100" >> /etc/sysconfig/network-scripts/route-eth0
systemctl restart network
ip route
단순히 테스트 할 때는 아래 처럼 하면 된다.
Windows
route add 10.100.50.0 MASK 255.255.255.0 10.100.50.100 METRIC 1
route print
Linux
ip route add 10.100.50.0/24 via 10.100.50.100
ip route