먼저...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) 한 번 해보시고 문서들 보면서 좀 익히신 뒤 따라해보세요.
작성자가 댓글을 삭제했습니다.
답글삭제네. 맞습니다.
삭제근 며칠간 인터넷의 온만 글을 다 뒤지고, 이 글도 서너번 이상 켜보면서 골똘히 고생고생하다가 오늘에야 핵심문구를 발견하네요.
답글삭제"tun 은 기존의 랜카드로 들어가 인터넷 연결 공유(속성>공유>인터넷 연결 공유)을 체크하고 홈 네트워킹 연결에서 TAP 장치를 선택해주면 됩니다." -.-b
감사합니다.
참고로, 서버 역할하는 컴퓨터에 hyper-v 기능이 켜져 있으면 인터넷 공유 관련 설정이 꼬이면서 안 됩니다. hyper-v 기능을 꼭 끄고 해야합니다.
도움이 되셨다니 다행이네요.
삭제hiper-v 의 경우 가상 스위치를 생성하기 때문에 기존의 랜카드가 아닌 가상 스위치 쪽에서 설정해줘야 하지 않을까 싶네요.
지나가다가 의문에 글을 남깁니다.
답글삭제글 처럼 회선을 공용으로 하면 vpn 사용이 당연히 진행 되어야 하는데 그렇게 하지 않은 이유는 비용의 문제가 눈가요? 아니면 전임자의 무능함에서 나오는 것 인가요?
위와 같은 작업을 진행한 곳은 오렌지팜...이라고 하는 스타트업 기업을 지원하는 인큐베이터 같은 곳입니다. 스마일게이트에서 운영하는 곳이고, 오렌지팜에서는 VPN 지원을 해주지 않습니다. 전임자가 Windows 7 을 깐 것은 좀 그렇지만...비용이나 전임자의 무능이라기 보다는, 현실이 그랬다는 정도로 생각하시면 될 것 같습니다.
삭제openvpn을 구성해서 내부망에 접속하여 내부에 있는 공유기에 접속하려고 하는데, 이게 내부망에서 직접 접속하는 것과는 firewall에서 다뤄지는 게 다른 것 같네요. 공유기에서 access from wan을 enable해주지 않으면 접속이 안되는 데 이게 정상인거죠?
답글삭제