OpenVPN 세팅하기

OpenVPN 네트워크를 구축한 경험을 정리했다. 

OpenVPN은 VPN(Virtual Private Network) 솔루션 중에서 가장 많이 사용되고 있다. OpenVPN은 상업용 제품도 팔고, 클라우드 서비스도 제공하지만, 오픈소스인 Community Edition도 제공한다. 

이 글은 OpenVPN Community Edition의 설치와 운용에 대한 내용이다. 


OpenVPN을 어디에 쓰나?

내 경우는 여러 사이트에 설치된 감시장치와 통신하기 위해 사용했다. 감시장치들은 LTE 라우터나 고객사 네트워크를 통해 통신을 하는데, 우리측 서버에서 감시장치쪽으로 연결을 하기가 어렵다. 반대방향으로 연결하도록 해야 하는데, 이를 위해 통신 구조를 변경해야 하고, 항상 잘 동작한다고 보장하기도 어렵다. 

이런 경우 OpenVPN으로 장치들과 접근하는 PC를 엮어 동일 네트워크로 구성할 수 있다. 이것을 Seamless하게 지원하는 것이 VPN의 역할이다. 

최근에는 Wireguard라는 VPN이 뜨고 있는데, 내 경우에 잘 맞지는 않았다. Wireguard는 UDP를 기본으로 사용하는데, 몇몇 환경에서 UDP 펀치홀 기능이 지원되지 않아 안되는 경우가 많았다. OpenVPN을 TCP로 설치하는 것이 가장 많은 환경에서 문제가 없었다. (효율은 좀 나쁘겠지만..) 


OpenVPN 서버 설정하기

OpenVPN Community Server는 https://openvpn.net/community-downloads/ 에서 또는 Ubuntu 등의 공식 Repository에서 받을 수 있지만, 그 설정이 매우 어렵기로 유명하다. 

그래서 몇몇 현자들이 OpenVPN 쉽게 서버를 설정하고, 클라이언트 인증서를 만들어주는 스크립트를 개발하여 공개했다. 구글로 검색하면 2개가 주로 보이는데...

https://github.com/angristan/openvpn-install

https://github.com/Nyr/openvpn-install

위의 두개가 보인다. 비슷하긴 하지만 이 중에서 angristan 것이 더 좋더라. 그 이유는...

1. 클라이언트 인증서에 암호를 걸 수 있다 

2. tls-crypt 같은 OpenVPN 2.4 이상에서 쓰이는 기능을 쉽게 빼거나 넣을 수 있다. 


OpenVPN 서버 설정하기

OpenVPN 서버의 TCP 포트 하나는 방화벽에 오픈되어 있어야 하고 고정 Public IP가 있어야 한다. 

https://github.com/angristan/openvpn-install 에 설명된 설치 방법대로 openvpn-install.sh 를 다운받아 root 환경에서 실행하고, 몇가지 질문에 답하면 시간은 좀 걸리지만 무난히 설치될 것이다. 

/etc/openvpn/server.conf 를 수정하면 더 세밀한 설정을 할 수 있다. 관심을 가지고 볼 부분은 다음이다. 

port 65530  # vpn 포트
proto tcp   # tcp or udp
server 10.60.0.0 255.255.0.0  # 할당할 IP 대역 
#tls-crypt tls-crypt.key  # openvpn 2.3.x 클라이언트는 tls-crypt 미지원
status /var/log/openvpn/status.log  # 연결된 클라이언트 현황보기

tls-crypt를 comment out 한 것은 openvpn 2.3.x 클라이언트를 위한 것이다. 일부 장치는 Ubuntu 16.04를 사용하는데, 이 배포판에서는 openvpn 2.3.x 밖에 지원하지 않고, 이 버전은 tls-crypt를 지원하지 않으므로 뺀다. 

설정을 바꾸었으면 다음 명령으로 재시작한다. 

service openvpn@server restart   (또는) 

service openvpn-server@server restart


openvpn-install.sh 로 openvpn을 설치한 뒤에, 다시 이 스크립트를 실행하면 클라이언트 인증서를 만들 수 있다. 이 인증서의 템플릿을 미리 수정해둘 수 있다. 

/etc/openvpn/client-template.txt 를 수정하면 된다. 다음 부분을 눈여겨 보자. 

remote xxx.xxx.xxx.xxx 65530  # openvpn 서버 IP/port
route-nopull   
route 10.60.0.0 255.255.0.0 vpn_gateway


아래 route 관련 두 줄을 사용하지 않으면, 클라이언트의 모든 트래픽이 VPN 서버를 통해 나간다. 그걸 원할 경우도 있지만... 대부분의 경우 10.60.x.x 대역만 VPN 타기를 원할 것이기 때문에 아래 두 줄을 추가하는 것이 좋다. 


OpenVPN 클라이언트 설정

openvpn-install.sh 을 실행하여 클라이언트 인증서를 만들자. 그리고 그 파일을 어떻게든 해당 장치로 복사한다. (sftp, email 등 방법으로)

리눅스 클라이언트라면 다음과 같이 일단 openvpn을 설치한다. 

sudo apt install openvpn 

이어서 복사한 ovpn 인증서를 /etc/openvpn/인증서이름.conf  로 복사한다. 반드시 conf 확장자로 바꾸어야 한다. 

그리고 다음 명령으로 실행한다. 

sudo openvpn --config /etc/openvpn/인증서이름.conf --daemon

ip addr 명령으로 확인해보면 10.60.x.x 아이피가 할당된 것을 볼 수 있다. 

그리고 /etc/network/if-up.d/openvpn 파일을 보면 부팅시 자동실행되는 것도 볼 수 있다. 

Windows, MacOS의 경우 https://openvpn.net/vpn-client/  에서 OpenVPN Connect 라는 프로그램을 깔면 되고, Android나 iOS의 경우 각각 Play Store나 App Store에서 설치하면 된다. 

역시 ovpn 인증서를 복사해야 하고, Import Profile 메뉴로 인증서를 읽어들이면 된다. 


이렇게 비교적 쉽게 VPN 네트워크를 구성할 수 있다. 

댓글 없음:

댓글 쓰기

인기글