Tailscale: 내 기기에서만 서버에 접속하는 법

안녕하세요, Mark입니다.

지금까지 서버에 여러 프로그램을 올렸는데요. 그러다 보니 자연스럽게 이런 생각이 들었습니다.

“포테이너, Vaultwarden 같은 민감한 프로그램들… 외부에서 누가 접근하려고 하면 어떡하지?”

실제로 저는 서버의 포트를 80번(HTTP)과 443번(HTTPS) 두 개만 외부에 열어두고 나머지는 전부 방화벽으로 막아놨습니다. 이 두 포트로 들어오는 트래픽은 NPM이 감시하고 관리하고요.

그런데 이렇게 하면 포테이너, Vaultwarden 같은 내부 도구들에 외부에서 어떻게 접속하느냐는 문제가 생깁니다.

그 해답이 바로 Tailscale입니다.


🔒 Tailscale이 뭔가요?

Tailscale은 내가 지정한 기기들끼리만 연결되는 가상 사설 네트워크(VPN)입니다.

일반 VPN은 “모든 트래픽을 한 곳으로 몰아서 보내는” 방식인데, Tailscale은 다릅니다. 기기들끼리 직접 연결되는 방식이라 속도도 빠르고 설정도 훨씬 간단합니다.

💡 비유하자면: 여러 건물에 흩어져 있는 방들을 비밀 지하통로로 연결한 겁니다. 이 통로를 아는 사람만 서로 오갈 수 있고, 밖에서는 이 통로 자체가 보이지 않아요.


📱 어떻게 동작하나요?

Tailscale은 서버가 아니라 기기마다 설치하는 프로그램입니다. 제 경우 이렇게 설치되어 있습니다.

기기종류상태
my-server오라클 클라우드 서버 (Linux)🟢 Connected
mark집 컴퓨터 (Windows 11)🟡 가끔 연결
wc-167-pc회사 컴퓨터 (Windows 11)🟢 Connected
ipad-mini-6th-gen-wifi아이패드 (iOS)🟡 가끔 연결
samsung-sm-g977n안드로이드 스마트폰🟡 가끔 연결

이 5대가 Tailscale로 연결된 하나의 가상 네트워크를 이루고 있습니다. 이 네트워크 안에서는 어디서든 서버에 접근할 수 있고, 네트워크 밖에서는 아무리 시도해도 접근 자체가 불가능합니다.


🏠 my-server로 접속한다는 게 무슨 말이에요?

Tailscale을 설치하면 각 기기에 100.x.x.x 형태의 가상 IP가 부여됩니다.

제 서버는 100.84.53.126 이라는 Tailscale IP를 받았어요. 그런데 저는 이 숫자 대신 my-server라는 이름으로 접속합니다.

# 이렇게 접속하는 대신
http://100.84.53.126:3000

# 이렇게 접속합니다
http://my-server:3000

Tailscale의 MagicDNS 기능 덕분입니다. 기기 이름을 도메인처럼 사용할 수 있게 해주는 기능이에요. 제가 서버 이름을 my-server로 지정해두니까, Tailscale 네트워크 안에서는 그냥 my-server로 접속이 됩니다.

숫자 IP 외울 필요가 없어서 훨씬 편합니다. ㅎㅎ


🛡️ 보안 구조가 어떻게 되나요?

제 서버의 보안 구조를 그림으로 그리면 이렇습니다.

외부 인터넷
    ↓
[방화벽: 80, 443만 허용]
    ↓
NPM (리버스 프록시)
    ↓
Ghost, 워드프레스 등 공개 서비스

---

Tailscale 네트워크 (내 기기들만)
    ↓
my-server:포트번호로 직접 접근
    ↓
포테이너, Vaultwarden, Homepage 등 내부 도구

외부에서 접근 가능한 건 80번, 443번 포트뿐입니다. 그리고 이 두 포트로 들어오는 트래픽은 NPM이 받아서 Ghost나 워드프레스로 연결해줍니다.

반면 포테이너(9443), Vaultwarden(3002), Homepage(3000) 같은 민감한 도구들은 방화벽으로 막혀있어서 외부에서 접근 자체가 불가능합니다. 오직 Tailscale 네트워크 안에 있는 제 기기 5대에서만 my-server:포트번호로 접속할 수 있어요.

이중 보안인 거죠.

  • 1차 방어: 방화벽으로 포트 차단
  • 2차 방어: Tailscale 네트워크 안에서만 내부 도구 접근 가능

💻 설치 방법

서버에 설치 (Linux)

Tailscale은 도커 컨테이너가 아니라 서버 OS에 직접 설치합니다. 그래서 포테이너에서 보이지 않는 거예요.

SSH로 서버에 접속 후 아래 명령어를 실행합니다.

# Tailscale 설치 스크립트 실행
curl -fsSL https://tailscale.com/install.sh | sh

# Tailscale 시작 및 로그인
sudo tailscale up

명령어를 실행하면 로그인 URL이 나옵니다. 브라우저에서 접속해서 구글 계정으로 로그인하면 서버가 네트워크에 등록됩니다.

각 기기에 설치

각 기기는 더 간단합니다.

기기설치 방법
Windowstailscale.com/download 에서 다운로드
Android구글 플레이스토어에서 Tailscale 검색
iOS/iPadOS앱스토어에서 Tailscale 검색

설치 후 같은 구글 계정으로 로그인하면 자동으로 같은 네트워크에 묶입니다. 끝이에요. ㅎㅎ

연결 확인

Tailscale 관리 페이지(tailscale.com)에 접속하면 제 화면처럼 연결된 기기 목록이 한눈에 보입니다. 초록불이면 현재 연결 중, 회색이면 오프라인 상태예요.


💰 무료로 쓸 수 있나요?

Tailscale은 개인 사용자에게 무료입니다. 무료 플랜으로 최대 100대의 기기를 연결할 수 있어요. 저처럼 5대만 쓰는 개인 사용자한테는 유료 플랜이 전혀 필요 없습니다.


✅ 핵심 요약

항목내용
용도내 기기들만 연결하는 가상 사설 네트워크
설치 위치서버 OS + 접속할 각 기기
MagicDNSIP 대신 기기 이름으로 접속 가능 (my-server:포트)
보안방화벽 + Tailscale 이중 보안
비용개인 사용자 무료 (최대 100대)

마치며

Tailscale 덕분에 저는 어디서든 스마트폰 하나로 내 서버에 안전하게 접속할 수 있습니다. 회사에서 점심시간에 포테이너 확인하고, 출퇴근 중에 업타임 쿠마 체크하고, 집에서 Vaultwarden으로 비밀번호 꺼내고… 전부 my-server:포트번호로 접속하는 거예요.

외부에서 보면 서버 포트는 80, 443만 열려있고 나머지는 완전히 잠겨있으니, 누가 봐도 그냥 블로그 서버처럼 보입니다. 하지만 실제로는 Tailscale 네트워크 안에서 훨씬 많은 일들이 돌아가고 있죠. ㅎㅎ

이것으로 서버 구축기의 기본 편이 마무리됩니다. 다음부터는 이 서버 위에서 돌아가는 개별 프로그램들을 하나씩 소개해드리겠습니다!


Mark의 한마디: “Tailscale 설치하고 나서 처음으로 회사에서 my-server:3000으로 홈페이지 대시보드가 뜨는 걸 봤을 때, 괜히 뿌듯하더라고요. 내가 만든 서버에 내 기기에서만 들어갈 수 있다는 게 왠지 든든한 느낌이랄까요 ㅎㅎ”

댓글 남기기