본문 바로가기
IT/HomeLabs

[HomeLaps] WireGuard VPN 새 클라이언트(Peer) 추가 완벽 가이드: 13년 차 엔지니어의 홈랩 접속법

by 수누다 2026. 3. 10.

들어가며: 외부에서 내 홈랩을 가장 빠르고 안전하게 통제하는 방법

안녕하세요, 13년 차 시스템 엔지니어 박순우입니다.

최근 제 블로그를 통해 Proxmox와 LXC 기반의 초경량 홈랩 아키텍처를 소개해 드렸는데요. 서버실을 완벽하게 세팅했다면, 그다음으로 필요한 것은 '언제 어디서든 안전하게 접근할 수 있는 통신망'입니다. 4남매를 피해(?) 거실 소파나 외부 카페에서 ROG Ally X나 스마트폰으로 홈랩 대시보드에 접속하려면 VPN은 필수입니다.

수많은 VPN 솔루션 중에서도 저는 압도적인 속도와 가벼움을 자랑하는 WireGuard(와이어가드)를 메인으로 운용하고 있습니다. 오늘은 처음 세팅 이후 시간이 지나면 헷갈리기 쉬운 '새로운 클라이언트(핸드폰, 노트북 등) 기기를 피어(Peer)로 추가하는 방법'을 엔지니어의 시각에서 완벽하게 정리해 드리겠습니다. 수동 설정부터 자동화 스크립트까지, 이 글 하나면 끝납니다.

1. 수동으로 새 피어(Peer) 추가하기: 아키텍처의 이해

WireGuard는 철저하게 공개키/개인키 기반의 1:1 통신(Peer-to-Peer)을 수행합니다. 따라서 새 기기를 추가하려면 1) 클라이언트에서 키를 만들고, 2) 서버에 그 키를 등록하는 과정이 필요합니다.

📱 1단계: 새 클라이언트(핸드폰/노트북) 설정 및 키 생성

가장 먼저 연결할 기기에 WireGuard 앱을 설치하고 빈 터널을 하나 생성합니다. 이때 생성되는 PrivateKey(개인키)를 기반으로 설정을 작성합니다.

[Interface]
PrivateKey = [새 클라이언트에서 자동 생성된 개인키]
Address = 10.10.x.x/32  # 세 번째 클라이언트라면 .3 할당
DNS = 8.8.8.8

[Peer]
# 서버의 공개키 (서버에서 wg show public-key 명령어로 확인)
PublicKey = [서버 공개키]  
Endpoint = xxx.xxx.xxx.xxx:xxx  # 서버의 공인 IP와 포트 (포트 포워딩)
AllowedIPs = 0.0.0.0/0  # 모든 트래픽을 VPN으로 태움 (또는 내부망 대역만 설정 가능)

클라이언트 설정이 끝났다면, 서버에 등록할 '클라이언트의 공개키(PublicKey)'를 알아내야 합니다. 클라이언트 터미널에서 아래 명령어를 입력하여 공개키를 추출하고 메모해 둡니다.

echo "[클라이언트 PrivateKey]" | wg pubkey
# 결과 예시: XyZ123abc... (이 값을 서버에 등록해야 함)

🖥️ 2단계: 서버에 새 피어 등록 및 인터페이스 재시작

이제 서버(Proxmox 호스트 또는 VPN VM)에 SSH로 접속하여 설정을 수정합니다.

sudo nano /etc/wireguard/wg0.conf

파일 맨 아래로 이동하여 방금 생성한 클라이언트의 공개키와 할당할 내부 IP를 추가해 줍니다.

[Peer]
PublicKey = XyZ123abc...  # 1단계에서 메모한 새 클라이언트의 공개키
AllowedIPs = 10.10.x.x/32  # 클라이언트 Interface에 설정한 IP

설정을 저장한 후, 인터페이스를 재시작하여 변경 사항을 적용합니다.

sudo wg-quick down wg0 && sudo wg-quick up wg0
sudo wg show  # 새 피어가 정상적으로 올라왔는지 확인

📱 3단계: 연결 테스트 및 트러블슈팅

  1. 네트워크 분리: 스마트폰의 와이파이를 끄고 모바일 데이터(LTE/5G)로 전환한 뒤 WireGuard 터널을 켭니다.
  2. 서버 확인: 서버 터미널에서 sudo wg show를 입력하여 해당 피어의 latest handshake 시간이 갱신되는지 확인합니다.
  3. 통신 테스트: 클라이언트에서 VPN 게이트웨이(ping 10.10.0.1) 및 내부 홈랩 대역(ping 172.30.1.x)으로 핑이 나가는지, Proxmox 웹 UI가 열리는지 확인합니다.

2. 다중 피어 관리: 인프라의 확장

가족들의 기기나 여러 대의 서브 장비를 운용하다 보면 피어 목록이 길어집니다. 13년 차 엔지니어의 조언을 드리자면, /etc/wireguard/wg0.conf 파일에 주석(#)을 꼼꼼히 달아두는 것이 향후 유지보수에 엄청난 도움이 됩니다.

# --- 서버 설정 (Interface) 생략 ---

[Peer]  # 업무용 노트북
PublicKey = 피어1공개키
AllowedIPs = 10.10.x.x/32

[Peer]  # 메인 스마트폰 (Galaxy)
PublicKey = 피어2공개키  
AllowedIPs = 10.10.x.x/32

[Peer]  # 서브 게임기 (ROG Ally X)
PublicKey = 피어3공개키
AllowedIPs = 10.10.x.x/32

3. 13년 차 엔지니어의 귀차니즘 타파: 피어 자동 추가 스크립트

매번 수동으로 키를 생성하고 IP를 계산해서 넣는 것은 엔지니어의 미덕인 '귀차니즘(자동화)'에 위배됩니다. 아래 스크립트는 이 모든 과정을 명령어 한 줄로 끝내주는 마법의 Bash 스크립트입니다.

#!/bin/bash
# 파일명: /root/add-peer.sh

NAME=$1
if [ -z "$NAME" ]; then
  echo "사용법: ./add-peer.sh [클라이언트이름]"
  exit 1
fi

PRIVKEY=$(wg genkey)
PUBKEY=$(echo $PRIVKEY | wg pubkey)
# 기존 피어 개수를 카운트하여 다음 IP 주소(.2, .3, .4...)를 자동 계산
NEXT_IP=$(( $(grep -c '\[Peer\]' /etc/wireguard/wg0.conf) + 2 ))

# 1. 클라이언트에 전달할 설정 파일(.conf) 생성
echo "[Interface]
PrivateKey = $PRIVKEY
Address = 10.10.x.${NEXT_IP}/32
DNS = 8.8.8.8

[Peer]
PublicKey = $(wg show wg0 public-key)
Endpoint = xxx.xxx.xx.xx:xxx #외부ip와 포트
AllowedIPs = 0.0.0.0/0" > /tmp/${NAME}.conf

# 2. 서버 설정에 새 피어 자동 추가
echo "
[Peer]
# $NAME
PublicKey = $PUBKEY
AllowedIPs = 10.10.x.${NEXT_IP}/32" >> /etc/wireguard/wg0.conf

# 3. 서비스 재시작
wg-quick down wg0 && wg-quick up wg0

echo "✅ 성공: 클라이언트 설정 파일이 /tmp/${NAME}.conf 에 생성되었습니다."
echo "해당 파일의 내용을 클라이언트 기기에 복사하거나 QR 코드로 변환하여 사용하세요."

사용 방법:
서버에 스크립트를 만들고 실행 권한을 부여한 뒤, 원하는 기기 이름만 넣고 실행하면 끝입니다.

chmod +x /root/add-peer.sh
/root/add-peer.sh phone2

요약 및 결론: 보안 통신망도 결국 인프라의 일부

  1. 원리: WireGuard는 철저한 키 교환 방식이므로, 클라이언트 개인키/공개키서버 개인키/공개키의 매핑을 정확히 이해해야 합니다.
  2. 관리: IP 대역폭(10.10.x.x/32)이 겹치지 않도록 주의하고, 설정 파일에 반드시 주석으로 기기 명을 명시하세요.
  3. 자동화: 반복되는 작업은 쉘 스크립트(Bash)로 만들어 휴먼 에러를 방지하고 작업 속도를 극대화하는 것이 엔지니어링의 기본입니다.

저는 이 스크립트를 만들어 둔 덕분에 새로운 기기를 들이거나 4남매가 쓸 태블릿을 추가할 때도 단 1분 만에 안전한 인트라넷 환경을 구축하고 있습니다. 복잡한 OpenVPN이나 IPsec에 지치셨다면, 압도적으로 빠르고 간결한 WireGuard로 여러분의 홈랩 통신망을 업그레이드해 보시기 바랍니다.