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

말이 샐러드가 되어가 / なみぐる

얘는 그냥 장르폭이 넓음... 보카코레 출품곡인 즌다몬머시기들로 접했었는데 다양하게 잘 만드시는거같아요 M/V 영상 Lyrics 가사 また頭の中身がまとまらなくて 마타 아타마노 나카미가 마토마라나쿠테 또다시 머릿속이 정리되지 않아서 言葉がサラダになっていく 코토바가 사라다니 낫테이쿠 말이 샐러드가 되어가 出力された無意味の羅列で 슈츠료쿠사레타 무이미노 라레츠데 출력되어지는 무의미한 나열으로 視界が緑になっていく 시카이가 미도리니 낫테이쿠 시야가 초록색이 되어가 とりとめのない孤独な言葉が 토리토메노 나이 코도쿠나

By 박성훈

당신밖에 보이지 않아 / r-906

r-906의 따끈따끈한 신곡 간간히 나오는 사진이라던지 중간의 멜로디파트 등을 통해서 Catchy?! 의 후속곡임을 쉽게 알아볼 수 있습니다 M/V 영상 Lyrics 가사 きっと運命の寵児 킷토 운메이노 초우지 분명 운명에게 사랑받아 まるで魔性の物語(ストーリー) 마루데 마쇼우노 스토리 마치 마성과 같은 스토리 誰もが釘付けの一等星 다레모가 쿠기즈케노 잇토우세이 모두가 점찍어둔1 일등성 でもね 데모네 그치만 あなたも知らないあなたを 아나타모

By 박성훈

boj 24915 센터가 돋보여야 해

금광세그와 boj 16993최근 ett/hld도 그렇고, 구간에 대해서 다루는 쿼리에 대해서 좀 깊게 공부해보고 있다. 일반적인 부분합 세그먼트 트리와는 다른 형태의 문제들을 해결해보고 있기에, 발상을 좀 정리해보고자 한다. 세그먼트 트리와 구간 세그먼트 트리의 주요 조건 및 세그트리가 주로 필요한 장소는 * 구간에 대한 쿼리를 진행하면서 * 각 쿼리당 처리시간이 빨라야 하고 * 인접한

By 박성훈

금광세그와 boj 16993

최근 ett/hld도 그렇고, 구간에 대해서 다루는 쿼리에 대해서 좀 깊게 공부해보고 있다. 일반적인 부분합 세그먼트 트리와는 다른 형태의 문제들을 해결해보고 있기에, 발상을 좀 정리해보고자 한다. 세그먼트 트리와 구간 세그먼트 트리의 주요 조건 및 세그트리가 주로 필요한 장소는 * 구간에 대한 쿼리를 진행하면서 * 각 쿼리당 처리시간이 빨라야 하고 * 인접한 두 구간이

By 박성훈