JNB
rss

skin by 이글루스

보안

OPENVPN 09.06.21 4:49
연구실 <-> 집을 왕복하는 규칙적인(?) 생활을 하는 나에게 있어 한 가지 고민 거리가 있었다.
연구실에서는 데스크탑 2대를 사용하고 집에서는 노트북을 사용하는데, MP3, Movie 각종 자료들이 집의 노트북과 연구실 데스크탑에 중복된다는 점이다.

연구실의 데스크탑 2대는 같은 네트워크 망으로 구성되어 있기 때문에 간단한 설정으로 파일 시스템을 공유할 수 있다. 하지만 문제는 집의 노트북과의 공유이다. 같은 네트워크망이 아니기 때문에 공유가 까다롭다. 항상 필요로 하는 것이 있으면 ftp로 연구실 컴퓨터에 접속해 다운 받곤 했는데 여간 불편한게 아니다.

잡설이 길었다. OpenVPN은 Virtual Private Network(VPN)을 구축해주는 오픈 소스이다. VPN은 가상 사설망(?) 정도로 해석이 되는데, 쉽게 얘기해서 원격에 존재하는 컴퓨터를 마치 같은 네트워크 망에 존재 하듯 해주는 것이다. 즉, 나의 경우 집의 노트북에서 로컬 네트워크 망에 접속하듯이 \\111.111.111.111\d$ 와 같은 방식으로 연구실의 데스크탑 파일시스템에(D드라이브) 접속할 수 있게 되는 것이다.

OpenVPN은 peer-to-peer 방식의 구조다. 나는 연구실에 있는 데스크탑 컴퓨터를 VPN Host(Server)로 구성하였고, 집에서 사용하는 노트북을 VPN Client로 구성하였다.
참고로 VPN Host는 Windows 2003이고 VPN Client Windows XP이다.

설치
1. OpenVPN 다운로드
  VPN 서버로 사용할 시스템에서 OpenVPN을 다운로드한 뒤 설치한다. OpenVPN은 여기서 http://openvpn.net/ 다운 받을 수 있다. 최신 버전은 2.0.9이고 내가 사용하는 데스크탑은 Windows이기 때문에 "Windows Installer openvpn-2.0.9-install.exe" 버전을 다운 받아 설치했다.
(설치경로는 C:\Program Files\OpenVPN\)

2. RSA
  OpenVPN은 실제로 인터넷을 통해 네트워크가 구성되므로 안전한 통신을 위해서는 Host와 Client간에 전송되는 데이터를 암호화 해야한다. OpenVPN은 Public Key Infrastructure 방식의 공개키 암호 방식을 사용하는데, Host와 Client 모두 이 '암호키'를 필요로 한다. 그러면 이 암호키를 만들어보자.
cmd에서(명령어 프롬프트, 시작->실행->cmd) 1.에서 OpenVPN을 설치한 경로로 이동한 뒤 easy-rsa로 이동한다. (C:\Program Files\OpenVPN\easy-ras\)
자 여기서 부터 따라해야할 것이 좀 많다. 차근 차근 해보자.

2.1. init-config.bat파일을 실행한다. ( vars.bat )라는 파일이 생성된다.
2.2 vars.bat파일을 수정한다.
열어보면 이러저러한 내용이 있는데, 맨 아래쪽에

set KEY_COUNTRY=US
set KEY_PROVINCE=CA
set KEY_CITY=SanFrancisco
set KEY_ORG=FortFunston
set KEY_EMAIL=mail@host.domain

이 처럼 되어 있는걸 볼 수 있다.
이것을 적절히 수정한다.(-_-;) 예를 들어 KEY_COUNTRY=KO, KEY_PROVINCE=ChunCheon, KEY_ORG=none,

모두 수정했다면 저장한다.
2.3 CA인증서
vars.bat를 실행하면 뭔가 주절주절대고 끝난다. 다음엔
clean-all.bat를 실행하면 뭔자 주절주절대고 끝난다. 다음엔
build-ca.bat를 실행하면 옌 뭔가 물어본다.
물어보는 것들이 전부 2.2항목에서 vars.bat에서 수정했던 내용들이다(친절하게 물어볼때 vars.bat에 기록된 내용을 []안에 알려준다.) vars.bat에 입력했던대로 입력하자.
이것저것 입력하다 보면 vars.bat에서 입력하지 않았던 항목 2가지가 나온다.

Orgranization Unit
Common Name

위의 것은 그냥 뭐.. 소속기관(?) 정도이니 편하신데로 입력하면 된다.
Common Name은 시스템 이름을 묻는 것인데, 혼동을 피할 수 있는 이름을 입력하자. 예) VPN-CA

모두 완료하였다면 easy-rsa 디렉토리 아래 keys라는 디렉토리가 생성되고 그 아래 ca.crt, ca.key파일이 생성된다. 이것이 CA 인증서와 CA 인증서에 대한 암호키이다. 일단 내비두자.

2.4 Server 인증서
서버에 필요한 인증서를 만든다.
build-key-server server를 실행한다.(build-key-server한칸띄고server) 여기서 server는 VPN-Host를 의미한다. 꼭 server라고 해야 되는 건 아니나 혼동을 피하기 위해서 이렇게 지정했다.
여기서 이것저것 캐묻는데, build-ca.bat를 실행했을 때와 크게 다르지 않다.
단 Common Name의 경우 Ca인증서는 VPN-CA라고 했었던 것 같이 VPN-Server쯤으로 해두자. 이 외에 비밀번호를 묻는 것이 있는데, 그건 알아서..(-_-;)입력하고 y/n 질문이 2개 나온다. 모두 y를 입력하자.

keys폴더에 CA인증서 생성때와 비슷하게 server.crt, server.key파일이 생성된다.
이것이 Server 인증서와 Server 인증서에 대한 암호키다. 이것도 잠시 내비두자.

2.5 Client 인증서
2.4항목에서 서버에 필요한 인증서를 만들었듯이
Client에 필요한 인증서를 만들어보자.
build-key client를 실행한다.(build-key한칸띄고client) 여기서 client는 위에 Server인증서를 생성했을 때와 마찬가지의 이유로 지정된 이름이다.
2.4에서 build-key-server server를 했을 때와 동일하게 물어본다. 모두 동일하게 입력하되 Common Name의 경우 VPN-Client정도로 입력하자.

모두 완료하였다면 keys폴더에 client.crt, client.key파일이 생성된다. 이것이 Client 인증서와 Client 인증서에 대한 암호키다. 이것도 잠시 내비두자.

2.6 build-dh
서버에 필요한 파일을 하나 더 생성해야 한다.
build-dh.bat를 실행하면 된다. 입력할 것은 없고 다만 시간이 약간 걸린다. 끝나면
keys폴더에 dh1024.pem 가 생성된다.

지금 까지 keys폴더에 생성된 파일은 ca.crt, ca.key, client.crt, client.key, server.crt, server.key, dh1024.pem 이다. 모두 다른 폴더에 옮겨두자. 이 파일들은 VPN-Host와 VPN-Client를 구성하는데 쓰일 것이다.


2.7 VPN-Host
OpenVPN이 설치된 경로 아래 sample-config 디렉토리를 보면 server.ovpn이란 파일이 있다. 이 파일을 config 폴더로 이동시키자.(필요하다면 내용을 수정할 수 도 있으나 딱히 수정하지 않아도 되니 일단 그대로 사용하자) 이 파일은 OpenVPN이 실행하는데 필요한 설정이 기록되어 있는 파일이다.
 config 폴더에 ca.crt, dh1024.pem, server.crt, server.key를 복사해 넣자.(ca.crt는 client에서도 필요하지만 server.crt, server.key, dh1024.pem은 client에서 필요로 하지 않는다)

이제 VPN-Host를 실행해보자. 시작-프로그램-OpenVPN-OpenVPN GUI를 실행하면 트레이바에 아이콘이 생기고 색상은 빨간색을 띄고 있다. 오른쪽 클릭을 하고 connect를 실행하면 창이 하나 뜨고 주륵주륵 뭔가 나온다. 접속이 성공적으로 됬다면 트레이 아이콘의 색상이 초록색으로 바뀐다.

만약 정상적으로 실행이 되지 않는다면(트레이 아이콘의 색상이 그대로 적색일 경우) 아이콘에 오른쪽 클릭을 하고 log파일을 View Log를 통해 무엇이 잘못되었는지 살펴보자.

2.8 VPN-Client
VPN-Client로 사용할 컴퓨터에도(나의 경우 노트북) OpenVPN를 설치해야 한다. VPN-Server에 설치했던 것과 마찬가지로 "Windows Installer openvpn-2.0.9-install.exe"를 설치하자.

OpenVPN이 설치된 경로로 이동하고 sample-config 디렉토리에 있는 client.ovpn파일을 config폴더로 이동하자. client.ovpn파일은 몇가지 수정을 해야한다.

# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote my-server-1 1194
;remote my-server-2 1194

위와 같은 내용을 적절히(-_-;) 수정한다. 예를들어

# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote 210.111.111.111 1194
;remote my-server-2 1194

여기서 빨간색의 IP는 VPN-Host가 설치된 컴퓨터의 것이다. 즉, 위에서 VPN-Server가 설치된 컴퓨터의 IP가 210.111.111.111이란 뜻이다. 뒤에 1194는 포트 번호인데 딱히 수정한 것이 없다면 그대로 두어도 된다.

앞서 얘기했었듯이 Client에서도 인증서 파일이 필요하다. config 폴더에 VPN-Host가 설치된 컴퓨터에서 생성했던 ca.crt, client.crt, client.key 파일을 복사한다.(client.crt, client.key, ca.crt 이 파일은 새로운 클라이언트를 구성할때 그대로 사용해도 된다.)

자 이제 끝났다.

VPN-Client에서 트레이 바에 있는 OpenVPN아이콘을 오른쪽 클릭하여 Connect를 해보자. VPN-Host에서 실행했을 때와 마찬가지로 뭔가 주륵주륵 나오고 초록색으로 불이 바뀐다면 접속이 성공적으로 끝난것이다.
자 그럼 테스트 삼아 윈도우 탐색기를 키고 \\10.8.0.1\c$라고 입력해 보자. VPN-Host가 구성된 서버의 C드라이브 목록이 나온다면 성공.

덧, 나의 경우 Client에서 접속은 잘되는데 \\10.8.0.1\로 접근하려고 할때 서버 Log에
주절주절 bad source address from client 주절주절 이런 에러메세지가 남고 접속이 안되는 불상사가 발생했었다.
이것 때문에 꽤 해맸는데, 알고보니 단순히 방화벽 때문이더라 -_-;; VPN-Host와 VPN-Client를 설치한 컴퓨터에 제어판-네트워크 연결에 가보면 로컬 영역 연결 2(TAP-Win32 Adapter V8)가 생긴걸 볼 수 있다. 이 것에 대한 방화벽 설정을 풀어줘야 한다.
제어판-Windows 방화벽-고급에서 네트워크 연결 설정에 로컬 영역 연결 2에 대해 체크되어 있는 것을 풀어주자.

        

    
Copyright 1999-2018 Zeroboard / skin by JY