스터디를 진행하는데
각자 집에 설치한 proxmox에 접속해 테스트하기가 쉽지 않더라고요
그래서 openvpn을 이용해서 그 환경을 만들어 봤습니다.
먼저 Openvpn이 무엇인지 알아보겠습니다.
1. OpenVPN이란?
OpenVPN은 오픈소스 기반의 가상 사설망(VPN) 소프트웨어로,
인터넷을 통해 두 네트워크 또는 사용자와 네트워크 간에 암호화된 보안 통신 터널을 만들어줍니다.
활용 사례설명
🏠 원격 근무 | 집이나 외부에서 회사 내부 네트워크에 안전하게 접속 |
🏢 지사 간 연결 | 본사와 지사를 인터넷을 통해 하나의 내부 네트워크처럼 연결 |
☁️ 클라우드 보안 접속 | AWS, Azure 등 클라우드 서버와의 안전한 접속 통로 제공 |
🧑💻 관리자 접속용 | 외부에서 Proxmox나 사설 서비스 접속 시 보안 강화 |
📶 공공 와이파이 보호 | 카페, 공항 등의 와이파이에서도 개인 정보 보호 가능 |
> 밖에서도 집의 내부 네트워크에 접속하려는 저에게 딱 맞습니다.
작동 원리는 간단하게 아래와 같습니다.
- 클라이언트가 OpenVPN 서버에 접속 시도
- TLS 기반 인증서 교환 및 핸드셰이크 수행
- 암호화된 터널 생성
- 클라이언트의 트래픽이 VPN 서버를 통해 내부망으로 전달됨
- 외부에서는 클라이언트의 실제 IP나 데이터 내용을 알 수 없음
2. Openvn과 Proxmox
Openvpn이 적합한건 알겠고, Proxmox 공식 문서를 통해 설치합니다.
https://pve.proxmox.com/wiki/OpenVPN_in_LXC
준비사항은 아래와 같습니다.
1. LXC - Openvpn server
2. OpenVpn Client
3. Openvpn 443 포트포워딩 (공유기 NAT)
1. LXC - Openvpn server
- openvpn을 설치하기 위한 lxc를 준비
# 템플릿 목록 갱신
$ pveam update #Proxmox VE Application Manager
# 템플릿 다운로드
$ pveam download local debian-12-standard_12.7-1_amd64.tar.zst
downloading http://download.proxmox.com/images/system/debian-12-standard_12.7-1_amd64.tar.zst to /var/lib/vz/template/cache/debian-12-standard_12.7-1_amd64.tar.zst
--2025-05-05 21:53:25-- http://download.proxmox.com/images/system/debian-12-standard_12.7-1_amd64.tar.zst
Resolving download.proxmox.com (download.proxmox.com)... 103.76.41.50, 2400:ed00:3::2
Connecting to download.proxmox.com (download.proxmox.com)|103.76.41.50|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 126515062 (121M) [application/octet-stream]
Saving to: '/var/lib/vz/template/cache/debian-12-standard_12.7-1_amd64.tar.zst.tmp_dwnl.3455769'
0K ........ ........ ........ ........ 26% 14.4M 6s
32768K ........ ........ ........ ........ 53% 44.4M 3s
65536K ........ ........ ........ ........ 79% 11.2M 1s
98304K ........ ........ ........ 100% 19.9M=7.0s
2025-05-05 21:53:33 (17.1 MB/s) - '/var/lib/vz/template/cache/debian-12-standard_12.7-1_amd64.tar.zst.tmp_dwnl.3455769' saved [126515062/126515062]
calculating checksuhttp://m...OK, checksum verified
download of 'http://download.proxmox.com/images/system/debian-12-standard_12.7-1_amd64.tar.zst' to '/var/lib/vz/template/cache/debian-12-standard_12.7-1_amd64.tar.zst' finished
# LXC 생성, ex. Target IP: 192.168.219.201
$ pct create 150 /var/lib/vz/template/cache/debian-12-standard_12.7-1_amd64.tar.zst \
-storage local-lvm \
-hostname openvpn \
-net0 name=eth0,bridge=vmbr0,ip=192.168.219.201/24,gw=192.168.219.1 \
-cores 1 -memory 512 \
-unprivileged 0 \
-features nesting=1
- openvpn을 설치하기 위한 lxc를 준비
# pxe host에 생성된 150번 VM에 cgroup 추가
$ echo "lxc.cgroup2.devices.allow: c 10:200 rwm" >> /etc/pve/lxc/150.conf
$ echo "lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file" >> /etc/pve/lxc/150.conf
$ cat /etc/pve/lxc/150.conf
arch: amd64
cores: 1
features: nesting=1
hostname: openvpn
memory: 512
net0: name=eth0,bridge=vmbr0,gw=192.168.219.1,hwaddr=BC:24:11:B5:CA:E5,ip=192.168.219.201/24,type=veth
ostype: debian
rootfs: local-lvm:vm-150-disk-0,size=4G
swap: 512
lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file
# LXC 시작
$ pct start 150 #Proxmox Container Tool
# LXC 접근
$ pct exec 150 -- bash
## 비밀번호 설정
$ passwd
## ssh, root 접근 허용
$ nano /etc/ssh/sshd_config
PermitRootLogin yes
PasswordAuthentication yes
- 이제 openvpn을 설치
원래는 openvpn 설치할 때 인증서 세팅이 있지만, 간단한 script로 정리가 되어 있음 :)
저는 다만 기본 포트인 1194가 아닌 443을 선택했습니다.
- 1194/UDP는 **"OpenVPN 전용 포트"**로 너무 유명
- 일부 ISP(통신사), 호텔, 공공 와이파이, 사무실 네트워크 등에서 이 포트를 차단
- 반면 443/UDP는 HTTPS 트래픽처럼 보이기 때문에 거의 막히지 않음
# lxc 접근
$ pct exec 150 -- bash
# apt update
# apt dist-upgrade
# apt install openvpn git
# git clone https://github.com/Nyr/openvpn-install
# cd openvpn-install
# bash openvpn-install.sh
Welcome to this OpenVPN road warrior installer!
This server is behind NAT. What is the public IPv4 address or hostname?
Public IPv4 address / hostname [125.178.111.140]:
Which protocol should OpenVPN use?
1) UDP (recommended)
2) TCP
Protocol [1]:
What port should OpenVPN listen on?
Port [1194]: 443 <----------
Select a DNS server for the clients:
1) Default system resolvers
2) Google
3) 1.1.1.1
4) OpenDNS
5) Quad9
6) AdGuard
7) Specify custom resolvers
DNS server [1]:
Enter a name for the first client:
Name [client]:
Openvpn이 잘 설치되어 있는지 확인합니다.
$ systemctl | grep openvpn
openvpn-iptables.service loaded active exited openvpn-iptables.service
openvpn-server@server.service loaded active running OpenVPN service for server
openvpn.service loaded active exited OpenVPN service
system-openvpn\x2dserver.slice loaded active active Slice /system/openvpn-server
$ ps aux | grep vpn
nobody 1655 0.0 1.7 13080 9088 ? Ss 13:03 0:00 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --config server.conf
root 1664 0.0 0.3 3324 1664 pts/3 S+ 13:04 0:00 grep vpn
$ ss -tulnp | grep 443
udp UNCONN 0 0 192.168.219.201:443 0.0.0.0:* users:(("openvpn",pid=2008,fd=6))
이제 openvpn server 설치는 모두 완료되었습니다.
2. OpenVpn Client
ovpn을 만들어보죠
아까 설치할 때 이용했던 bash script를 실행합니다. (ovpn_test로 만듦)
$ bash openvpn-install.sh
OpenVPN is already installed.
Select an option:
1) Add a new client
2) Revoke an existing client
3) Remove OpenVPN
4) Exit
Option: 1
Provide a name for the client:
Name: ovpn_test
.+........+....+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+...+......+.+...........+..........+.....+............+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*........+...+.........+..+......+.......+...+............+...+..+............+...+.......+......+..+.......+.....+.+.........+......+........+.+.....................+...+.....+....+..+...+...+.......+......+............+............+..+.+...+......+........+......+....+..+.+........+......+.........+......+...+.+..+.............+.................+...+.......+..+.....................+.........+...+....+...+..+.+.....+.......+..+..........+...+..+...+.+............+........+.+.....+....+..............+.......+...+..+...+..........+......+..+.........+..........+.....+.........+....+.....+......+.+...+.....+.+.....+..........+...........+.+..+..........+...........+.......+.....+....+..................+.....+...............+.......+......+...............+.....+..........+...+.....+.........+..........+......+..+...+.+......+...+..+.........+...+.......+.....+..........+........+..........+..+.+........+....+..+....+.........+.....+.+..............+.......+.........+............+...+.........+..+..........+...+...............+..+.+...+..............+......+.+......+..+...+.........+.+..............+......+...+....+..+..........+.....+.........+....+........+....+...........+.............+.....+......+.+...+...............+.....+.......+........+.+.....+......+.......+...+..+.+..............+.......+.......................+.......+......+..+.+..+...+....+...+........+....+......+.....+....+..+......+.........+...+.+..............+......+.......+.........+.....+......+.......+..+...+...+....+....................+.+..+................+..+....+......+...+..+.......+..................+........+....+...............+...+...+...........+....+..+.......+.....+...+...+....+.....+.+.........+..+.........+.+......+..+...+...+.........+......+.+.....+.+.....+...+..........+.........+..+..................+..........+..+.+.........+...........+....+........+......+...............+......+....+.........+..+.........+....+...+............+...+...+.....+............+...+......+.............+..+.+...+.........+........+.........+...+.+............+...+......+.....+...+......+......+.+..+.+..+.......+..+.+..+.............+........+......+..........+.....+..........+...+...+..+.+.........+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
............+...+.+.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*...........+...+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+.+........+.......+..+............+...+.+......+...............+......+...+.....+.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-----
Notice
------
Private-Key and Public-Certificate-Request files created.
Your files are:
* req: /etc/openvpn/server/easy-rsa/pki/reqs/ovpn_test.req
* key: /etc/openvpn/server/easy-rsa/pki/private/ovpn_test.key
Using configuration from /etc/openvpn/server/easy-rsa/pki/6ddcf7d0/temp.6.1
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'ovpn_test'
Certificate is to be certified until May 3 16:06:24 2035 GMT (3650 days)
Write out database with 1 new entries
Database updated
Notice
------
Inline file created:
* /etc/openvpn/server/easy-rsa/pki/inline/private/ovpn_test.inline
Notice
------
Certificate created at:
* /etc/openvpn/server/easy-rsa/pki/issued/ovpn_test.crt
ovpn_test added. Configuration available in: /openvpn-install/ovpn_test.ovpn
$ ls | grep ovpn_test
ovpn_test.ovpn
저는 윈도우로 테스트했습니다. 아이패드에서도 정상 실행됩니다.
클라이언트 다운로드: https://openvpn.net/client/
드래그앤 드롭하면 됩니다.
아직은 방화벽을 오픈하지 않아서, 무한로딩이 될겁니다.
3. Openvpn 443 포트포워딩 (공유기 NAT)
이제 확인하려면 내 고정 IP를 외부에 오픈해야해요.
저는 LG U+ 공유기를 사용하고 있고, NAT에서 포트포워딩을 해줍니다
이제 테스트해볼게요
PC에서도, 태블릿에서도 정상연결됩니다.
이제 잘 작동되는지 확인해야죠. 아래는 태블릿(셀룰러)에서 접속한 proxmox입니다. 정상 접근 가능한지 확인했습니다.
지금까지 proxmox에 openvpn이 필요한 이유와 설치 및 연결 방법까지 확인해봤습니다.
'기타 > Xen,Proxmox' 카테고리의 다른 글
Proxmox) Nignx Proxy Manager,나만의 domain 설정하기 (리버스 프록시) (0) | 2025.05.10 |
---|---|
Proxmox) Proxmox 스토리지 완전 재구성기(lvm-thin, directory) (0) | 2025.05.06 |
Proxmox) 클러스터 구성해보기_하나의 Web으로 상태 확인 (0) | 2025.04.19 |
proxmox) wifi로 연결해보기 (이유: 그냥) (0) | 2025.03.15 |
Xen) Run out of space while coalescing 조치 (0) | 2022.08.21 |