Oracle Cloud에 IPSec IKEV2 VPN (strongSwan) 설치 및 설정하기

지난 Oracle Cloud 가입 및 인스턴스 생성 글에 따라 VM 인스턴스로 전달되는 포트는 모드 열려 있다고 가정하고 설치하겠습니다.

기본적인 목표는 중국에서 사용하기 위한 VPN을 클라우드 서버에 설치하는 것이므로 가능하면 따라하기 쉽도록 내용을 적어보겠습니다. (네트워크 관련해서 제가 지식이 별로 없어서 틀린 부분이 있을 수도 있으니, 그런 부분은 피드백 부탁드립니다.)

strongSwan 설치


우선 이전 포스팅에서 인스턴스에 설정한 SSH 키 및 IP 주소를 이용하여 SSH 클라이언트로 서버에 로그인 합니다.
(Ubuntu를 OS로 설정하신 경우는 사용자 명에 "ubuntu"를 적으셔야 하고, CentOS를 설정하신 경우는 "opc"를 적으시면 됩니다.)

저는 ubuntu로 설치하였으므로 아래와 같은 프롬프트가 표시됩니다.


sudo su

명령어로 관리자 권한을 획득합니다. (프롬프트 표시가 $에서 #으로 바뀝니다.)

TUN(네트워크 터널) 과 PPP(Point to Point Protocol)가 켜져있는지 확인하기 위해 아래 명령어로 확인합니다.

cat /dev/net/tun

cat /dev/ppp

아래와 같은 메시지가 떠야하며, 만약 위 메시지가 실행 중이면 VPS업체에 조정을 해달라고 요청해야 합니다.


Github에 올라와 있는 한번에 설치 및 인증서 생성까지 마칠 수 있는 스크립트로 설치를 할 예정이며, 해당 스크립트는 ubuntu14.04 이상, Debian 7이상, CentOS 7 이상 버전에서 사용 가능하다고 합니다.

스크립트 실행 과정에서 VPS의 가상화 종류를 묻는 부분이 있어 아래 명령어로 시스템의 가상화 종류를 확인해 둡니다.

hostnamectl status

현재 사용중인 오라클 인스턴스의 경우 아래와 같이 표시됩니다.
Virtualization 항목을 기억해 두시기 바랍니다.


아래 명령어로 스크립트를 실행합니다.
(아래 스크립트는 Github ID quericy님의 스크립트를 fork하여 최신 버전 strongSwan을 설치하도록 수정한 버전입니다.)

wget --no-check-certificate https://raw.githubusercontent.com/kikunae77/one-key-ikev2-vpn/master/one-key-ikev2.sh && chmod +x one-key-ikev2.sh && bash one-key-ikev2.sh

관련 라이브러리들이 쭉 설치되고 난 뒤 아래와 같이 서버의 시스템 가상화 종류를 묻는 프롬프트가 표시됩니다.


위에서 확인한 가상화 종류 및 인증서에 사용할 IP(자동으로 본인 VPS에 설정된 IP가 기본값으로 사용됩니다. 또는 이 IP와 연결된 자신이 보유한 도메인을 입력할 수도 있습니다.), 인증서 발행을 위한 발행기관 관련 설정 사항을 묻는 내용이 이어집니다.
VPS의 가상화 종류에 대한 내용만 정확히 입력하면 나머지는 엔터만 눌러서 기본값으로 입력해도 무방합니다.

위 사항들을 모두 입력했으면 입력한 내용을 바탕으로 StrongSwan을 다운로드하여 설치 및 인증서 발행 작업이 진행됩니다.

strongSwan을 다운받고 컴파일 및 빌드하는데 시간이 꽤 소요되므로 잠시 여유를 가지고 기다리면 아래와 같은 화면이 뜹니다.


pkcs12인증서에 대한 암호를 물어보면 그냥 엔터를 입력하여 넘어가셔도 됩니다.


SNAT를 고정 아이피 상황 하에서 사용하면 속도가 빠르다고 하는데, Ubuntu에서 테스트 해보니 SNAT을 선택하면 VPN을 경유하는 패킷을 외부로 Forwarding이 잘 안되서 일단 엔터를 쳐서 SNAT을 사용하지 않는 것으로 선택합니다.


iptables 대신 firewall을 사용할 것인지 묻는 질문에도 엔터를 눌러 기본값인 No를 선택하고, 연결된 네트워크 인터페이스에는 3번째 줄의 scope global에 연결된 인터페이스 이름 ens3를 입력합니다.

여기까지 입력하면 기본적인 설치는 완료되고 아래와 같은 메시지가 표시됩니다.


기본으로 설정된 사용자명과 암호 등을 표시해주며, 사용자 암호를 변경하려면 어느 파일을 변경해야 하는지, 클라이언트에 설치해야할 인증서 위치를 알려줍니다.

사용자명과 암호를 변경하기 위해 아래 명령어를 입력합니다.

vi /usr/local/etc/ipsec.secrets

혹시 vi 명령이 없다고 나오면 아래 명령어로 설치한 후 다시 위 명령어를 입력합니다.

apt-get install vim

그러면 아래와 같은 화면이 표시되며, 그 중에서 기본 사용자명과 암호 부분을 수정합니다.
사용자명과 암호는 엔터로 구분하여 여러개를 설정할 수 있습니다.
vi를 사용할 줄 모르시는 분들은 키보드에서 i를 누른 후(insert 모드) 커서를 이동하면서 수정하시고, 수정이 완료되면 esc키를 누르신 후(command 모드) :wq를 입력하면 현재 파일이 저장(write)되고 vi가 종료(quit)됩니다.


사용자명과 암호를 수정한 경우 strongSwan을 다시 시작해줘야 변경된 사용자명과 암호가 반영되므로 아래와 같은 명령어로 다시 실행해 줍니다.

bash /usr/local/sbin/ipsec restart

Oracle Cloud의 Ubuntu에 초기 설정된 iptables의 규칙을 모두 지워야 VPN이 제대로 작동하므로 아래 명령어로 기존에 입력된 iptables의 규칙을 모두 삭제합니다.

iptables -F

인스턴스를 재부팅하거나 하면 기존에 설정한 iptables 규칙이 모두 사라지고 strongSwan도 자동으로 재시작되지 않으므로 혹시 재부팅 하신 경우에는, 아래 명령어를 차례대로 입력하여 iptables 규칙 및 strongSwan을 재시작해 주셔야 합니다. (필요한 경우 /etc/rc.local에 아래 명령들을 추가하시면 재부팅 할 때마다 명령들이 자동으로 실행됩니다.)

iptables -F
iptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o ens3 -m policy --dir out --pol ipsec -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o ens3 -j MASQUERADE
bash /usr/local/sbin/ipsec start

서버에 연결을 하려면 생성된 사용자 인증서를 받아서 클라이언트에 설치해야 합니다.

사용자 인증서는 /home/ubuntu/my_key/ca.cert.pem 입니다.
이 파일을 받기 위해 현재 접속한 SSH 클라이언트가 Xshell인 경우에는 메뉴에서 창->새 파일 전송(또는 단축키 Ctrl+Alt+F)을 누르면 팝업이 뜨면서 Xftp를 받겠냐고 묻는데, 취소를 누르시면 됩니다. 그러면 새 탭이 뜨면서 sftp로 연결됩니다.

get /home/ubuntu/my_key/ca.cert.pem

sftp로 연결된 탭에서 위 명령어를 입력하면 파일이 아래 화면과 같이 사용자 컴퓨터의 "문서"폴더 하위의 지정 경로에 다운로드 됩니다.


다운로드가 완료되면 sftp로 연결된 새 탭은 닫으셔도 됩니다.

SSH 클라이언트로 Xshell을 사용하지 않으시는 경우 WinSCP나 Filezilla 등 scp나 sftp 연결이가능한 별도의 클라이언트를 설치하고 서버에 연결한 다음 위 지정 위치의 인증서 파일을 다운로드 받으시면 됩니다.

사용자 인증서가 설치된 위치를 기억하시고 다음과 같이 클라이언트를 설정합니다.

윈도우 클라이언트 설정


윈도우 10 기준으로 설명드립니다.

시작키+R을 눌러 실행창에서 mmc를 실행하거나 시작키+S를 눌러 검색창에서 mmc를 찾아서 실행합니다.


MMC(Microsoft Management Console)이 실행되면 "파일"->"스냅인 추가/제거"를 눌러서 (단축키 Ctrl+M) 스냅인 추가/제거 창을 띄웁니다.


좌측 패널에서 "인증서"를 선택하고 중간의 "추가" 버튼을 클릭합니다.


새로운 팝업이 뜨면 "컴퓨터 계정"을 선택하고 "다음" 버튼을 클릭합니다.


다음 화면에서 "로컬 컴퓨터"를 선택하고 "마침" 버튼을 클릭합니다.


스냅인 추가/제거 창의 "확인"을 누르고 난 뒤 MMC창의 좌측 패널에서 "인증서(로컬 컴퓨터)"->"개인용"->"인증서" 폴더를 선택합니다.


메뉴에서 "동작"->"모든 작업"->"가져오기"를 선택하여 "인증서 가져오기 마법사"를 실행합니다.


"다음" 버튼을 클릭하여 넘어갑니다.


다운로드 받은 인증서를 찾아보기 버튼으로 선택하고 다음으로 넘어갑니다.


인증서를 "신뢰할 수 있는 루트 인증 기관" 위치에 저장하는 것으로 설정하고 다음으로 넘어갑니다.


내용을 확인하고 "마침"을 눌러서 확인하고 MMC 콘솔의 신뢰할 수 있는 루트 인증 기관의 인증서 목록에 위 인증서가 추가된 것이 확인되면 MMC 콘솔을 닫습니다. 콘솔의 설정은 저장하지 않으셔도 상관없습니다.

위 방법이 번거로우시면 다운받은 인증서의 확장자를 cer로 바꾸시고(ex. ca.cer) 탐색기에서 더블 클릭하시면 인증서 관련 내용이 뜨고, 중간에 있는 인증서 설치 버튼을 누른 후 위에서 알려드린 방법과 비슷하게 저장소 위치는 로컬컴퓨터, 인증서 저장 위치는 신뢰할 수 있는 루트 인증 기관으로 선택하고 설치하셔도 됩니다.

인증서가 설치되었으면 "시작키"->"설정"->"네트워크 및 인터넷"->"VPN"을 누르시던가 시작키+S->vpn 입력한 후 검색결과에서 "VPN 설정"을 눌러서 VPN을 추가하기 위한 설정 페이지로 이동합니다.

"VPN 연결 추가" 버튼을 누른 후 팝업창에서 아래와 같이 위에서 구성한 서버의 주소, 사용자명, 암호를 입력하여 연결 설정을 합니다.

윈도우 10의 경우 위와 같이 설정한 후 다음과 같은 작업을 해줘야 VPN이 제대로 작동합니다. (윈도우 10 이하는 아래 내용을 따로 작업해 주지 않아도 자동으로 설정이 된다고 합니다.) VPN 설정 창의 오른쪽에 있는 관련 설정 중 "어댑터 옵션 변경"을 선택하면 새로운 창이 뜨면서 컴퓨터가 사용할 수 있는 네트워크 어댑터 목록이 뜹니다. 그 중에서 방금 만든 VPN 연결을 오른 클릭하여 속성에 들어갑니다.


네트워킹 탭에서 "인터넷 프로토콜 버전4(TCP/IPv4)" 항목을 더블 클릭하여 설정 팝업을 띄웁니다.


팝업에서 우측 하단의 "고급" 버튼을 누른 후 위와 같이 "원격 네트워크에 기본 게이트웨이 사용" 항목에 체크를 해주어야 VPN에 연결된 후 해당 VPN을 통해서 데이터를 주고 받습니다.

위와 같이 설정이 끝났으면 VPN 설정에서 연결을 눌러서 제대로 연결이 되는지 확인해 보면 됩니다.

클라이언트에서 VPN 연결이 된 경우 서버에서 아래 명령어로 현재 연결된 보안 터널 숫자 및 주고 받은 데이터량 등을 볼 수 있습니다.

연결 수만 확인

bash /usr/local/sbin/ipsec status

상세 정보 확인

bash /usr/local/sbin/ipsec statusall

안드로이드 클라이언트 설정


strongSwan의 안드로이드 클라이언트는 구글 Playstore에서 설치하거나 Playstore 사용이 불가능한 경우 strongSwan 다운로드 페이지에서 apk를 다운받아 설치합니다.

서버에서 내려받았던 ca.cert.pem 인증서 파일을 안드로이드 단말기로 옮겨놓습니다. (카톡 첨부파일로 보내거나 컴퓨터와 USB연결하여 넘기시면 됩니다.)

안드로이드 단말기에서 strongSwan을 실행하면 아래와 같은 화면이 뜹니다.


우측 상단의 메뉴 버튼을 누르고


CA Certificates를 누른 후,


다시 우측 상단 메뉴 버튼을 누르고 Import certificate를 선택합니다.
위에서 안드로이드 단말기에 저장한 인증서 파일을 선택하면


위와 같이 인증서를 불러올지 확인하는 팝업이 뜨므로 Import Certificate를 눌러 인증서를 불러옵니다.


불러온 인증서는 imported 탭에 표시됩니다.
이제 서버와의 연결을 설정하기 위해 다시 초기 화면으로 돌아옵니다.


앱 초기 화면에서 ADD VPN PROFILE을 눌러 연결 정보 입력 화면으로 갑니다.


위와 같이 본인의 서버 설정 내용을 입력하고 상단의 SAVE를 누르면 서버 연결 정보가 저장됩니다.


목록에 추가된 서버를 선택하면


위와 같이 VPN 연결을 허용할지 팝업창이 뜨므로 확인을 눌러주면 됩니다.


연결이 되면 위와 같이 연결되었다고 뜨고, 상태바에도 열쇠 모양으로 VPN 연결이 되었다는 표시가 뜹니다.


 VPN 연결을 끊을 때는 앱 화면의 연결된 서버 정보에서 Disconnect를 누르던가, 일반적인 VPN 연결을 끊을 때와 같이 상태바를 내려 연결된 VPN 알림에서 Disconnect를 눌러서 끊을 수 있습니다.


제가 아이폰이나 아이패드는 가지고 있지 않은 관계로 클라이언트 설정 방법은 여기서 마치겠습니다.
iOS 및 Mac OS에서의 연결 설정은 strongSwan 위키 페이지를 참고하시기 바랍니다.

댓글

이 블로그의 인기 게시물

OpenWrt 공유기에 Wireguard 설정하기

Cloudflare DNS 서비스를 통해 Let's Encrypt 인증서 발급 및 갱신 자동화하고 v2-ui에 http+tls 위장 적용하기

샤오미 공유기 3세대(Mi Router R3G)에 OpenWrt 올리기