회사를 그만두고 프리랜서 개발자로 활동하며, 출장이 잦아 집이 아닌 장소에서 개발하는 일이 많아졌습니다.
특히 GPU를 활용한 작업이 필요할 때가 있는데, GPU가 탑재된 노트북은 무겁고 휴대성이 떨어지기 때문에 집에 우분투(Ubuntu) 기반의 데스크톱을 구축하여 원격으로 작업하는 방법을 선택했습니다.
집에서 작업할 때는 내부 네트워크(사설 IP)를 이용하여 원격 접속이 가능하지만,
외부에서는 내부 IP에 직접 접근할 수 없기 때문에 공인 IP를 통해 원격 접속을 해야 합니다.
그러나 공인 IP를 외부에서 접근할 수 있도록 개방하면 보안 취약점이 발생합니다.
VPN을 사용하면 외부 네트워크에서도 집 내부 네트워크에 연결된 것처럼 동작할 수 있습니다. 즉, 집에서 내부 IP(사설 IP)로만 접근 가능한 장치에도 외부에서 안전하게 접근할 수 있게 됩니다.
따라서 VPN을 쓰기 위해 여러 VPN 서비스에 대해 알아보았습니다. 비용을 지불하고 편리하게 사용할 수 있는 VPN, 직접 설치하여 쓰는 오픈소스 VPN 등이 있었는데, 최신 기술이 적용된 WireGuard가 설정이 간편하면서도 성능이 뛰어나므로 WireGuard를 사용하여 직접 VPN 서버를 구축하기로 결정하게 되었습니다.
우선, WireGuard 서버가 실행될 우분투 시스템의 사설 IP(내부 IP)를 고정해야 합니다. (라우터에서 내부 IP를 DHCP로 자동 할당하면 변경될 수 있기 때문에 고정 설정이 필요합니다.)
ip addr show
2: enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
inet 192.168.45.177/24 brd 192.168.45.255 scope global dynamic enp5s0
sudo nano /etc/netplan/01-network-manager-all.yaml

이후 아래 명령어를 통해 변경사항을 적용하면 됩니다.
이제 내부 네트워크에서 192.168.45.177을 항상 유지할 수 있습니다
sudo netplan apply
WireGuard 서버를 우분투에 설치하는 방법은 여러 가지가 있지만,
설정을 간편하게 하기 위해 Docker 컨테이너를 이용하여 설치합니다.
컨테이너를 만들기 위한 도커 이미지는 도커 허브에서 검색하여 쉽게 다운받을 수 있습니다. 아래 링크를 참조하여 도커 허브에서 이미지를 다운받습니다.
공식 이미지 링크 : https://hub.docker.com/r/linuxserver/wireguard
도커 이미지 다운로드 명령어:
docker pull linuxserver/wireguard
특정 아이피와 포트 설정을 진행합니다.

외부 포트 시작과 끝은 외부에서 접속할 같은 포트 번호로 작성해주면 됩니다. 내부 ip는 wireguard가 실행되 컴퓨터의 사설(내부)IP로 설정하고 내부 포트 시작 및 끝은 wireguard가 수신하는 포트번호입니다. 마찬가지로 같은 값으로 설정하면 되고 기본값은 51820 입니다.
내부 ip는 위에서 설정해준 값으로 하시면 됩니다. 어려우시면 1,2,3,4 모두 51820 으로 하셔도 괜찮습니다. 설정 후 외부에서 nmap이라는 프로그램을 설치하시거나 터미널 명령어를 사용해서 해당 포트가 잘 열려있는지 체크해줍니다. 명령어는 다음과 같습니다.
sudo nmap -sU -p 51820 <공인IP> # 우분투 명령어
우분투 방화벽을 사용하는 경우 아래 명령어를 사용하여 UDP 포트를 열어야합니다.
sudo ufw allow 51820/udp
sudo ufw enable
네트워크 설정이 완료되었으면, 다운받은 wireguard 이미지를 이용해 컨테이너를 생성하고 해당 컨테이너에서 설정을 마무리해줍니다.
저는 아래의 명령어를 이용해 컨테이너를 만들었습니다.
docker run -d \
--name=wireguard \
--cap-add=NET_ADMIN \
-e SERVERURL=<공인IP> \
-e SERVERPORT=51820 \
-p 51820:51820/udp \
-v /path/to/wireguard/config:/config \
--restart unless-stopped \
lscr.io/linuxserver/wireguard:latest
컨테이너가 만들어졌으면, 해당 컨테이너로 접속합니다.
docker exec -it wireguard bash
이후 wireguard 설정 파일로 진입합니다.
vi /config/wg_confs/wg0.conf
항목 중에서 ListenPort가 설정한 외부포트로 설정되어있는지 확인합니다.
이후 /config/peer1 경로에 접속하여 아래 두 파일을 다운로드 합니다.
윈도우의 경우 wireguard 클라이언트 파일을 받아 peer1.conf 파일을 업로드하면 VPN 연결이 활성화되는 것을 확인할 수 있었습니다.
하루 정도만 투자하면 무료로 안전한 원격 작업 환경을 구축할 수 있으니, 저와 비슷한 상황이신 분들은 한번쯤 사용해보시길 권장드립니다.