OpenVPN Server on Ubuntu
- Installation
- Public Key Infrastructure Setup - {:.} Certificate Authority (CA) Setup - {:.} Generate Certificates and Keys for the Server - {:.} Generate Certificates and Keys for Clients - {:.} Creating a Unified OpenVPN Profile for client Devices
- Simple Server Configuration
- Client - {:.} Open Internet Access - {:.} Routing
Installation
Public Key Infrastructure Setup
먼저 PKI (Public Key Infrastructure)를 만들어야 합니다.
PKI는 다음과 같이 구성이 되어 있습니다.
- public key 그리고 private key
- master Certificate Authority (CA) certificate 그리고 각각의 서버와 클라이언트를 서명(sign)할 key
OpenVPN은 bidirectional authentication을 제공합니다. 즉 mutial trust가 만들어지기 위해서, 클라이언트는 서버를 authenticate해야하며, 서버또한 클라이언트를 authenticate해야 합니다. 서버 그리고 클라이언트 둘다 서로를 presented certificate이 master certificate authority(CA)에 의해서 signed이 되었는지 확인함으로서 authenticate를 합니다.
Certificate Authority (CA) Setup
나만의 Certificate Authority (CA)를 만들고 설정하는 방법은 다음과 같습니다.
/etc/openvpn/easy-rsa/vars파일을 열고 다음을 수정하여 줍니다.
KEY_NAME 을 변경하면 server.key 그리고 server.crt 등의 이름으로 설정 파일들을 만들수 있습니다.
Diffie-Hellman parameters 을 만들어야 합니다. (꽤 시간이 걸림)
. ./vars할때 .에 주의해야 합니다. 정확하게 . ./vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
위의 에러가 나오는데, keys디렉토리 안에 아무것도 없어서 나오는 warning이고, 신경쓸필요 없습니다.
clean-all을 통해서 혹시라고 old or example keys를 삭제 시킵니다.
build-ca를 실행시킬때, Country, State, Organization, Email등등 이미 기본값을 vars에다가 저장했으므로 그냥 엔터만 누르면 됩니다.
Generate Certificates and Keys for the Server
일반적으로 (common practice) /etc/openvpn/ 디렉토리 안에다가 certificates과 keys들을 위치시킵니다.
Generate Certificates and Keys for Clients
일반적으로 각각의 클라이언트는 unique certificate 그리고 key를 갖는 것이 좋습니다.
By default, OpenVPN does not allow simultaneous connections to the server from clients using the same certificate and key. (See duplicate-cn in /etc/openvpn/server.conf.)
build-key 를 해줄때, client1, client2, client3 처럼 클라이언트마다 각각의
client certificates이 만들어지면, client에서 scp명령어로 복사해옵니다. (hostname 변경필요)
완료가 되면 다음의 파일이 클라이언트에 있어야 합니다.
- client1.crt
- client1.key
- client.ovpn
- ca.crt
Creating a Unified OpenVPN Profile for client Devices
client.ovpn파일 안에 CA, client’s certificate 그리고 private key를 포함해서 손쉰게 client application으로 import가 될 수 있습니다.
클라이언트에서 client.ovpn파일을 편집합니다.
hostname, port를 지정합니다.
ca, cert, key 는 commented out 시켜 버립니다.
그 다음으로
Simple Server Configuration
/etc/openvpn/server.conf안의 내용들이 certificates 그리고 keys값들을 잘 참조하도록 설정합니다.
/etc/openvpn/server.conf 파일을 열고 다음을 uncomment처리 해줍니다. (끝나면 다음과 같이 보여야 합니다.)
/etc/sysctl.conf 파일을 열고, 다음의 내용을 uncomment처리 해줍니다.
그리고 다음을 실행시켜 줍니다.
테스트하는 방법은 다음과 같이 합니다.
Client
VPN Connections -> Configure VPN… 선택
Add -> OpenVPN 선택
Client Certificate, CA, Private Key를 등록시켜줍니다.
TCP, LZO Compression, TUN등등.. 설정을 해줍니다.
접속후 성공 화면.
Open Internet Access
클라이언트에서 인터넷을 접속하되, VPN에 있는 resources에 접속하려면 다음과 같이 설정합니다.
IPv4 Settings -> Routes -> Use this connection only for resources on its network 를 체크해주셔야 합니다.
Routing
예를 들어서 10.10.30.125 으로 접속해야 합니다.
ifconfig tun0 쳤을때 P-t-P:10.8.0.5 라고 나온 부분이 바로 Gateway입니다.
route를 쳤을때 접속하려는 주소 10.10.30.125관련된 route정보가 안나온다면.. VPN설정 -> IPv4 Settings -> Routes 에서 다음과 같이 설정합니다.