wg-easy 구축을 통한 vpn 사용

저는 지금 서울에서 기숙사 생활을 하고 있는데, 기숙사 생활 와중에도 본가에서 열심히 작동중인 서버에 접근하기 위해서는 필연적으로 vpn을 사용해야 했습니다.

pptp 등의 일반적인 VPN 프로토콜과 비교했을때 wireguard는 속도나 안전성 면에서 장점을 보이기 때문에, 개인서버를 구축하시는 분들이 많이들 선택하고는 하시는데 wireguard는 터미널 기반의 vpn 프로그램이라 클라이언트 기기들을 추가하기가 조금 귀찮다는 단점이 있습니다.

도커 이미지 wg-easy를 통해서, wireguard를 보다 쉽게 관리할 수 있도록 해보겠습니다.

wg-easy vs wireguard-ui

공식 깃허브에서 주장하고있는 wg-easy의 기능들은 아래와 같습니다

  • 웹 UI 제공
  • 간편한 설치
  • 클라이언트 관리가 편함(QR코드, 설정파일 다운로드 등)
  • 기기별 다운로드/업로드 통계 지원
  • Gravatar 지원(해외의 프로필 관리 서비스)
  • 다크모드

잡다하게 지원하는거같긴한데 솔직히 말하자면 그냥 이뻐서 사용한다고 생각해주시면 될거같습니다. 다른 대안으로 사용되는 wireguard-ui 의 사진은 아래와 같습니다.

Web UIs for WireGuard That Make Configuration Easier | by Tate Galbraith |  The Startup | Medium

부트스트랩을 사용한 티가 확 나는;;

이에 비해서 wg-easy에서의 화면은 아래와 같습니다.

Easy to setup, all-in-one WireGuard and Management Web UI : r/selfhosted

UI가 조금더 이쁜 맛에 사용하는거 같습니다. 사실 셀프호스팅이 또 이런거 찾아다니는 맛이 있는거 같아요. 다양한 대안들 중에 본인 눈으로 보기에 이쁘다 싶은거 사용하시면 됩니다 후후

Docker를 통한 설치

공식 레포지토리 상에서 wg-easy를 설치하기 위한 명령어를 제공하고 있습니다

도커 이미지 파일을 제공하는 레포지토리 출처가 ghcr io인데, 해당 레포지토리는 portainer 무료 플랜에서 제공하고 있지 않기 때문에 명령어를 사용해서 컨테이너를 올려주면 됩니다.

$ docker run -d \
  --name=wg-easy \
  -e LANG=de \
  -e WG_HOST=🚨YOUR_SERVER_IP \
  -e PASSWORD=🚨YOUR_ADMIN_PASSWORD \
  -v ~/.wg-easy:/etc/wireguard \
  -p 51820:51820/udp \
  -p 51821:51821/tcp \
  --cap-add=NET_ADMIN \
  --cap-add=SYS_MODULE \
  --sysctl="net.ipv4.conf.all.src_valid_mark=1" \
  --sysctl="net.ipv4.ip_forward=1" \
  --restart unless-stopped \
  ghcr.io/wg-easy/wg-easy

여기서 중요한건 포트의 51820/udp 입니다.

저 포트를 통해서 wireguard가 클라이언트 기기들과의 통신을 구축하므로, 저 포트는 반드시 퍼블릭하게 공유되어야 합니다. 포트포워딩을 사용한 포트의 공유는 이 글에서는 따로 다루지 않겠습니다.

포트 51821은 관리자 페이지 포트이기 때문에, 정 반대로 일반적인 상황에서는 바깥으로 공유해서는 안됩니다. 저의 경우에는 nginx proxy manager를 통해서 로컬 ip 대역에서 접근했을 때에만 접속을 허용하고 있습니다.

WG_HOST 는 wg-easy가 노출되는 ip나 도메인을 적어주면 됩니다. 저는 nginx proxy manager를 통해서 도메인 주소를 하나 할당해주었으므로 그걸 그대로 적었습니다.

PASSWORD는 wg-easy 접속시 사용하는 관리자 비밀번호입니다. 편한대로 넣어주세요.

설정을 마친 모습입니다.

wg-easy는 깔끔담백하게 vpn을 연결하기 위한 최소한의 기능만을 제공하고 있는데, 서버 관리라는 저의 목적에는 그냥 모든 ip대역을 vpn을 타게 해주면 되기 때문에 큰 부담 없이 사용하기에 좋습니다.

첨언

만약 vpn에 걸리는 부담을 조금 줄이고 싶으시다면 컨테이너의 환경변수 설정 부분에서 WG_ALLOWED_IPS 에 내부망 ip만 vpn을 타게끔 작성해주면 됩니다.

저는 서버 환경의 내부 ip를 일반적인 기기랑 별도로 192.168.10.0/24 선에서 끊어서 분배하고 있으므로 환경변수도 똑같이 192.168.10.0/24 을 설정해주면, 내부 서버로 접속하고자 할 때에만 vpn을 타고 가게 될 것입니다.

클라이언트 측의 로컬 네트워크에 접근이 필요한 경우 설정이 조금 까다로워지는 것으로 알고 있는데, 저처럼 내부 서버에 대한 ip 대역을 미리 쪼개주면 크게 부담 없이 사용할 수 있을 듯 싶습니다. 적용은 안해봐서 확답은 못드립니다만...

결론

성능좋고 이쁘기까지 한 vpn 환경을 구축해 봤습니다. 저처럼 원격으로 서버에 붙어야 하는 분들에게는 꽤나 추천할 수 있는 솔루션이고, 최근 바꾼 널찍한 화면의 스마트폰을 통한 원격제어에 적극적으로 활용하지 않을까 싶습니다.

Read more

죽음의 수용소에서 - 빅터 프랭클

죽음의 수용소에서 - 빅터 프랭클

최근 밀리의서재 구독을 신청하며 책을 본격적으로 읽기 시작했다. 스타트를 끊었던 책인 빅터 프랭클의 <죽음의 수용소에서>를 읽으며 느꼈던 점들을 정리해 보고자 한다. 저자 저자 빅터 프랭클은 오스트리아 빈 출신의 신경정신과 교수이다. 1944년 아우슈비츠로 끌려가 여동생을 제외한 가족 모두를 잃었으며, 포로 수용소에서의 경험을 기반으로 심리치료 기법 <로고테라피>

By 박성훈

BOJ 31234 - 대역폭 관리

재미있는 문제여서 가져와봤습니다. 경인지역 대학연합 SHAKE 2023 문제인데, 이 대회를 칠 당시에는 hld를 안배웠어서 접근을 못했었던 문제였습니다. 그래도 나름 선방하기는 했었던 아레나였는데, 아마 이 문제를 시간내에 풀었더라면 퍼포 SSS를 띄웠을 것 같아요 한계 대역폭을 어떻게 처리하느냐가 핵심 아이디어인데, 구간 최댓값을 관리하는 lazy segment tree을 작성하고, 초기에 한계 대역폭 값을 음수로

By 박성훈

JENKINS_HOME is almost full 해결 - VM 용량확장

동아리 활동 관련해서 CI/CD를 구축할 일이 생겨서 간만에 젠킨스에 접속해 보았는데, 디렉토리 공간이 부족하다는 경고가 떠서 이를 해결해보도록 하겠다. 각 프로젝트의 오래된 로그를 제거 빌드할때마다 로그라던지를 기록하는데, 로그를 삭제하지 않기 때문에 가만히 내버려두고 있으면 파일이 점점 쌓인다. Pipeline > 구성 > 오래된 빌드 삭제 를 통해서 먼저 사용하지 않는

By 박성훈

tachiyomi 뷰어의 대안, mihon

카카오 엔터테인먼트의 요청 이후, tachiyomi 앱의 코어 개발자들이 지원 중단을 선언하였습니다. 지원 중단 및 프로그램 삭제에 따라 다음 문제들이 발생하게 되었는데, * tachiyomi의 레포 삭제 * tachiyomi의 다운로드 불가 * tachiyomi 내부 확장 프로그램 설치 불가 * 확장 프로그램 저장소의 삭제, tachiyomiSY 등의 호환 앱에서도 확장 설치 불가 그 중에서 확장 프로그램 저장소의 삭제가

By 박성훈