이 글에서는 라즈베리 파이(Raspberry Pi)에 직접 호스팅할 수 있는 VPN을 구축하는 방법을 소개합니다. 저는 라즈베리 파이의 열렬한 팬인데요, 이 작고 컴팩트한 컴퓨터는 저 같은 취미 개발자에게 없어서는 안 될 필수 도구이기 때문입니다.
이렇게 구축한 VPN을 사용하면 어디에 있든 마치 집에 있는 것처럼 홈 네트워크에 접속할 수 있습니다. "그게 왜 유용한데?"라고 물으실 수도 있습니다. 답은 간단합니다. 어느 곳에서든 항상 집 네트워크의 IP 주소를 그대로 사용할 수 있기 때문에 프라이버시 보호에 큰 도움이 됩니다.
이번 튜토리얼에서는 Tailscale을 사용합니다. Tailscale은 서로 다른 네트워크에 흩어진 기기와 서비스를 안전하게 연결해 주는 오픈소스 메시(mesh) VPN(Virtual Private Network) 서비스입니다. 오픈소스 WireGuard 프로토콜을 기반으로 암호화된 P2P 연결을 제공하며, 이는 오직 여러분의 사설 네트워크에 속한 기기들만 서로 통신할 수 있다는 의미입니다.
목차
- 사전 준비물
- 라즈베리 파이 OS Lite(32비트) 설치
- 라즈베리 파이 부팅
- SSH로 라즈베리 파이 접속 및 로그인
- 라즈베리 파이에 Tailscale 설치
- 키 만료(Key Expiry) 설정
- 라즈베리 파이를 Exit Node로 구성하기
- 마무리
사전 준비물
- 라즈베리 파이 (본 가이드는 라즈베리 파이 5 기준)
- Raspberry Pi Imager
- 마이크로 SD 카드 (8GB면 충분)
- 컴퓨터용 마이크로 SD 카드 리더기
- 홈 라우터
- Tailscale 계정
라즈베리 파이 OS Lite(32비트) 설치
먼저 준비한 마이크로 SD 카드에 라즈베리 파이 OS Lite(32비트)를 설치하겠습니다. 무료로 제공되는 Raspberry Pi Imager 소프트웨어를 활용하면 간편하게 진행할 수 있습니다.
Imager를 실행한 후, 먼저 사용 중인 라즈베리 파이 기기를 선택합니다. 저는 라즈베리 파이 5를 사용하고 있습니다.
다음으로 운영체제(OS) 항목에서 Raspberry Pi OS (other)를 클릭하고, 아래로 스크롤하여 Raspberry Pi OS Lite (32-bit)를 선택하세요.
그다음, 카드 리더기를 컴퓨터에 연결하고 삽입된 SD 카드를 선택합니다. 화면이 아래 이미지와 비슷하게 표시되면 '다음'을 누릅니다.

'다음'을 누르면 OS 사용자 지정 설정을 적용할지 묻는 팝업이 나타납니다.

여기서 Edit Settings(설정 편집)을 클릭합니다. 먼저 Set hostname(호스트명 설정)을 활성화하고 파이에 부여할 이름을 입력합니다. 이 튜토리얼에서는 dapivpn으로 지정하겠습니다. 이어서 Set username and password(사용자 이름 및 비밀번호 설정)을 활성화하고, 사용자 이름과 강력하고 안전한 비밀번호를 설정하세요.
Wi-Fi를 사용할 계획이라면 Configure wireless LAN(무선 LAN 구성)을 활성화하면 되고, 유선 이더넷 케이블을 선호한다면 이 단계는 건너뛰어도 됩니다. 다만 본 튜토리얼에서는 Wi-Fi를 사용합니다.
마지막으로 Set local settings(지역 설정)을 활성화하고 올바른 시간대와 키보드 배치를 선택합니다.
모두 마쳤으면 Services(서비스) 탭으로 이동해 SSH를 활성화하고 "Use password authentication(비밀번호 인증 사용)"을 선택합니다. 그런 다음 저장(Save)을 누르고, 사용자 지정 적용 화면에서 예(Yes), 한 번 더 예(Yes)를 클릭합니다. 이 과정에서 SD 카드의 모든 데이터가 삭제되므로, 중요한 파일이 없는 카드를 사용했는지 반드시 확인하세요.
완료된 Raspberry Pi Imager 화면은 다음과 같습니다:

라즈베리 파이 부팅
설치가 끝나면 SD 카드를 라즈베리 파이에 삽입하고 전원 케이블을 연결합니다. 정상적으로 부팅될 때까지 몇 분간 기다려 주세요. 초록색 LED가 계속 켜져 있으면 부팅이 완료된 것입니다.
이제 공유기 관리자 페이지에 접속해 라즈베리 파이에 고정 IP(static IP)를 할당합니다. 저는 192.168.8.21로 설정했습니다.
SSH로 라즈베리 파이 접속 및 로그인
컴퓨터의 명령줄 터미널을 열고 다음 형식으로 입력합니다: ssh <파이 사용자 이름>@<라즈베리_파이_IP주소>. 제 경우에는 다음과 같습니다:
ssh danpi@192.168.8.21
설정해 둔 비밀번호를 입력하면, 사용자 이름과 파이 호스트명이 표시되며 로그인에 성공했음을 확인할 수 있습니다.

이제 시스템을 최신 상태로 유지하기 위해 다음 명령어를 실행합니다:
sudo apt update && sudo apt upgrade -y
이 명령은 로컬 패키지들을 모두 최신 버전으로 업데이트하는 역할을 합니다.

업데이트가 완료되면 다음 명령으로 파이를 재부팅합니다:
sudo reboot
재부팅 후에는 Tailscale의 패키지 서명 키와 저장소(repository)를 추가합니다:
curl -fsSL https://pkgs.tailscale.com/stable/debian/bookworm.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
curl -fsSL https://pkgs.tailscale.com/stable/debian/bookworm.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list
다음 명령어로 Tailscale을 설치합니다:
sudo apt-get update
sudo apt-get install tailscale
이제 파이를 Tailscale 네트워크에 연결하고 인증해야 합니다. 다음 명령어를 실행하세요:
sudo tailscale up
실행하면 브라우저에 아래와 같은 인증 화면이 나타납니다.

라즈베리 파이의 Tailscale IPv4 주소를 확인하려면 다음 명령어를 실행합니다:
tailscale ip -4
브라우저의 Tailscale 대시보드에서도 동일한 정보를 확인할 수 있습니다.
여기까지 하면 Tailscale 설치는 끝입니다. 이제 몇 가지만 손보면 됩니다.
키 만료(Key Expiry) 설정
Tailscale에 기기를 추가할 때 꼭 알아두어야 할 사항이 있습니다. 보안 기능의 일환으로, Tailscale은 기본적으로 일정 기간(통상 180일)이 지나면 기기가 재인증을 하도록 요구합니다.
재인증이 이루어지지 않으면 키가 만료되어 연결이 중단됩니다. 다소 번거롭긴 하지만 어디까지나 보안을 위한 기능이므로, 사용 여부는 여러분의 판단에 달려 있습니다.
저는 라즈베리 파이를 완전히 신뢰하기 때문에 이 기기의 키 만료를 비활성화했습니다. 설정 방법은 다음과 같습니다:
- Tailscale 관리 콘솔의 Machines(머신) 페이지를 엽니다.
- 목록에서 해당 라즈베리 파이를 찾아 행의 옵션 메뉴를 선택합니다.
- Disable Key Expiry(키 만료 비활성화) 옵션을 클릭합니다. 그러면 머신 이름 아래에 'Expiry Disabled' 라벨이 표시됩니다.
라즈베리 파이를 Exit Node로 구성하기
Tailscale에서 반드시 알아야 할 또 하나의 개념이 바로 Exit Node(출구 노드)입니다. Tailscale exit node란 Tailscale 네트워크 내에서 모든 인터넷 트래픽을 경유하도록 지정된 기기를 말합니다. 어떤 위치에 있든 이 기기를 exit node로 활성화해 두고 Tailscale을 켜기만 하면, 인터넷 트래픽이 자동으로 해당 기기를 통해 라우팅됩니다.
exit node로는 24시간 내내 켜져 있는 기기가 이상적입니다. 그래서 전력 소모가 적은 라즈베리 파이가 딱 맞는 선택입니다.
파이에서 이미 Tailscale이 돌아가고 있으므로 사실상 90%는 완료된 상태입니다. 참고로 홈 네트워크의 가능한 많은 기기에도 Tailscale을 설치해 두는 것이 좋습니다. 이제 남은 일은 파이가 exit node 역할을 하도록 허용하는 것입니다. 이렇게 하면 모든 인터넷 트래픽 또는 LAN 트래픽이 파이를 거치게 되어 다음에 접근할 수 있습니다:
- 집에 있는 로컬 네트워크 기기들
- 집의 공인(public) IP 주소
- NAS, 프린터, CCTV 카메라 등 내부 서비스
SSH로 라즈베리 파이에 접속한 뒤, 다음 단계를 따라 해 보세요:
-
IP 포워딩(IP Forwarding) 활성화. IP 포워딩은 라즈베리 파이가 네트워크 인터페이스 간에 트래픽을 전달할 수 있게 해주는 기능입니다. 아래 명령어를 한 줄씩 실행합니다:
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf echo "net.ipv6.conf.all.forwarding=1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p /etc/sysctl.conf -
라즈베리 파이를 exit node로 광고(advertising)합니다:
sudo tailscale up --advertise-exit-node - Tailscale 관리 콘솔의 Machines 페이지를 엽니다.
- 목록에서 라즈베리 파이를 찾습니다. 이름 옆에 'Exit Node' 라벨이 표시되어 있을 것입니다.
- 옵션 메뉴를 클릭하고 Edit Route Settings(라우트 설정 편집)을 선택합니다.
- Use as an exit node(exit node로 사용) 체크박스를 선택한 후 저장합니다.
이제 모바일, PC 등 Tailscale 앱이 설치된 어느 기기에서든 앱을 열면 인터넷 트래픽을 exit node를 통해 라우팅하는 옵션이 나타납니다. 그리고 그 옵션 목록에서 라즈베리 파이가 exit node로 표시되는 것을 확인할 수 있습니다. 원한다면 선택지를 더 넓히기 위해 다른 기기를 추가로 exit node로 지정할 수도 있습니다.
마무리
이제 다른 기기에서 Tailscale 앱을 사용해 라즈베리 파이를 exit node로 선택함으로써, 트래픽을 안전하게 경유시킬 수 있습니다. Tailscale은 기기 유형별로 exit node를 설정하고 사용하는 방법을 단계별로 잘 정리한 가이드도 제공하니 참고하시기 바랍니다.
이제 집을 비웠어도 마치 집에 있는 것처럼 인터넷에 연결할 수 있습니다. 다음 글에서 다시 만나요!