먼저...OpenVPN 을 설치하게 된 이유부터 밝힙니다.
회사에서 자체적인 인터넷 회선을 사용하지 않고 공동으로 사용하는 회선을 사용하고 있습니다. 그래서 원하는 포트를 마음대로 포트 포워딩 하기 힘듭니다.
그리고 망 관리자가 VPN 도 열어주기 쉽지 않은 상황입니다.
회선의 포트 포워딩도 A 회사는 14001~14009 번까지, B 회사는 14002~14009 까지...이런 식으로 일괄적으로 IP 하나를 정해서 회사에 부여를 해주더군요. 그런데 사용하는 Couchbase 는 포트를 임의로 바꾸면 컨트롤 하기 어렵습니다.
결론은??? 포트를 하나만 이용하는 OpenVPN 이 해결책입니다. 물론 SSH Tunneling 도 괜찮은 방법이지만 사용상의 까다로움은 OpenVPN 쪽이 덜하다고 생각합니다. 물론 구축은???
어쨌든...
회사에서 이미 서버를 Windows...그것도 Windows 7 으로 깔아놓은 상황이라(도대체 전임자는 무슨 생각인건지) 몇 가지 문제점과 그에 따른 해결을 모색하면서 기존에 오해했던 부분들도 바로 잡을 수 있었습니다.
1. 설치
www.openvpn.net 에 접속합니다. Community 에 들어가 Download 메뉴에 들어갑니다. 지금 이 글을 쓰는 시점에선 OpenVPN 2.3.5 -- released on 2014.10.28 버전이 가장최신 버전입니다. 본인의 OS 에 맞는 설치 파일을 다운로드 받습니다.
여기서 잠깐...서버와 클라이언트가 같이 있으므로 접속 대상자에게도 이 파일을 제공해야 합니다.
종래의 *NIX 에는 갖가지 패키지 시스템(ports, pkgsrc, apt-get, yum 등)을 통해 의존성이 있는 프로그램을 설치해주지만, 윈도우즈의 경우 중간에 선택하여 설치할 수 있습니다. 중요한 건 TAP 이라는 네트워크 드라이버를 설치해주는데, 이건 설치를 해야 한다는 것입니다.
설치를 마치면 보통 C:\Program Files\OpenVPN 에 프로그램이 설치됩니다. 하위 디렉토리인 sample-config 디렉토리로 이동하면 sample 이 3 개 존재합니다. 당연히 Server 구축 시에는 server.ovpn 을 이용해야 합니다. 이 파일을 OpenVPN 디렉토리 하위의 config 디렉토리에 복사합니다.
그리고 설정 파일을 텍스트 편집기(저는 Editplus 정식 구매자로, Editplus 을 애용합니다)로 열어서 편집합니다. 주의할 것은 Administrator 로 접속하지 않았다면 텍스트 편집기를 열 때 관리자 권한으로 열어서 설정 파일을 열어야 합니다.
주의깊게 봐야 될 옵션은 다음과 같습니다.
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 10.0.0.0 255.255.255.0"
push "redirect-gateway"
push "dhcp-option DNS 168.126.63.1"
client-to-client
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
사실 위 옵션만 있으면 모든게 끝납니다.
port 와 proto, dev 는 각각 OpenVPN 의 포트, 프로토콜, 방식입니다. 포트는 외부에서 접근 가능하게 열려있는 포트, 포로토콜은 말 그대로 프로토콜입니다. 방식의 경우 tun 와 tap 이 있는데, 국내 문서는 대부분 tun 으로 되어 있습니다. tun 은 공유기와 같이 해당 머신에서 다시 NAT 을 이용해서 가상의 IP 대역을 만들어 분배를 하는 방식입니다. 상단에 DHCP 가 존재하고 IP 발급이 자유롭다면 tap 형식으로 바꾼 뒤 bridge 방식으로 설정하면 머신과 동일한 레벨에서 IP 을 받아 사용할 수 있습니다. 하지만, 이 경우 네트워크 연결(제어판\네트워크 및 인터넷\네트워크 연결)에서 기존의 랜카드와 새롭게 생긴 TAP(로컬 영역 연결로 생성되며 TAP-Windows Adapter V9 으로 장치 이름이 나타납니다) 장비와 bridge 을 미리 생성해야합니다. 이 때 원격에서 작업하게 되면 네트워크 연결이 끊겨서 재접속이 안되니 주의를 해야 합니다. tun 은 기존의 랜카드로 들어가 인터넷 연결 공유(속성>공유>인터넷 연결 공유)을 체크하고 홈 네트워킹 연결에서 TAP 장치를 선택해주면 됩니다.
tun 으로 설정할 것이기 때문에 아래의 server 옵션과 push 옵션이 중요합니다.
server 옵션은 새롭게 생성할 가상 IP 의 대역입니다. 공유기를 써보신 분들은 아시겠지만 공유기 내에서는 외부의 IP 하나를 가상의 IP 여러개가 공유해서 쓰는 방식입니다.
그래서 저렇게 새로운 가상 IP 영역이 필요한데, 기본값은 10.8.0.x 를 사용하도록 되어 있습니다. 본인이 평소 쓰는 대역과 다르게 해주는게 좋습니다.
그리고 push 에서 route 부분은 외부의 인터넷의 대역을 적어줘야 합니다. 이 값은 기존의 랜카드의 자세히 보기를 통해 확인할 수 있는데, 제가 있는 곳은 10.0.0.x 형태로 아이피를 발급하고 Subnet Mask 는 255.255.255.0 을 제공해주기 때문에 위와 같이 적었습니다. 이런 mask 기입은 여기서 설명하자면 좀 기니까...명령 프롬프트에서 ipconfig 명령 등으로 확인하고 기입하는 법을 좀 공부하시는 것도 좋겠네요.
나머지 두 개의 push 는 저와 같이 그대로 적어주시는 것도 좋습니다. 저 옵션은 VPN 으로 연결한 뒤에도 VPN 서버를 통해 인터넷을 하기 위해 적어주는 옵션입니다. redirect-gateway 을 통해 VPN 서버를 통해 인터넷을 하겠다는 것과 dhcp-option DNS 을 통해 새로 발급한 가상 IP 에 DNS 정보를 적어주는 것입니다. 168.126.63.1 은 우리나라 대표 DNS(KT 에서 운영)로 자신의 환경에 맞는 DNS 을 적어줄 수 있고, 여러 개를 쓰고 싶을 경우 이어적지 마시고 여러줄 적어주시면 됩니다.
그 외에 OpenVPN 은 개인키/공개키 방식의 보안 접속을 기본으로 하기 때문에 ca, cert, key 을 생성해서 등록해줘야 하고, config 디렉토리에 넣어둘 경우 저렇게 파일 이름만, 다른 위치에 두고자 할 때에는 ca "C:\\ca.crt" 와 같이 쌍따옴표를 이용해 경로를 지정해주고 역슬래쉬(\)는 두 번을 적어줘야 합니다.
keepalive 는 접속 유지 시간, comp-lzo 는 통신 내용 압축, status 는 로그 파일, verb 는 로그 단계(내용)에 관련된 내용입니다. 기본값 유지를 권장합니다.
이렇게 서버를 설정하신 뒤 server.ovpn 파일에서 마우스 우측 버튼으로 Start OpenVPN on this config file 을 실행하시면 서버가 실행됩니다. 명령 프롬프트 창이 뜨니까 거기에 나오는 내용을 잘 보세요. 혹시 에러가 있을 경우 내용을 보고 수정을 해야 합니다.
물론 서비스에도 등록이 되기 때문에 서비스로 가셔서 OpenVPN 을 실행해도 됩니다.
클라이언트의 경우 서버와 비슷합니다. 마찬가지로 sample-config 에서 client.ovpn 을 config 디렉토리로 복사한 디 설정파일을 서버와 내용을 맞춰가면서 설정하면 됩니다.
client
dev tun
proto udp
remote 123.123.123.123 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
ns-cert-type server
comp-lzo
verb 3
dev와 proto 는 서버와 동일하게 해주시고, remote 에서 OpenVPN 서버를 생성한 서버의 실제 IP 와 포트를 적어줍니다. 그 외에는 모두 그대로 두시고, ca, cert, key 역시 생성된 것을 config 디렉토리에 넣어줍니다. ca 는 서버와 동일한 파일이고 cert, key 는 클라이언트용 파일입니다. 이 역시 생성 방법은 찾아보면 많습니다.
주의하실 점은 처음 생성할 때에는 client 키를 잘 만들었는데, 그 다음부턴 오류가 난다(C:\*.old을 찾을 수 없습니다)는 분들이 계신데, easy-rsa 에서 init-config 와 vars 을 다시 실행한 뒤 생성하시면 됩니다.
그리고 클라이언트에서는 openvpn-gui.exe 파일로 트레이에 아이콘을 띄워놓고 쓰는게 편한데, 관리자 권한으로 실행되야 합니다. 그러므로 해당 파일을 항상 관리자 권한으로 띄우도록 설정한 뒤 사용하는게 편합니다.
이상 끝!!!
이 문서는 처음 OpenVPN 을 설치하는 분이 아닌, 기존 문서를 보고 좀 막힌다 싶은 분들을 위한 문서입니다. 처음 구축을 하시는 분들은 구글에서 "openvpn 윈도 설치" 로 먼저 검색(http://goo.gl/OqFdM5) 한 번 해보시고 문서들 보면서 좀 익히신 뒤 따라해보세요.