1. OpenVPN Server란?
OpenVPN은 가상사설망(VPN: Virtual Private Network)을 구현하는 프로토콜 및 그 응용프로그램입니다. VPN은 점 대 점으로 또는 사이트 대 사이트로 두 원격지를 안전하게(암호화하여) 이어주는 역할을 합니다. 예를 들어 모바일에서 OpenVPN 서버가 설치된 홈네트워크에 연결할 수 있으며, 이 경우 모바일 장치는 마치 홈네트워크 안에 있는 것처럼 됩니다.
2. 왜 설치하나?
- 언제 어디서나 홈네트워크에 접속할 수 있음. 언제 어디서나 집에 있는 것과 같습니다. NAS에 접속해서 파일을 업로드하거나 다운로드할 수 있고, transmission을 설치하셨으면 토렌토도 조작할 수 있습니다. 데이터만 충분하면 NAS에 있는 동영상도 집에서처럼 볼 수 있습니다.
- iptime 공유기도 몇년전부터 이러한 vpn server 기능을 제공하고 있습니다. 제 공유기의 경우 pptp 방식의 vpn 서버 기능만 제공되는데, 접속이 자주 끊기고 불안정합니다. 그리고 보안측면에서도 취약하다는 얘기가 있습니다. 하지만, 이 OpenVPN 서버는 매우 안정적입니다. 보안도 뛰어납니다. 한마디로 좋습니다.
3. 준비사항 : DDNS 및 포트 개방
많은 공유기에 DDNS 기능을 내장하고 있습니다. 제가 가진 iptime 공유기를 기준으로 간단하게 설명합니다.
(1) DDNS 설정하기
공유기에 접속하면 DDNS를 설정할 수 있는 메뉴가 있습니다. iptime 공유기는 특수기능 아래에 있습니다. DDNS는 인터넷 접속시 제공된 유동 ip를 도메인이름으로 연결지어주는 서비스 입니다. 공유기가 인터넷에 접속할 때 유동 ip가 변경되면 그 ip에 맞추어 도메인을 갱신해 줍니다. 이 도메인만 알면 외부에서 홈네트워크로 접속할 수 있습니다.
(2) 포트포워드 설정하기
openvpn의 포트는 1194입니다. DDNS를 통해 공유기까지 도달했다고 해도 내부망에 있는 서비스까지는 접속하려면 포트를 개방하고 나스(컨테이너)까지 연결해주어야 합니다. 이것이 바로 포트포워드입니다. 공유기의 1194로 도달한 패킷을 컨테이너까지 전달해주는 역할을 합니다. 내부 IP는 NAS의 ip를 적어주면 됩니다.
4. NAS에 OpenVPN 설치하기
(1) 이미지 다운받고 초기화를 위한 컨테이너 생성하기
도커->레지스트리에서 kylemanna/openvpn을 다운로드 합니다. 이미지에서 kylemanna/openvpn을 "실행"하거나 더블클릭하여 컨테이너를 생성하는 창을 엽니다. "고급 설정"으로 들어갑니다.
1) "볼륨"을 추가합니다. openvpn 인증서 등 데이터가 담길 폴더를 만들어 줍니다. /docker/openvpn 폴더를 만들었다고 가정하겠습니다. "볼륨"에서 "폴더 추가"로 이 폴더를 /etc/openvpn 으로 연결해줍니다.
2) "환경"에서 Entrypoint 로 /bin/bash 를 지정합니다. "적용"을 눌러 "고급 설정"을 마쳐줍니다.
3) "기능 구성"에서 NET_ADMIN을 체크해줍니다.
이러한 설정이 끝나면 다음->완료를 눌러 컨테이너를 생성하고 실행합니다.
(2) OpenVPN 서버 설정하기
서버 설정파일과 인증서 등을 생성하고 할 차례입니다. 컨테이너를 더블클릭하면서 세부사항을 볼 수 있습니다. "터미널" 탭으로 들어갑니다. 위에서 Entrypoint로 bash 쉘을 실행하도록 했으므로 터미널이 작동할 것입니다.
1) 터미널에서 아래 명령을 실행합니다.
ovpn_genconfig -u udp://(DDNS 이름) /* 예를 들어 위에서 설정한 DDNS 이름이 korea.iptime.org 라면 ovpn_genconfig -u udp://korea.iptime.org 로 입력하시면 됩니다. */
기본적인 설정파일이 /etc/openvpn 에 생성됩니다.
2) 이제 서버 인증서를 생성할 차례입니다. 터미널에서 다음 명령을 입력합니다.
ovpn_initpki
여기서는 PKI를 생성하면서 passphrase 를 물어보고 확인하는 과정이 있습니다. 처음 두 번은 비밀번호(passphrase)를 생성하고 확인합니다. 그리고 다음에는 Common Name 을 물어보는데, 디폴트 값을 쓰도록 그냥 엔터를 눌러 넘어가도 괜찮습니다. 다음으로 passphrase를 두 번 더 물어보는데, 위에서 생성한 비밀번호를 입력하여 넘어가면 종료됩니다.
3) 서버에 접속할 수 있는 클라이언트 생성하기
서버에 접속할 수 있는 클라이언트를 생성하는 차례입니다.
easyrsa build-client-full (사용자명) /* 사용자명이 korean 이면 easyrsa build-client-full korean 으로 입력합니다. */
실행과정에서 사용자의 비밀번호를 생성하고 확인합니다. 사용자 비밀번호를 생성하면 이 사용자가 접속할 때마다 비밀번호를 입력해 줘야 합니다. 다음으로 사용자를 생성하기 위한 권한이 있는지 확인하기 위해 윗 단계에서 만들 CA key passphrase를 입력하는 단계가 있습니다. 이제 사용자가 생성됩니다.
4) 클라이언트용 ovpn 파일 생성
openvpn 클라이언트에서 사용할 ovpn 파일을 생성합니다.
ovpn_getclient (사용자명) > /etc/openvpn/(사용자명).ovpn /* 사용자명이 korean 이면 ovpn_getclient korean > /etc/openvpn/korean.ovpn
다 됐습니다. 눈치채셨겠지만 NAS에서 docker/openvpn 폴더에 가면 (사용자명).ovpn 파일이 생성되어 있을 것입니다. 이 파일을 유출되지 않도록 유의하세요. 이제 exit 를 입력하여 빠져나오고 컨데이터를 종료합니다.
5) 초기화용 컨테이너 삭제
컨데이너를 삭제합니다.
(3) 서버 실행용 컨테이널 생성/실행
실행을 위한 컨테이너를 생성합니다. 위에 "(1) 이미지 다운받고 초기화를 위한 컨테이너 생성하기" 과정과 같이 컨테이너를 생성합니다. 다만, 이번에는 "환경"의 Entrypoint 는 수정하지 않고 그대로 둡니다(기본값이 ovpn_run입니다). 컨테이너가 시행되면 다 된 겁니다.
5. 클라이언트 설정
PC도 가능하고 안드로이드나 아이폰도(아마) 가능할 겁니다. 안드로이드를 기준으로 설명합니다. 플레이 스토어에서 OpenVPN Connect 를 설치합니다. OpenVPN Connect를 실행하고 +를 눌러서 위에서 생성한 ovpn 파일을 임포트 하면 됩니다. 그리고 단추를 눌러서 연결하거나 연결을 해제하면 됩니다.
참고자료 : https://www.reddit.com/r/synology/comments/74te0y/howto_deploy_openvpn_on_synology_using_docker/
이 글은 제 허락 없이 퍼 가시거나 복제하시면 안됩니다. 질문은 제가 아는 한도내에서 답변드리겠습니다.
혹시 wireguard 서버 만드는 방법도 아시나요?
/Vollago
/Vollago
근데 시놀은 wireguard dkms도 지원을 안하나보네요. 좀.. 별로네요
https://www.clien.net/service/board/cm_nas/15165954?od=T31&po=0&category=&groupCd=CLIEN
리스트에 없는 모델도 설정이 가능합니다.(저는 1813+ 인데, 리스트에 없어서 713+ 모델과 호환되는 cedarview 로 설치가 잘되었습니다. )