Develop Note

[Ubuntu] OpenVPN 서버 구축 (1) - 설치 및 키 생성 본문

Linux/Ubuntu

[Ubuntu] OpenVPN 서버 구축 (1) - 설치 및 키 생성

Chalsu 2017. 10. 28. 19:35


0. 개요


OpenVPN은 VPN(Vitual Private Network)을 리눅스나 윈도우 상에서 쉽게 구축할 수 있도록 하는 오픈소스 소프트웨어이다.


자세한 내용은 공식 홈페이지에서 확인하도록 한다.

https://openvpn.net/index.php/open-source/overview.html



1. OpenVPN 설치

// root 계정으로 전환
$ sudo -s

// 패키지에 sign을 하기 위한 공용 GPG key 다운로드
# wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -

// Key 적용유무 확인
# apt-key list | grep openvpn
uid                  Samuli Seppänen (OpenVPN Technologies, Inc) 

// sources.list 생성
// xenial은 ubuntu 16.04의 codename 이다.
# echo "deb http://swupdate.openvpn.net/apt xenial main" > /etc/apt/sources.list.d/swupdate.openvpn.net.list

// openVPN 설치
# apt-get update && apt-get install openvpn

sources.list 를 생성할 때 codename은 사용중인 linux에 맞도록 수정 작성한다.

사용중인 리눅스 배포판 정보를 확인하는 방법은 다음을 참고한다.


[Linux] 리눅스 배포판 정보 확인 방법



2. Easy-rsa 설치 (2.x version)


Easy-rsa X.509 PKI(Public Key Infrastructure) 관리하기 위한 utility이다.


OpenVPN 2.2.x 이전 버전에는 easy-rsa 포함되어 있었으나, 2.3.x 이후의 버전에는 easy-rsa 포함되어 있지 않다.

또한, Easy-rsa 2.x 에서 3.x 으로 업데이트 되면서 실행방식이 일부 달라졌으므로 알맞은 버전을 선택해서 사용하도록 한다.


여기에서는 2.x 버전을 사용한다.

// Easy-rsa 다운로드 $ wget https://github.com/OpenVPN/easy-rsa/archive/2.2.2.tar.gz $ mv 2.2.2.tar.gz easy-rsa-2.2.2.tar.gz // 압축 해제 $ tar xf easy-rsa-2.2.2.tar.gz $ cd easy-rsa-2.2.2/easy-rsa/2.0

// vars 파일 수정

$ vi vars // 사용자 환경에 맞게 설정해준다. export KEY_COUNTRY="KR" export KEY_PROVINCE="Seoul" export KEY_CITY="Seoul" export KEY_ORG="Fort-Funston" export KEY_EMAIL="chalsu@mail.com" export KEY_OU="MyOrganizationalUnit"


3. Server Key 생성


Server용 인증키를 생성한다.

// key 생성을 위한 기본 변수 설정
$ . vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/kim/easy-rsa-2.2.2/easy-rsa/2.0/keys
// 초기 clean 
$ ./clean-all
// CA key 생성
$ ./build-ca
// Server key 생성
$ ./build-key-server server
// Diffie Hellman parameters 생성 (for server)
$ ./build-dh


4. Client Key 생성


이후 OpenVPN Client 구축에 필요한 인증키를 생성한다.


Client가 여러개라면 각 클라이언트 마다 다른 client key가 필요하다.

예를 들어 5대의 client가 있다면 5개의 key가 필요하다.

// Client key 생성 // ./build-key "client_name" $ ./build-key client01

위 과정을 진행하면 client01 이라는 이름의 client key가 생성된다.

추가 client에 대한 key가 필요하다면 client02, client03, ...등의 식별 가능한 이름으로 추가 key를 생성하면 된다.



5. 생성된 key 확인


key는 keys 라는 이름의 하위 디렉토리에 생성된다.

$ ls keys/            
01.pem  ca.key        client01.key  index.txt.attr      serial      server.csr
02.pem  client01.crt  dh2048.pem    index.txt.attr.old  serial.old  server.key
ca.crt  client01.csr  index.txt     index.txt.old       server.crt


[참고] key 파일들에 대한 정보

OpenVPN 공식 홈페이지의 wiki 페이지에서 각 key에 대한 정보를 확인할 수 있다.

https://openvpn.net/index.php/open-source/documentation/howto.html#quick




6. Server key 복사


생성된 Server key를 OpenVPN 디렉토리로 복사한다.

$ cd keys/

// key를 복사할 폴더 생성
$ sudo mkdir -p /etc/openvpn/server_keys

// Server와 관련된 key 파일들 복사
$ sudo cp dh2048.pem ca.crt server.crt server.key /etc/openvpn/server_keys/


7. OpenVPN server 설정파일 작성


OpenVPN server에 적용할 설정파일을 작성한다.

$ sudo vi /etc/openvpn/server.conf

port 1194 # use the same settings as we are using on the server dev tun # UDP server proto udp # key 경로 및 파일명 설정 ca /etc/openvpn/server_keys/ca.crt cert /etc/openvpn/server_keys/server.crt key /etc/openvpn/server_keys/server.key # This file should be kept secret dh /etc/openvpn/server_keys/dh2048.pem # VPN 네트워크 영역을 지정한다. 일반적으로 10.8.0.0을 사용한다. server 10.8.0.0 255.255.255.0 # Uncomment this directive to allow different # clients to be able to "see" each other. client-to-client keepalive 10 120 # 인증서 중복 허용 duplicate-cn # 압축 사용 comp-lzo # 재연결 시 동일한 키 사용 persist-key # 재연결 시 동일한 디바이스 사용 persist-tun # ubuntu 에서 openvpn 서버의 사용자 권한을 낮춘다. user nobody group nogroup

# cipher method cipher BF-CBC # or AES-128-CBC, DES-EDE3-CBC # Set log file verbosity verb 3


8. OpenVPN 서버 실행

$ sudo service openvpn restart


정상적으로 실행되었다면 tun0 라는 이름의 네트워크 인터페이스가 생성된다.

tun0는 10.8.0.1의 IP 주소를 가진다.

$ ifconfig


'Linux > Ubuntu' 카테고리의 다른 글

[WSL] Mosquitto 환경 구축  (0) 2022.09.07
[Ubuntu] OpenVPN 서버 구축 (2) - DDNS/포트포워딩 설정  (0) 2017.10.28
Comments