Skip to content

WireGuard VPN 구축기와 첫 오픈소스 기여까지

Local Up 개발 당시 운영 서버의 DB 접근 문제로 VPN 도입을 고민했었다. 현재 운영 서버는 가정에서 돌리는 작은 서버로, 공유기를 통해 외부 네트워크와 연결되어 있었다.

현재는 VPN 대신 Cloudflare에서 제공하는 터널 기능(SSH 터널)으로 문제를 해결했다. 덕분에 공유기 포트포워딩 없이 지금까지도 잘 사용하고 있다.

하지만 당시 도입을 고민했던 VPN에 대해 정리해보고자 한다. 실제로 구축해보면서 배운 내용들과 각 솔루션들의 장단점, 그리고 개인 서버 환경에서의 VPN 선택 기준에 대해 다뤄보려 한다.

VPN이 필요한 상황

집에서 돌리는 서버에 외부에서 안전하게 접근하려면 몇 가지 방법이 있다. 포트포워딩을 열어서 SSH나 HTTPS로 직접 접근하는 방법도 있지만, 공유기 설정도 까다롭고 보안 위험도 크다. 특정 포트를 인터넷에 그대로 노출시키는 건 부담스럽다.

VPN은 이런 상황에서 괜찮은 해결책이다. 가상의 사설 네트워크를 만들어서 외부에서도 마치 같은 로컬 네트워크에 있는 것처럼 접근할 수 있게 해준다. 터널링이라는 방식으로 데이터를 암호화해서 전송하니까 보안도 어느 정도 해결된다.

VPN 솔루션 비교

VPN 기술은 오랜 역사를 가지고 있어 다양한 프로토콜들이 존재한다. 가장 오래된 IPSec은 네트워크 레벨에서 동작하여 강력한 보안을 제공하지만, 설정이 매우 복잡하고 NAT 환경에서 통과 문제를 겪는 경우가 많다. 특히 가정용 공유기 환경에서는 추가적인 설정이 필요해 개인 사용자에게는 부담스럽다.

PPTP나 L2TP 같은 구형 프로토콜들은 보안 취약점 때문에 더 이상 쓰기 어려울 것 같다. PPTP는 1990년대 기술이라 암호화가 약하고, 중간자 공격이나 브루트포스 공격에 쉽게 뚫린다.

Technical Vulnerabilities of VPNs

The outdated encryption algorithms used in the PPTP protocol are easily broken through "man in the middle" type attacks or strong password brute force attacks, thus allowing anyone with the proper knowledge to intercept communications passing through the system.

마이크로소프트도 2024년에 향후 Windows Server에서 PPTP와 L2TP 지원을 중단한다고 발표했다.

What deprecation means for PPTP and L2TP?

PPTP and L2TP have been reliable workhorses in the world of VPN technology. However, with the increasing sophistication of cyber threats, these protocols have become less effective in providing the robust security necessary to protect our data. Their vulnerabilities have been well-documented, and they are no longer sufficient to meet the current security standards.

현재 VPN 시장에서 가장 널리 사용되는 것은 OpenVPN과 WireGuard다. OpenVPN은 2001년에 출시된 이후 20년 넘게 발전해온 성숙한 솔루션이다. ID/PW 인증부터 X.509 인증서, LDAP 연동까지 다양한 인증 방식을 지원하며, 세밀한 접근 제어와 로깅 기능을 제공한다. 하지만 이러한 풍부한 기능은 복잡한 설정과 상당한 리소스 사용량을 동반한다. 특히 인증서 관리나 설정 파일 작성이 초보자에게는 진입 장벽이 될 수 있다.

WireGuard는 2016년에 등장한 비교적 새로운 솔루션으로, 간단함을 최우선으로 설계되었다. 오직 키 기반 인증만을 사용하며, 최신 암호화 알고리즘인 ChaCha20과 Curve25519를 고정적으로 사용한다. 이로 인해 설정이 매우 간단해지고, 성능도 OpenVPN 대비 현저히 향상되었다. 코드베이스도 OpenVPN의 1/10 수준으로 작아 버그 발생 가능성이 낮고 보안 감사도 용이하다.

클라우드 기반 관리형 서비스로는 Tailscale이 있다. WireGuard를 기반으로 하되 중앙 관리 서버를 통해 설정을 자동화하고, 웹 인터페이스로 쉽게 관리할 수 있다.

하지만 외부 서비스에 의존해야 하고, 무료 플랜의 제한이 있어 개인 서버 환경에서는 자유도가 떨어진다.

개인 프로젝트의 특성상 간단한 관리와 가벼운 리소스 사용이 중요했다. WireGuard는 복잡한 인증 시스템이 필요 없고, 설정 파일 몇 줄로 안정적인 VPN을 구축할 수 있어 최적의 선택이었다.

WireGuard 살펴보기

여러 연구 결과에 따르면 WireGuard는 전반적으로 OpenVPN보다 더 높은 처리량과 낮은 지연 시간을 보인다. AWS 인스턴스 및 로컬 VM 환경에서 측정한 결과, WireGuard는 멀티코어 활용과 경량 코드베이스덕분에 OpenVPN보다 일관되게 더 높은 성능을 기록하였다. 다른 연구 결과에서는 VMware 환경에서 WireGuard의 TCP 처리량이 약 210 Mbps로 OpenVPN(110 Mbps)의 두 배 수준이었고 패킷 손실률도 낮았다. 반면 Azure 환경에서는 기본 처리량이 두 프로토콜 간 유사했으며, 고지연 상황에서는 오히려 OpenVPN이 더 나은 처리량을 보이기도 했다.

즉, WireGuard는 대체로 빠르고 효율적이지만, 특정 네트워크 조건에서는 OpenVPN이 더 적합할 수도 있다.

WireGuard 설치

설치 과정 자체는 WireGuard 공식 가이드에 잘 정리되어 있으므로, 본 글에서는 별도로 다루지 않는다.

클라우드 환경에서 WireGuard를 사용할 경우 포트 설정에 유의해야 한다. 예를 들어 AWS의 보안 그룹, 오라클 클라우드의 보안 규칙 등에서 기본 포트인 UDP 51820을 허용해야 한다. 또한 자체 방화벽을 사용한다면 해당 포트가 정상적으로 열려 있는지 반드시 확인해야 한다.

웹 기반 관리 인터페이스는 대표적으로 두 가지가 있다.

  • wg-easy: 직관적이고 사용하기 편리한 인터페이스
  • wireguard-ui: Go 기반의 단순한 인터페이스

처음에는 APT 패키지를 이용해 WireGuard를 설치하고 정상적으로 연결되는 것을 확인하였다. 이후 wg-easy를 사용해 보았는데, 이 경우 Docker 컨테이너에 WireGuard가 모두 포함되어 있어 별도의 설치 과정이 필요 없다는 점에서 상당히 편리하다고 느꼈다.

다만 wg-easy는 HTTPS 연결만 허용한다. 즉, TLS 인증서가 반드시 필요하다. 단순히 테스트 용도로 사용할 경우 예상치 못한 추가 요구사항이 될 수 있으며, 이로 인해 다소 번거로울 수 있다. 작성 당시 도메인과 TLS 인증서를 이미 보유하고 있었으나, 실제로 적용하지는 않았다.

마치며

결과적으로는 Cloudflare 터널을 사용했지만, WireGuard를 통해 VPN의 원리와 현대적인 구현 방식을 학습할 수 있었다. 특히 기존의 복잡한 VPN 솔루션 대비 WireGuard의 단순함과 효율성이 인상적이었다.

개인 서버나 소규모 팀 환경에서는 WireGuard가 좋은 선택이 될 것이다. 다만 대규모 기업 환경에서는 사용자 관리나 접근 제어 등의 고급 기능이 필요할 수 있어 검토가 필요하다.

2025-09-02 추가: wg-easy 한글화 작업과 첫 오픈소스 기여

wg-easy를 사용하면서 한글 지원이 되지 않는 부분을 발견했다. v15.1.0에는 한국어 번역이 없었고, 누군가가 한국어 번역 작업을 해둔 상태여서 v15.2.0에 추가 예정이였다. en 언어와 비교했을 때 누락된 부분이 있었고, "이중 인증", "2단계 인증" 과 같이 같은 내용은 다르게 표시한 것을 확인했다. 작업한 내용을 정리해서 Pull Request로 제출했고, 리뷰를 거쳐 머지되었다.

크지 않은 기여였지만 오픈소스 프로젝트에 얼떨결에 참여하는 첫 경험이 되었다.

Released under the MIT License.