OpenVPN Community Edition 설치하기

이희수·2025년 6월 19일

Cafeboo

목록 보기
3/5

✏️현 상황

클라우드 환경에서 내부망에 접근하기 위해 openVPN을 이용하고 있었다.

하지만 기존 설치된 버전은 상업용 버전인 OpenVPN Access Server 으로, 무료 버전에서는 동시 접속이 2명까지만 지원되었다.

현재 내부망에 위치하는 Grafana에서 로그를 확인하며 디버깅을 진행하고 있었기에, BE, AI 개발팀 4명이 동시에 로그를 확인할 수 없는 문제가 발생하였고, 동시 접속자 제한이 없는 오픈소스 에디션인 OpenVPN Community Edition 으로 전환하게 되었다.

🔍비교

항목Community Edition (CE)Access Server (AS)
라이선스GPLv2 (오픈소스, 무료)상용 라이선스 (2명까지 무료, 이후 유료)
설치 방식직접 구성 (CLI 중심)자동 설치 스크립트 및 UI 기반 설정 지원
관리 인터페이스없음 (CLI, 수동 설정)웹 기반 Admin UI 제공
클라이언트 구성 배포.ovpn 파일 수동 배포웹 포털 통해 자동 다운로드 가능
업데이트 및 패치수동으로 직접 관리자동 업데이트 지원

🛠️설치

🖥️ 서버 환경

  • Ubuntu 20.04 LTS (GCP VM 또는 일반 리눅스 서버)
  • OpenVPN Community Edition

1. 패키지 설치

sudo apt-get update
sudo apt-get install -y openvpn easy-rsa

2. PKI 및 인증서 발급

# 작업 디렉토리 생성
make-cadir ~/openvpn-ca
cd ~/openvpn-ca

# PKI 디렉터리 초기화
./easyrsa init-pki

# CA 생성
./easyrsa build-ca nopass

# 서버 키·CSR 생성 및 서명
./easyrsa gen-req server nopass
./easyrsa sign-req server server

# 클라이언트 키·CSR 생성 및 서명
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1

# DH 및 CRL 생성
./easyrsa gen-dh
./easyrsa gen-crl

# 생성된 파일들을 복사
sudo cp pki/ca.crt /etc/openvpn/
sudo cp pki/issued/server.crt /etc/openvpn/
sudo cp pki/private/server.key /etc/openvpn/
sudo cp pki/dh.pem /etc/openvpn/
sudo cp pki/crl.pem /etc/openvpn/

3. TLS-Crypr-v2 키 생성

cd /etc/openvpn
# 서버용 키 생성
sudo openvpn --genkey tls-crypt-v2-server tls-crypt-v2-server.key

# 클라이언트용 래핑 키 생성
sudo openvpn \
  --tls-crypt-v2 tls-crypt-v2-server.key \
  --genkey tls-crypt-v2-client tls-crypt-v2-client.key

sudo chown root:root tls-crypt-v2-*.key
sudo chmod 600    tls-crypt-v2-*.key

4. 서버 설정(/etc/openvpn/server.conf)

port 1194
proto udp
dev tun

# 인증서와 키 파일 경로
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh.pem

# 제어 채널 암호화 (TLS-Crypt v2)
tls-crypt-v2 /etc/openvpn/tls-crypt-v2-server.key
cipher AES-256-CBC

# vpn 네트워크 설정
server 172.27.224.0 255.255.240.0
ifconfig-pool-persist ipp.txt

# 사설망 라우팅
push "route 10.30.1.3 255.255.255.255"
push "route 10.10.1.0 255.255.255.0"
push "route 10.10.2.0 255.255.255.0"
push "route 10.20.10.0 255.255.255.0"
push "route 10.20.11.0 255.255.255.0"
push "route 10.20.20.0 255.255.255.0"
push "route 10.20.21.0 255.255.255.0"
push "route 10.30.1.0 255.255.255.0"
push "route 10.30.2.0 255.255.255.0"

# DNS
push "dhcp-option DNS 8.8.8.8"

# MTU 관련 설정
tun-mtu 1400
mssfix 1360

# 연결 유지 및 사용자 권한
keepalive 10 30
persist-key
persist-tun

# 상태 및 로깅
status openvpn-status.log
# log-append /var/log/openvpn.log
verb 3
explicit-exit-notify 1

# 데이터 채널 암호화 설정
data-ciphers AES-256-GCM:AES-256-CBC
data-ciphers-fallback AES-256-CBC

5. 클라이언트 프로파일 작성 (키)

client
dev tun
proto udp
remote (서버 public ip) 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
auth SHA256
cipher AES-256-CBC
verb 3
data-ciphers AES-256-GCM:AES-256-CBC
data-ciphers-fallback AES-256-CBC
keepalive 10 30

# 서버만 지정한 사설망만 라우팅
data-ciphers           AES-256-GCM:AES-256-CBC
data-ciphers-fallback  AES-256-CBC

<ca>
# ~/openvpn-ca/pki/ca.crt
…CA 인증서…
</ca>

<cert>
# ~/openvpn-ca/pki/issued/client1.crt
…클라이언트 인증서…
</cert>

<key>
# ~/openvpn-ca/pki/private/client1.key
…클라이언트 개인키…
</key>

<tls-crypt-v2>
-----BEGIN OpenVPN tls-crypt-v2 client key-----
# /etc/openvpn/tls-crypt-v2-client.key 내용 전체
…생성된 client key…
-----END OpenVPN tls-crypt-v2 client key-----
</tls-crypt-v2>

6. 네트워크 세팅

6.1 IP 포워딩 설정

sudo nano /etc/sysctl.conf

#net.ipv4.ip_forward=1  주석 제거 후 저장

# 적용
sudo sysctl -p

6.2 NAT(MASQUERADE) 설정

# 패키지 설치
sudo apt update
sudo apt install iptables -y

# 외부 네트워크 인터페이스 확인
ip a

# NAT 룰 추가
sudo iptables -t nat -A POSTROUTING -s 172.27.224.0/20 -o ens4 -j MASQUERADE

# iptables 세팅 영구 저장
sudo apt install iptables-persistent -y

ens410.30.1.4/32(내부망)에 연결된 네트워크 인터페이스 임을 확인

vpn 사용자들은 tun0을 통해 들어오므로 172.27.244.0/20 대역을 연결해줌

7. 서버·클라이언트 동시 기동 & 연결

# 서버 재시작 (VM 내부)
sudo systemctl start openvpn@server
# 클라이언트 연결 (사용자 터미널)
sudo openvpn --config ~/cafeboo.ovpn --verb 4

혹은 OpenVPN Connect 에서 연결

Done.

profile
백엔드 개발자로 살아남기

0개의 댓글