리눅스 OpenVPN 서버 구축하기

Prerequisites

22.04.4 LTS 기준, 서버 인증서는 이미 발급한 것으로 간주한다.

패키지 설치

sudo apt install openvpn easy-rsa

DH 키 발급

OpenVPN 서버 구축을 위해서는 Diffie-Hellman 키를 발급해줘야 한다.
앞에서 easy-rsa 패키지를 설치했으므로, 키만 발급받으면 된다.

cd /usr/share/easy-rsa
sudo ./easyrsa gen-dh

server.conf 설정

이제, 서버 설정을 해 보자. /etc/openvpn 아래 바로 *.conf 파일을 만들어야 systemd가 정상적으로 인식한다.

cd /etc/openvpn
vi server.conf

// server.conf

dev tun

server VIRTUAL_IP VIRTUAL_SUBNET
push "route PRIVATE_IP PRIVATE_SUBNET"

topology subnet
proto udp
mssfix 1250
tun-mtu 1500
port PORT

auth SHA256
cipher AES-256-GCM

dh your_dh_path.pem
ca your_ca_path.pem
cert your_cert_path.pem
key your_privkey_path.pem

max-clients 5

persist-tun
persist-key

verb 3
log-append /var/log/openvpn.log

keepalive 10 60
reneg-sec 60

verify-x509-name SERVER_DOMAIN name

VIRTUAL_IP는 VPN이 사용할 아이피 대역, PRIVATE_IP는 실제 네트워크 인터페이스의 아이피 대역을 입력하면 된다.

가령 VPN이 10.8.0.0/24를 이용하게 하려면,
VIRTUAL_IP는 10.8.0.0, VIRTUAL_SUBNET은 255.255.255.0이 되고,

라우터 내부 IP 대역이 192.168.0.0/24라면,
PRIVATE_IP는 192.168.0.0, PRIVATE_SUBNET은 255.255.255.0이 되겠다.

SERVER_DOMAIN은 인증서의 도메인과 일치하도록, PORT는 VPN 통신에 사용할 UDP 포트를 설정하면 된다. (기본 1194)

마지막으로 인증서 경로를 전부 입력하고 저장해 주자.

iptables 테이블 설정하기 (중요!!!!)

필자는 이 설정을 하지 않아 며칠간 헤맸다.
route가 아니라 iptables를 설정해야 한다.

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s VIRTUAL_IP/24 -j MASQUERADE

VIRTUAL_IP는 위에서 사용한 VPN의 가상 아이피 대역을 입력하자.

systemd 등록하기

만약 *.conf의 이름을 다르게 설정했다면, server 대신 설정한 이름을 넣어주자.

sudo systemctl start openvpn@server
sudo systemctl enable openvpn@server

“Initialization Sequence Completed” 가 떴다면 정상적으로 설정된 것이다.

client.ovpn 설정하기

client.ovpn을 열고 다음과 같이 입력하자.

dev tun
client

remote SERVER_DOMAIN PORT


dhcp-option DNS 8.8.8.8
dhcp-option DNS 8.8.4.4


proto udp

reneg-sec 60

ca your_ca_path.pem
cert your_cert_path.pem
key your_privkey_path.pem

cipher AES-256-GCM
auth SHA256
auth-user-pass

verify-x509-name SERVER_DOMAIN name

아까와 마찬가지로 SERVER_DOMAIN, PORT 그리고 인증서 파일의 경로를 지정하고 저장하면 된다.

포트포워딩 설정하기

OpenVPN과 외부에서 통신하기 위해서는, 라우터에서 포트포워딩을 설정해줘야 한다.

다음과 같이 사용할 포트와 서버의 IP를 포트포워딩 시켜주자.

서버 접속하기

필자는 윈도우의 OpenVPN 클라이언트를 사용했다.

정상적으로 접속된다! 혹시 문제가 발생한다면, 클라이언트 로그 혹은 서버의 /var/log/openvpn.log를 확인해 보자. 문제가 파악되지 않는다면 verb 값을 조절하면 된다.

Previous post KT GiGA Buddy로 메쉬 네트워크 구성하기
Next post Windows 리커버리 파티션 생성하기 (파일 有)

관련 글

댓글 남기기