개발 블로그
← 블로그 목록

Tailscale로 홈서버 외부 접근 구성하기 — 포트포워딩 없이


맥미니 홈서버를 운영하다 보면 외부에서 접근해야 할 상황이 생깁니다. 기존에는 공유기에서 포트를 열고 DDNS로 도메인과 연결하는 방식을 사용했는데, 관리 포인트가 많고 포트를 외부에 노출한다는 점이 늘 불편했습니다. Tailscale을 도입하면서 이 문제가 깔끔하게 해결됐습니다.

Tailscale이란?

Tailscale은 WireGuard 기반의 메시 VPN 서비스입니다. 설치된 디바이스끼리 100번대 가상 IP(예: 100.x.x.x)로 서로 통신할 수 있는 가상 네트워크를 만들어줍니다. 공유기 포트포워딩이 필요 없고, 고정 IP나 DDNS도 필요 없습니다. NAT 뒤에 있어도 알아서 연결됩니다.

개인 사용자는 최대 3대까지 무료로 사용할 수 있어서 맥미니 홈서버 + 노트북 + 스마트폰 조합으로 충분히 커버됩니다.

설치 및 연결

맥미니와 접근할 디바이스(노트북, 스마트폰 등) 각각에 Tailscale을 설치하고 같은 계정으로 로그인하면 끝입니다. 복잡한 설정 없이 자동으로 서로를 인식하고 100번대 가상 IP를 부여합니다.

# macOS에 Tailscale 설치 (Homebrew)
brew install --cask tailscale

# 또는 앱스토어에서 설치 후 로그인
tailscale up

설치 후 tailscale status로 연결된 디바이스 목록과 가상 IP를 확인할 수 있습니다.

서비스 접근 구성

기존에 공유기 포트포워딩으로 열어두던 서비스들을 Tailscale 가상 IP 기반으로 전환했습니다. 외부에서 접근이 필요한 서비스는 Tailscale을 통해서만 접근하도록 구성했습니다.

# Tailscale 가상 IP로 서비스 접근 예시
http://100.x.x.x:8090   → Jenkins
http://100.x.x.x:8080   → 내부 관리 API
http://100.x.x.x:9999   → Dozzle (컨테이너 모니터링)

이 주소들은 Tailscale 네트워크에 연결된 내 디바이스에서만 접근 가능합니다. 공유기 포트를 열지 않았으니 외부에서는 아예 보이지 않습니다.

Dozzle — Docker 컨테이너 모니터링

Dozzle은 Docker 컨테이너 로그를 브라우저에서 실시간으로 볼 수 있는 가벼운 모니터링 툴입니다. 배포 후 로그 확인이나 이슈 발생 시 빠르게 컨테이너 상태를 파악할 수 있어서 유용합니다.

# dozzle/docker-compose.yml
services:
  dozzle:
    image: amir20/dozzle:latest
    container_name: dozzle
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - "9999:8080"

Dozzle은 인증 기능이 기본적으로 없기 때문에 외부에 노출하면 위험합니다. Tailscale 가상 IP(100.x.x.x:9999)로만 접근하도록 구성하면 내 디바이스 외에는 접근이 불가능해서 안전하게 운영할 수 있습니다.

Jenkins도 Tailscale로

Jenkins도 마찬가지입니다. 기존에는 Nginx로 /jenkins 경로를 열어두고 GitHub 웹훅을 받았는데, Tailscale로 전환하면서 구성이 단순해졌습니다. GitHub 웹훅은 공개 URL이 필요하므로 해당 엔드포인트만 Nginx로 열어두고, Jenkins 관리 UI는 Tailscale을 통해서만 접근합니다.

Tailscale 도입 전후 비교

항목 기존 (포트포워딩) Tailscale 도입 후
공유기 포트 개방 80, 443, 필요한 포트마다 설정 불필요
외부 IP 관리 DDNS 스크립트 필요 불필요
관리 도구 접근 Nginx 인증 설정 필요 Tailscale 가상 IP로만 접근
보안 포트 노출, Nginx 설정에 의존 WireGuard 암호화, 디바이스 인증
팁: 퍼블릭 서비스(외부 사용자가 접근하는 웹 서비스)는 기존처럼 Nginx + Let's Encrypt로 운영하고, 관리 도구나 내부 서비스만 Tailscale로 접근하는 방식이 가장 실용적입니다.

부록 — Exit Node로 해외에서 한국 망 사용하기

Tailscale에는 Exit Node라는 기능이 있습니다. 특정 디바이스를 exit node로 지정하면 모든 인터넷 트래픽이 그 디바이스를 거쳐 나가게 됩니다. 맥미니를 exit node로 설정해두면 해외에서 노트북이나 스마트폰의 트래픽을 맥미니(한국 망)를 통해 내보낼 수 있습니다.

# 맥미니에서 exit node 활성화
tailscale up --advertise-exit-node

# 클라이언트(노트북 등)에서 exit node 사용 설정
# Tailscale 앱 → Exit Node → 맥미니 선택

이렇게 하면 해외에서도 한국 IP로 인터넷을 사용하게 됩니다. 한국 IP 기반으로 서비스하는 OTT나 지역 제한 서비스를 이용할 수 있다는 부가 효과가 있습니다. 다만 각 서비스의 이용약관에서 VPN 사용을 제한하는 경우가 있으므로 참고하세요.

트래픽이 맥미니를 경유하기 때문에 홈 인터넷 업로드 속도가 병목이 됩니다. 영상 스트리밍 등 대역폭이 필요한 경우 업로드 속도를 감안해서 사용하면 됩니다.