Profile picture

[Linux] wireguard-ui를 활용해 VPN 클라이언트 쉽게 관리하기

JaehyoJJAng2024년 12월 03일

[번외] wireguard-ui를 활용해 클라이언트 키 생성하기


image


wireguard 설정을 웹 UI로 관리할 수 있는 wireguard-ui를 사용하면,

브라우저 상에서 손쉽게 피어(클라이언트) 추가 및 키 생성이 가능합니다!


주의사항

wiregurad-ui를 사용하는 경우,

이전에 사용하던 /etc/wireguard/wg0.conf 파일은 wireguard-ui에서 설정한 내용으로 새롭게 덧씌워집니다!


사전 준비

  • Docker 설치: Docker 및 Docker Compose가 설치되어 있어야 합니다.
  • WireGuard 설정 디렉터리: 서버의 /etc/wireguard 디렉터리를 사용합니다.
  • 필요 권한: 컨테이너에 NET_ADMIN, SYS_MODULE 권한을 부여해야 합니다.

wireguard-ui 설치하기

  • 최신 설치 코드는 다음 링크를 참고하세요!

도커 컴포즈를 사용하는 경우 아래 명령어를 실행하여 도커 컴포즈를 다운로드 받으세요!

wget -O docker-compose.yaml https://raw.githubusercontent.com/ngoduykhanh/wireguard-ui/refs/heads/master/docker-compose.yaml

옵션 설명

  • -p 5000:5000: 컨테이너의 5000번 포트를 호스트에 노출합니다.
  • /etc/wireguard:/etc/wireguard: 서버의 WireGuard 설정 파일 디렉터리를 컨테이너와 공유합니다.
  • ./db:/app/db: wireguard-ui의 데이터(피어 목록 등)를 저장할 로컬 디렉터리입니다. 실제 경로로 변경하세요.
  • --cap-add=NET_ADMIN: 네트워크 및 모듈 관리 권한 부여


서버 설정 수정하기

이전에 서버 구성 파일 작성 챕터에서 /etc/wireguard/wg0.conf 파일에 직접 코드를 작성했었죠?


wiregurad-ui에서는 웹 UI에서 변경해야 합니다!


실제로 wireguard-ui를 실행하고 /etc/wireguard/wg0.conf 파일 상단을 보면

아래와 같이 파일을 직접 수정하지 말라고 되어있어요!

# This file was generated using wireguard-ui (https://github.com/ngoduykhanh/wireguard-ui)
# Please don't modify it manually, otherwise your change might get replaced.

서버 설정은 웹 UI로 이동한 후에, Wireguard Server 탭으로 이동하여

wg0.conf에서 작성했던 내용 그대로 작성해주고

우측 상단에 Appliy config 버튼을 눌러주면 됩니다. Image



키페어 생성

지금까지는 클라이언트 측에서 별도로 개인키, 공개키를 생성 한 후,

그 공개키를 서버의 /etc/wireguard/wg0.conf 파일 내 [Peer] 섹션에다가 그 키 값을 직접 입력했었는데요!

[Peer]
PublicKey = 클라이언트에서_생성한_공개키
AllowedIPs = 10.0.0.2/32

wireguard-ui는 웹 UI를 통해 피어(클라이언트)를 자동으로 추가할 수 있도록 도와주니까

위처럼 수동으로 작성할 필요는 없어요!


[Peer] 섹션

  • 서버의 /etc/wireguard/wg0.conf 파일은 초기 [Interface] 설정만 수동으로 작성해두고, 피어에 관한 부분은 wireguard-ui가 추가하도록 할 수 있습니다.
    • 즉, wireguard-ui에서 새 피어를 추가하면 해당 피어의 공개키, 내부 IP, 기타 필요한 옵션들이 자동으로 [Peer] 섹션에 기록됩니다.

그럼 이제 키 생성 방법에 대해서 알아볼까요?



웹 인터페이스 접속

브라우저에서 wireguard-ui에 접속합니다.


피어 추가

UI 상단의 Wireguard Clients를 눌러 이동해주세요!


키 생성

New Client 버튼을 눌러 새로운 클라이언트를 생성해봅시다!
Image


IP Allocation은 VPN에 접속했을 때 할당받을 나의 IP 주소로 입력해주시면 됩니다!



AllowedIPs

그리고 밑에 Allowed IPs에 기본 값으로 0.0.0.0/0으로 설정이 되어있을텐데요

AllowedIPs 설정은 Wireguard의 라우팅 및 트래픽 제어에 핵심 역할을 해요!

AllowedIPs의 역할을 확인해볼까요?


라우팅 정보

  • AllowedIPs에 지정된 IP 대역은 해당 피어를 통해 전달해야 하는 트래픽의 목적지를 의미합니다.
  • 예를 들어, 클라이언트 피어의 AllowedIPs에 10.0.0.0/24가 있다면, 서버는 이 대역으로 향하는 모든 패킷을 VPN 터널로 보내게 됩니다.

액세스 제어

  • 또한, 어떤 피어가 어떤 IP 대역에 접근할 수 있는지를 결정하는 ACL(Access Control List) 역할도 합니다.


참고로 주의사항도 존재합니다!

0.0.0.0/0을 설정하게 되면 다음과 같은 문제가 발생할 수 있어요! 잘 읽어보세요.

너무 광범위한 라우팅
  • 만약 서버의 피어 설정(클라이언트에 대한 AllowedIPs)을 0.0.0.0/0으로 지정하면, WireGuard는 해당 피어가 “모든 IP 주소”를 소유하고 있다고 인식합니다.
  • 그 결과, 서버는 내부 LAN(예: 10.0.0.0/24)이나 외부 인터넷으로 가는 모든 트래픽을 그 피어로 보내려고 시도합니다.

올바른 트래픽 분배 불가

  • 일반적으로 서버에서는 피어마다 고유의 VPN IP (예: 10.0.0.3/32)를 할당합니다.
  • 0.0.0.0/0로 설정하면, 서버는 “어떤 목적지든” 해당 피어에게 전달하게 되어, 다른 네트워크(내부 LAN 또는 인터넷)로의 올바른 라우팅이 이루어지지 않습니다.

결과

  • VPN 클라이언트가 내부망이나 외부망에 접근하려 할 때, 서버는 모든 트래픽을 그 클라이언트로 보내므로, 다른 경로(내부 LAN의 다른 장비나 인터넷 게이트웨이)로 전달되지 않아 통신이 이루어지지 않게 됩니다.

이제 생성하면 다음과 같이 클라이언트 키 파일 목록이 뜰거에요!
Image



wg0 인터페이스 재시작!

wireguard-ui 웹 UI에서 서버 설정을 완료하고, 클라이언트 생성까지 마쳤다면 /etc/wireguard/wg0.conf

새로운 설정이 저장되었을텐데요!

이를 wg0 인터페이스에 반영하기 위해서 아래 명령어를 실행해줍시다.

wg-quick down wg0
wg-quick up wg0

접속 테스트

이제 모든 설정이 끝났다면,

내부망에 정상적으로 접근할 수 있는지 테스트를 해봐야겠죠?


wireguard-ui 웹 UI에서 클라이언트 키 파일을 다운로드 받고

wireguard client 프로그램을 다운로드 받은 후에 해당 키 파일을 넣어 내부망에 접속해보도록 합시다!


저는 Iphone에서 wireguard 클라이언트 프로그램을 다운로드 받고 접속한 상태에서

VPN 서버의 터미널로 이동하여 wg 명령을 사용해봤습니다. (Peer 상태 확인 가능해요)
Image
그리고 Peer 접속 현황은 웹 UI의 Status 탭에서도 확인 가능해요!

    Tag -

Loading script...