이전 글(구글 클라우드 플랫폼(GCP)에 OpenVPN 서버 구축(2) : 우분투용 다운로드)에 이어서 쓰는 글입니다.

 

이전 글에서 적었듯이 INSTALL 파일의 내용을 참고하면 좋습니다.

그리고 readme 파일에 나와 있는 순서를 따르는 것이 최선일 것 같습니다(일반적인 상황 기준).

 

OpenVPN 공식 홈페이지에서 배포 중인 커뮤니티판 2.5.1 버전 소스코드에는 cipher-negotiation.rst 파일이 누락되었고 OpenVPN GitHub에서 배포 중인 커뮤니티판 2.5.1 소스코드에는 configure 파일이 누락된 바람에, 상호 보완하여 해결하는 과정까지 적다보니 글이 길어졌습니다.

 

상위 버전이 배포되면서 정상화가 되면 해당 부분을 과감하게 skip해가면서 보세요.

 

제가 이 글을 왜 쓰고 있을까요?

 

 

배포되는 소스코드를 문제해결 해가면서 설치하는 것이 불편하다고 생각되면
https://community.openvpn.net/openvpn/wiki/OpenvpnSoftwareRepos
OpenVPN 공식 레포지토리 주소를 추가하고 apt, yum 등의 패키지관리자를 통해 OpenVPN 커뮤니티판을 설치하는 것을 고려해볼 수 있을 것입니다.
( sudo apt install openvpn easyrsa )

 

다만 추가했던 레포지토리 주소가 리눅스 배포판의 메이저 판올림 시점에 무력화되고, 메이저 판올림 시점에 리눅스 배포판에서 배포하는 OpenVPN 패키지가 덧씌워지면서 꼬일 수 있는 점을 주의하시기 바랍니다. (그래서 저는 추천하지 않습니다.)

 

▼ readme 파일에 나와있는대로 sudo tar -zxf openvpn-2.5.1.tar.gz 라고 입력하여 압축을 풉니다.
ll 명령어로 확인해보니, openvpn-2.5.1 디렉토리가 만들어지면서 압축이 풀린 것 같네요.
openvpn-2.5.1.tar.gz 파일은 더이상 쓸 일이 없을 듯하여 rm 명령어로 삭제했습니다(눈치껏 하세요.).

 

cd openvpn-2.5.1(경로 접근)만 따라하시고, 아래 스샷의 나머지 부분은 따라하지 마세요.

gcc, cc, C 컴파일러도 없고, make 패키지도 없고... 총체적 난국입니다.ㅋ

 

▼ 컴파일하는 데에 필요한 패키지들을 묶어서 깔아볼까 하고 build-essential 을 설치 시도해 봤는데, 과한 것 같습니다. 그래서 중단.

 

▼ 일단, make 패키지가 없다고(no) 떴었으니
sudo apt install make 로 make 패키지부터 설치하고...

 

▼ checking for gcc... no 라는 메세지를 봤으니,
sudo apt install gcc 라고 입력하여 gcc도 설치(Gnu Compiler Collection의 약자.).

 

▼ 다시 한 번 sudo ./configure --enable-systemd 시도하였으나...

 

▼ ifconfig, route, netstat, rst2man, rst2html 명령어는 왜 no인 것이며...

 

▼ OpenSSL 패키지 버전이 낮다고 에러 메세지도 뜨면서 멈추는군요.ㅠㅠ

 

sudo apt install net-tools 라고 입력하여 net-tools 패키지를 설치하면 ifconfig, route, netstat 명령어를 쓸 수 있게 될 것이고,

 

sudo apt install python-docutils 라고 입력하여 python-docutils 패키지를 설치하면 rst2man, rst2html 명령어를 쓸 수 있게 될 것입니다.

 

 

▼ 가만 있어보자...
OpenSSL 버전 1.0.2 이상이 필요하다고 했는데 우분투 20.04 LTS는 OpenSSL 1.1.1f네요? 더 높은데?
OpenVPN 2.5.1이 OpenSSL 버전 체크를 못하는 것 같습니다.

 

▼ 구글링 해보니 해결책이 나오긴 하네요.

https://forums.openvpn.net/viewtopic.php?f=5&t=31222

sudo apt install libssl-dev liblzo2-dev libpam0g-dev

이렇게 입력하여 libssl-dev, liblzo2-dev, libpam0g-dev 패키지들을 설치한 다음 sudo ./configure 절차를 진행하면 통과가 된다고 합니다.

 

▼ 통과가 되네요. 혹시 모르니 sudo make distclean 명령어로 환경설정 구성을 삭제한 뒤, sudo ./configure --enable-systemd 명령어를 다시 입력하여 환경설정 구성을 새로 만들겠습니다.

 

▼ sudo ./configure --enable-systemd
sudo make

 

▼ 이번에는 이런 에러가 뜨네요.
InputError: [Errno 2] No such file or directory: 'man-sections/cipher-negotiation.rst'.

 

▼ OpenVPN 공식 홈페이지에서 배포하는 자료인데 설마 실수했겠어? 하고 OpenVPN GitHub에서 배포하는 자료와 비교해 봤는데... 실수를 했더군요. /doc/man-sections/cipher-negotiation.rst 파일이 빠져 있습니다. -_-;;

(구성 요소가 빠져있지 않은 정상적인 상황이라면 sudo make 절차가 완료된 뒤에 sudo make install 을 입력하면 설치 절차가 끝납니다.)

 

▼ OpenVPN GitHub 페이지에 가면 cipher-negotiation.rst 파일을 받을 수 있습니다.

https://github.com/OpenVPN/openvpn

 

▼ /doc/man-sections/ 경로로 들어가면 cipher-negotiation.rst 파일이 보일 거예요.
우클릭하여 링크주소 복사하고...

 

sudo wget 링크주소 -P 경로 형식으로 입력하여
/usr/local/src/openvpn-버전명/doc/man-sections/ 경로에 cipher-negotiation.rst 파일을 받습니다.

( sudo wget https://github.com/OpenVPN/openvpn/blob/master/doc/man-sections/cipher-negotiation.rst -P /usr/local/openvpn-버전/doc/man-sections/ )

 

▼ sudo make distclean 명령어를 입력하여 기존에 생성했던 환경설정을 지우고,
sudo ./configure --enable-systemd
sudo make
sudo make install
명령어를 차례로 입력하여 다시 설치를 진행합니다.
(아래는 설치가 완료된 스크린샷입니다.)

▲ --enable-systemd 옵션을 추가한 이유는 서비스 기능을 지원하지 않는 것이 기본값이기 때문입니다. 이 옵션이 없으면 sudo service openvpn(또는 sudo systemctl openvpn) 명령어가 안먹힙니다. enable-systemd 옵션이 활성화 되었는지는 openvpn --version 이라고 쳐보면 확인 가능하고, 관련 옵션에 대한 내용은 아래의 문서들에서 확인할 수 있습니다.

 

https://community.openvpn.net/openvpn/wiki/Systemd

https://github.com/OpenVPN/openvpn/blob/master/INSTALL

(나중에 server.conf 파일과 client.conf 파일 구성할 때 필요한 옵션들이 나오면 ./configure 뒤에 추가하라고 업데이트 하겠습니다.)

 

The pkg-config script could not be found or is too old 에러를 만나면 sudo apt install pkg-config 으로 대응하면 되고, No package 'libsystemd-daemon' found 에러를 만나면 sudo apt install libsystemd-dev 으로 대응하면 됩니다.

 

▼ ll 명령어로 /etc 디렉토리를 조회해보면 openvpn 디렉토리가 없을 겁니다. 아래의 명령어를 입력하여 openvpn 디렉토리와 하위 디렉토리들을 추가합니다.

sudo mkdir /etc/openvpn

sudo mkdir /etc/openvpn/server

sudo mkdir /etc/openvpn/client

 

https://github.com/OpenVPN/openvpn/tree/master/distro/systemd

▼ 소스코드 경로 아래의 /distro/systemd 디렉토리를 보면 openvpn-client@.service 파일과 openvpn-server@.service 파일이 추가된 것을 확인할 수 있습니다. 위에 적은 github 링크 주소와 비교해보면 파악이 되실 겁니다.

 

※ systemd 관련해서 도움받은 기타 문서들

https://github.com/OpenVPN/openvpn/blob/master/distro/systemd/README.systemd

https://unix.stackexchange.com/questions/406520/self-compiled-openvpn-wont-start-from-systemd

 

▼ cd 명령어로 /usr/local/src/openvpn-버전/distro/systemd 디렉토리로 이동한 다음,

cp 명령어로 openvpn-client@.service 파일을 /lib/systemd/system/ 경로로 복사합니다.

cp 명령어로 openvpn-server@.service 파일을 /ib/systemd/system/ 경로에 복사합니다.

cd distro/systemd

sudo cp openvpn-client@.service /lib/systemd/system/

sudo cp openvpn-server@.service /lib/systemd/system/

 

▼ 우분투 리눅스에 설치된 openvpn 프로그램(패키지)의 실행파일과 디렉토리의 위치 확인 방법은
whereis openvpn 이라고 쳐보면 되고(/usr/local/lib/openvpn 디렉토리에 설치되어 있군요),
실행파일의 위치만 확인하고 싶으면 which openvpn 이라고 입력하면 됩니다.

 

 

소스코드로 설치(인스톨)를 했기 때문에, 삭제(언인스톨)를 하고 싶으면 /usr/local/src/openvpn-2.5.1/ 경로에 접근하여 sudo make uninstall 이라고 입력하면 언인스톨이 될 겁니다. 이후 cd .. 으로 상위 디렉토리(/usr/local/src/)로 이동한 후 rm -rf 명령어로 openvpn-2.5.1 디렉토리를 지우면 완전 삭제가 됩니다.

 

이후 과정은 다음 글에서 적겠습니다.

 

※ 다음 글 : 구글 클라우드 플랫폼(GCP)에 OpenVPN 서버 구축(4) : EasyRSA 다운로드 설치

※ TMI(Too Much Information) : 우분투 리눅스 OpenVPN : 소스 컴파일 설치 이후 최신버전 업데이트 방법

반응형