wireguard 설치 - 1

김민수·2025년 1월 29일

배경

회사를 그만두고 프리랜서 개발자로 활동하며, 출장이 잦아 집이 아닌 장소에서 개발하는 일이 많아졌습니다.
특히 GPU를 활용한 작업이 필요할 때가 있는데, GPU가 탑재된 노트북은 무겁고 휴대성이 떨어지기 때문에 집에 우분투(Ubuntu) 기반의 데스크톱을 구축하여 원격으로 작업하는 방법을 선택했습니다.

문제점

집에서 작업할 때는 내부 네트워크(사설 IP)를 이용하여 원격 접속이 가능하지만,
외부에서는 내부 IP에 직접 접근할 수 없기 때문에 공인 IP를 통해 원격 접속을 해야 합니다.
그러나 공인 IP를 외부에서 접근할 수 있도록 개방하면 보안 취약점이 발생합니다.

보안 위험 요소:

  • 공개된 SSH 포트 → 자동화된 공격(Brute-force, Dictionary Attack) 대상이 될 가능성이 큼.
  • 포트 스캐닝 → 해커가 특정 포트를 통해 원격 접근을 시도할 위험이 있음.
  • DDoS 공격 위험 → 공인 IP가 알려지면 네트워크 공격 대상이 될 가능성이 있음.

대안: VPN을 활용한 원격 접속

VPN을 사용하면 외부 네트워크에서도 집 내부 네트워크에 연결된 것처럼 동작할 수 있습니다. 즉, 집에서 내부 IP(사설 IP)로만 접근 가능한 장치에도 외부에서 안전하게 접근할 수 있게 됩니다.

따라서 VPN을 쓰기 위해 여러 VPN 서비스에 대해 알아보았습니다. 비용을 지불하고 편리하게 사용할 수 있는 VPN, 직접 설치하여 쓰는 오픈소스 VPN 등이 있었는데, 최신 기술이 적용된 WireGuard가 설정이 간편하면서도 성능이 뛰어나므로 WireGuard를 사용하여 직접 VPN 서버를 구축하기로 결정하게 되었습니다.

설치 및 설정 과정

우선, WireGuard 서버가 실행될 우분투 시스템의 사설 IP(내부 IP)를 고정해야 합니다. (라우터에서 내부 IP를 DHCP로 자동 할당하면 변경될 수 있기 때문에 고정 설정이 필요합니다.)

1. 내부 IP 확인

ip addr show

1-2. 출력 예시

2: enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
    inet 192.168.45.177/24 brd 192.168.45.255 scope global dynamic enp5s0

2. 내부 IP 고정 설정 방법

2-1. 네트워크 설정 파일 접근

  • 저의 경우는 /etc/netplan/01-network-manager-all.yaml 경로에 네트워크 설정파일이 위치하고 있습니다.
sudo nano /etc/netplan/01-network-manager-all.yaml

2-2. 내용 수정

  • 아래 캡쳐된 이미지처럼 사용할 IP를 사설IP 대역에서 설정해주시면 됩니다.
  • 간략히 아래 이미지에 대해 설명드리면
    • dhcp4: no -> 자동할당 비활성화(고정 ip 사용)
    • gateway4 -> 라우터(공유기 IP)
    • address(192.168.45.177/24) -> 고정 ip 설정
      24는 네트워크와 호스트를 구분하는 범위를 알려줍니다.
    • 총 32비트(4바이트) 숫자에서 네트워크 부분이 24비트, 호스트 부분이 8비트임을 나타냅니다. 따라서 뒤의 8비트 부분의 숫자를 다르게 하여 192.168.45.1 ~ 192 168.45.254 범위의 IP를 실제 장치에 할당할 수 있습니다.
    • nameservers -> DNS 서버 설정 (라우터 및 Google DNS)

2-3. 설정 적용

이후 아래 명령어를 통해 변경사항을 적용하면 됩니다.
이제 내부 네트워크에서 192.168.45.177을 항상 유지할 수 있습니다

sudo netplan apply

3. wireguard 설치

WireGuard 서버를 우분투에 설치하는 방법은 여러 가지가 있지만,
설정을 간편하게 하기 위해 Docker 컨테이너를 이용하여 설치합니다.

컨테이너를 만들기 위한 도커 이미지는 도커 허브에서 검색하여 쉽게 다운받을 수 있습니다. 아래 링크를 참조하여 도커 허브에서 이미지를 다운받습니다.

공식 이미지 링크 : https://hub.docker.com/r/linuxserver/wireguard
도커 이미지 다운로드 명령어:

docker pull linuxserver/wireguard

4. 포트 포워딩 설정

특정 아이피와 포트 설정을 진행합니다.

외부 포트 시작과 끝은 외부에서 접속할 같은 포트 번호로 작성해주면 됩니다. 내부 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

5. WireGuard 컨테이너 실행

네트워크 설정이 완료되었으면, 다운받은 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
  • SERVERURL: 공인 IP 또는 DDNS 주소 입력
  • SERVERPORT: 51820 (기본값)
  • -p 51820:51820/udp: 포트 포워딩 적용

컨테이너가 만들어졌으면, 해당 컨테이너로 접속합니다.

docker exec -it wireguard bash

이후 wireguard 설정 파일로 진입합니다.

vi /config/wg_confs/wg0.conf

항목 중에서 ListenPort가 설정한 외부포트로 설정되어있는지 확인합니다.

이후 /config/peer1 경로에 접속하여 아래 두 파일을 다운로드 합니다.

  • peer1.conf 파일을 WireGuard 클라이언트에 등록
  • peer1.png 파일(QR코드)을 모바일에서 WireGuard 앱으로 스캔하여 연결 가능

윈도우의 경우 wireguard 클라이언트 파일을 받아 peer1.conf 파일을 업로드하면 VPN 연결이 활성화되는 것을 확인할 수 있었습니다.

하루 정도만 투자하면 무료로 안전한 원격 작업 환경을 구축할 수 있으니, 저와 비슷한 상황이신 분들은 한번쯤 사용해보시길 권장드립니다.

profile
인공지능을 공부하고 가르치는 김민수 강사입니다. 공부한 내용 및 수업 자료가 업로드 됩니다.

0개의 댓글