OpenVPN

- 설치는 간단

- 서버가 될 장비에서 키 생성
  1. C:\Program Files\OpenVPN\easy-rsa\openssl.cnf.sample 을 복사해서 openssl.cnf 로 파일명을 바꾼다.
  2. C:\Program Files\OpenVPN\easy-rsa\vars.bat.sample 을 복사해서 vars.bat 로 파일명을 바꾼다. KEY_* 관련 변수를 설정한다.
  3. C:\Program Files\OpenVPN\sample-config\server.ovpn 을 복사해서 C:\Program Files\OpenVPN\config\server.ovpn 에 둔다. 클라이언트는 client.ovpn 파일을 사용한다. 
  4. C:\Program Files\OpenVPN\easy-rsa> vars
    C:\Program Files\OpenVPN\easy-rsa> clean-all
    C:\Program Files\OpenVPN\easy-rsa> build-ca //keys 디렉토리 아래에 ca.crt 와 ca.key 생성된다.
    C:\Program Files\OpenVPN\easy-rsa> build-key-server server //Common Name 을 물어 오면 server 를 입력한다. server.crt 와 server.key 가 생성된다.
    C:\Program Files\OpenVPN\easy-rsa> build-dh //dh1024.pem 가 생성된다. 
  5. //클라이언트에서 사용할 열쇠들을 생성시켜야 하는데 이는 서버에서 (또는 ca.key 가 있는 서버에서) 만든다.
    C:\Program Files\OpenVPN\easy-rsa> build-key openvpn1 //Common Name 은 openvpn1 을 입력한다. 각각 클라이언트마다 서로 다른 Common Name 을 주어야 한다.
    혼선을 피하기 위해 Country Name 과 Common Name 을 제외하고는 동일한 이름으로 한다.

- Configuration - server.ovpn
//../easy-rsa/keys/ca.crt 나 "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\ca.crt" 처럼 파일 위치만 정확하게 넣어주면 된다.
ca ca.crt //*.ovpn 파일과 같은 디렉토리에 있는 경우
cert server.crt
key server.key
...
dh "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\dh1024.pem"

- Configuration - client.ovpn
remote 10.20.30.123 1194
...
ca ca.crt
cert openvpn1.crt
key openvpn1.key

- Run
OpenVPN 서버가 방화벽 내부에 들어 있을 경우 UDP/1194 번을 열어 주어야 한다.
Mon Jul 20 07:32:41 2009 11.22.33.44:16959 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
Mon Jul 20 07:32:41 2009 11.22.33.44:16959 [xxxx_test] Peer Connection Initiated with 11.22.33.44:16959
Mon Jul 20 07:32:41 2009 xxxx_test/11.22.33.44:16959 MULTI: Learn: 10.8.0.10 -> xxxx_test/11.22.33.44:16959
Mon Jul 20 07:32:41 2009 xxxx_test/11.22.33.44:16959 MULTI: primary virtual IP for xxxx_test/11.22.33.44:16959: 10.8.0.10
Mon Jul 20 07:32:42 2009 xxxx_test/11.22.33.44:16959 PUSH: Received control message: 'PUSH_REQUEST'
Mon Jul 20 07:32:42 2009 xxxx_test/11.22.33.44:16959 SENT CONTROL [xxxx_test]: 'PUSH_REPLY,route 10.8.0.1,ping 10,ping-restart 120,ifconfig 10.8.0.10 10.8.0.9' (status=1)

- server 측 추가적인 설정
  • client-to-client : 서버에 접속된 다른 클라이언트를 볼 수 있게 한다.
    10.8.0.1 과 10.8.0.10 은 연결 가능, 10.8.0.1 과 10.8.0.12 은 연결 가능, 하지만 10.8.0.10 과 10.8.0.12 는 연결할 수 없다.
    이 옵션을 사용하면 가능해진다.
  • duplicate-cn : 같은 키를 가진 클라이언트의 접속을 허용한다.
    openvpn1 키를 가진 클라이언트가 다른 곳에서 접속하면 연결이 끊어진다.
  • server 항목은 잘 안됨(192.168.0.0 으로 routing 을 추가했는데 cpu 사용량이 100을 채우네.) hp 가 192.168.0.0 에 속해 있어서 그런지....

- client 측 추가적인 설정
  • resolv-retry : infinite 로 설정되어 있으면 계속 접속 시도를 하므로 서버를 나중에 실행시켜도 접속된다.

- 참고