GX10에 로컬 LLM 서빙하고 Tailscale로 외부 접속 가능한지 확인해봤다
집안에서 24시간 돌리는 GX10에 로컬 LLM을 올리고, Tailscale으로 외부에서도 접속이 가능한지 확인했다. 포트포워딩 없이 Open WebUI를 모바일 LTE에서도 열 수 있었고, 간단한 테스트 페이지도 같은 방식으로 접근할 수 있었다.
GX10을 집안에서 24시간 켜두고 로컬 LLM을 서빙하면 얻는 가장 큰 이점은 데이터 프라이버시다. 클라우드 API에 질문을 보내지 않고, 내 네트워크 안에서 모델을 돌릴 수 있다. 문제는 이 서버가 보통 집안에서만 쓸 수 있다는 점이다. 같은 Wi-Fi나 유선 LAN에 붙어 있으면 192.168.xxx.xxx:포트로 바로 접근할 수 있지만, 밖에서는 접근할 수 없다.
밖에서도 쓰고 싶다는 생각이 들면, 자연스럽게 공유기 포트포워딩을 열거나 DDNS를 붙이는 방법을 고려하게 된다. 하지만 로컬 AI 서비스는 공개 인터넷에 노출하기에 부담스러운 것이 많다. 개인정보가 담긴 대화가 오가고, 로컬 모델에 접근하는 인터페이스이니까. 내가 원한 건 공개 서비스가 아니라, 내 기기들끼리만 보이는 사설 네트워크였다.
그래서 Tailscale을 붙였다. Tailscale은 WireGuard 기반의 사설 네트워크를 만들어 주는 서비스다. 이 글은 GX10에 로컬 LLM을 24시간 서빙하고, Tailscale으로 외부에서 접속할 수 있는지 확인해본 기록이다.
왜 Tailscale인가
이번 목적은 명확했다.
- 24시간 구동 중인 GX10에 외부에서도 접근할 수 있어야 한다.
- Open WebUI를 모바일에서 열어볼 수 있어야 한다.
- 다른 웹서비스도 같은 방식으로 접근할 수 있는지 확인할 수 있어야 한다.
- 공유기 포트포워딩은 열고 싶지 않다.
- 인터넷 전체에 공개되는 서비스가 아니라, 내 tailnet 안에서만 보이면 된다.
이 조건이면 Tailscale이 꽤 잘 맞는다. WireGuard 기반의 사설 네트워크를 기기 사이에 만들어 주고, 각 기기가 Tailscale IP 또는 MagicDNS 이름으로 서로를 찾을 수 있게 해준다. 휴대폰이 LTE나 5G에 붙어 있어도 Tailscale 앱을 켜면 집안의 GX10이 같은 사설망에 있는 것처럼 보인다.
중요한 점이 이게 “웹사이트를 공개 배포”하는 방식이 아니라는 것이다. Tailscale에 로그인한 내 기기에서만 접근하는 개인용 터널에 가깝다. Open WebUI처럼 외부에 직접 열기 애매한 서비스에는 오히려 이쪽이 마음이 편하다.
테스트 환경
| 항목 | 값 |
|---|---|
| 서버 | DGX Spark OEM (GX10), 집 안에서 24시간 구동 |
| 서버 내부망 IP | 192.168.xxx.xxx |
| 원격 접속 방식 | Tailscale tailnet |
| 모바일 환경 | Wi-Fi OFF, LTE 또는 5G |
| 서빙 모델 | 로컬 LLM (Qwen3.6 등) |
| 확인한 서비스 1 | Open WebUI (:3000) |
| 확인한 서비스 2 | 개인용 테스트 웹사이트 (:3001) |
| 공개 방식 | 인터넷 공개 아님, Tailscale 연결 기기에서만 접근 |
여기서 핵심은 모바일 테스트를 반드시 Wi-Fi를 끄고 진행했다는 점이다. 같은 집 Wi-Fi에 붙어 있으면 내부망 접속인지 Tailscale 접속인지 헷갈릴 수 있다. 그래서 휴대폰에서 Wi-Fi를 끄고 LTE/5G 상태로 전환한 뒤 접속을 확인했다.
GX10에 Tailscale 설치
GX10 쪽 설정은 단순하다. Linux 서버에 Tailscale을 설치하고 로그인한 뒤, tailnet에 등록하면 된다. Linux 설치 가이드를 참고한다.
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
로그인 URL이 나오면 브라우저에서 인증한다. 인증이 끝나면 GX10이 내 Tailscale 네트워크에 하나의 기기로 등록된다.
등록 후에는 아래 명령으로 tailnet에 연결된 기기 목록을 확인할 수 있다.
tailscale status
나도 같은 계정을 쓰고 있어서, 아래처럼 NAS와 휴대폰이 함께 보인다.
100.xxx.xxx.xxx gx10 사용자@ linux -
100.xxx.xxx.xxx nas 사용자@ linux -
100.xxx.xxx.xxx phone 사용자@ android -
이 중에 gx10이 내 GX10이고, 이 기기의 Tailscale IP는 100.xxx.xxx.xxx다. MagicDNS를 켜두었다면 gx10 같은 이름으로 접근할 수 있고, 그렇지 않으면 이 IP를 직접 사용한다.
모바일에서 테스트한 흐름
집안에서는 서비스 주소가 192.168.xxx.xxx:포트였다. Tailscale을 붙인 뒤에는 이 주소가 gx10.xxx.ts.net:포트(MagicDNS 사용 시) 또는 100.xxx.xxx.xxx:포트(Tailscale IP 직접 사용 시)로 바뀐다.
테스트할 때는 휴대폰에서 아래 순서로 확인했다.
- Wi-Fi를 끄고 LTE/5G 상태로 전환한다.
- Tailscale 앱을 켜고 내가 등록한 기기들이 보이는지 확인한다.
- 모바일 브라우저에서 서비스 주소를 열고 접속이 되는지 확인한다.
Open WebUI
GX10에서 Open WebUI가 이미 떠 있다면, 모바일에서 아래 주소로 접근한다.
http://gx10:3000
또는 MagicDNS 이름을 쓰지 않는다면 Tailscale IP를 직접 넣는다.
http://100.xxx.xxx.xxx:3000
여기까지 성공하면 집 밖에서도 Open WebUI에 접근할 수 있다는 뜻이다. 공유기 포트포워딩도, 별도 DDNS도 필요 없다. 휴대폰이 Tailscale에 연결되어 있기만 하면 된다.

개인용 웹사이트
Open WebUI만 되는지, 일반 웹서비스도 같은 방식으로 되는지 확인하기 위해 GX10에 간단한 개인용 웹사이트를 올렸다. 정적 페이지나 작은 웹앱이 3001 포트에서 떠 있는 형태다.
# 예시: GX10에서 테스트용 웹사이트가 3001 포트로 떠 있는 경우
python3 -m http.server 3001
집안에서는 아래 주소로 접근할 수 있다.
http://192.168.xxx.xxx:3001
Tailscale을 통하면 모바일 LTE/5G에서도 같은 서비스를 아래처럼 열 수 있다.
http://gx10.xxx.ts.net:3001
이 테스트가 중요한 이유는 Open WebUI가 특별해서 되는 게 아니라는 점을 보여주기 때문이다. GX10에서 로컬 포트로 열려 있는 서비스라면, Tailscale 네트워크 안의 다른 기기에서 같은 방식으로 접근할 수 있다.

Tailscale을 선택한 이유
보안
Open WebUI는 개인 계정과 대화 기록, 로컬 모델 접근 권한이 걸려 있는 서비스다. 여기에 단순히 공유기 포트포워딩을 열고 인터넷에 노출하는 건 부담스럽다. 인증을 붙이고 HTTPS를 설정해도, 결국 공개 인터넷에서 접속 가능한 표면이 하나 생긴다.
Tailscale을 쓰면 접근 경로가 달라진다.
- 공유기에서 외부 포트를 열지 않는다.
- GX10의 사설 IP를 인터넷에 직접 노출하지 않는다.
- 접속 가능한 기기는 Tailscale 계정에 등록된 내 기기들로 제한된다.
- 휴대폰을 잃어버리면 Tailscale admin에서 해당 기기를 제거할 수 있다.
물론 Tailscale을 쓴다고 해서 모든 보안 문제가 사라지는 건 아니다. Open WebUI 자체의 로그인, 계정 관리, 서비스 포트 관리도 여전히 필요하다. 그래도 개인 홈서버를 외부에서 쓰기 위한 첫 번째 선택지로는 포트포워딩보다 훨씬 부담이 적다.
편의성
가장 크게 체감한 건 접근 방식이 단순하다는 점이었다. 밖에서 갑자기 GX10의 Open WebUI를 열어 보고 싶을 때, 휴대폰에서 Tailscale 앱을 켜고 브라우저 주소만 입력하면 된다.
집안에서 쓰던 서비스 주소가 192.168.xxx.xxx:3000이었다면, 밖에서는 gx10:3000으로 바뀌는 정도다. 구조를 크게 바꿀 필요가 없다. 서버 쪽 애플리케이션도 “외부 공개 서비스”로 다시 설계할 필요 없이, 기존 로컬 서비스 그대로 둔 채 접근 경로만 하나 더 생긴다.
개인 웹사이트 테스트도 마찬가지다. 아직 제대로 만든 사이트가 아니더라도, GX10에서 띄운 작은 웹앱을 휴대폰 모바일망에서 바로 확인할 수 있다. 나중에 대시보드, 개인 문서 페이지, 로컬 AI 데모 페이지 같은 걸 붙일 때 꽤 유용할 것 같다.
24시간 구동 시 연결 가능한 서비스들
GX10을 24시간 켜두면 얻는 이점은 접근성만으로 끝나지 않는다. 계속 실행 중인 서버에는 다양한 개인 서비스를 붙일 수 있고, Tailscale은 그 서비스들이 외부에서도 “집안에서 쓰던 것처럼” 작동하게 해주는 연결 고리가 된다.
예를 들어 이런 것들을 생각해 볼 수 있다.
- 개인 문서 페이지 — 집안에서만 쓰던 노트나 문서를 밖에서도 열어보고 수정할 수 있다.
- 자동화된 대시보드 — NAS나 기타 서버의 상태를 모아둔 페이지가 밖에서도 살아 있다.
- 로컬 AI 데모 페이지 — GX10 위에서 돌리는 모델을 직접 호출하는 인터페이스를 외부에서도 쓸 수 있다.
- 자동백업, 스케줄링, 모니터링 — 백그라운드에서 돌아가는 작업이 밖에서도 관리된다.
중요한 건 이렇게 여러 서비스를 GX10 위에 올려도, Tailscale을 붙이면 외부 접근 방식은 동일하다는 점이다. 서비스마다 포트포워딩을 열거나 별도 도메인을 붙일 필요가 없다. 같은 tailnet 안에서 gx10:3000, gx10:3001처럼 주소만 다르면 다 같은 경로로 접근된다.
활용 방향: 24시간 서버에 붙일 수 있는 것들
GX10에 Open WebUI와 테스트 페이지를 붙여봤을 때 느낀 건, 이 서버 위에 올릴 수 있는 것의 범위가 훨씬 넓다는 거다. Open WebUI로 로컬 LLM을 외부에서 호출할 수 있다는 점 자체가 이미 충분한 가치가 있지만, 24시간 구동 중인 서버에는 다양한 서비스를 붙일 수 있다. 어떤 방향이 있을지 정리해봤다.
AI 기반 서비스
- 개인 지식 베이스 — PDF, 노트, 웹페이지를 RAG로 연결해 검색하고 요약하는 서비스다. 로컬 LLM이 내 데이터를 훈련에 사용하지 않으므로 프라이버시가 완전히 지켜진다.
- 이미지 분석/생성 — Stable Diffusion 등을 GX10에 설치해 생성 이미지를 외부에서 요청하고 받을 수 있다.
- 음성 인식/합성 — Whisper로 음성을 텍스트로, TTS로 텍스트를 음성이 된다. 외부에서 음성 데이터를 보내지 않고도 처리 가능하다.
자동화 & 모니터링
- 개인용 대시보드 — NAS, 서버 등 집안 기기 상태를 한 곳에서 보고, 이상 상태를 알림으로 받을 수 있다.
- 데이터 처리 파이프라인 — CSV, JSON, 이미지 등을 처리하는 백그라운드 작업을 외부에서 시작하고 결과를 받을 수 있다.
- 스케줄링 작업 관리 — 매일 실행해야 하는 크롤링, 백업, 정리 작업을 외부에서도 모니터링하고 조정할 수 있다.
개발 & 실험
- 로컬 AI 데모 페이지 — 프롬프트 엔지니어링 테스트, 모델 비교, 토큰 분석 등을 외부에서도 할 수 있다.
- 개인용 API 서버 — 자신이 개발한 API를 GX10에서 배포하고, 외부에서 테스트할 수 있다.
- 교육용 인터랙티브 페이지 — AI 활용 교육 자료를 외부에서 직접 실험해 볼 수 있게 제공할 수 있다.
주의할 점
몇 가지는 미리 구분해 두는 게 좋다.
첫째, 이 글에서 말하는 접근은 Tailscale에 연결된 기기 기준이다. 아무나 인터넷에서 접속할 수 있는 공개 웹사이트가 아니다. 공개 사이트를 만들려면 Tailscale Funnel, Cloudflare Tunnel, 일반 VPS 배포 같은 다른 선택지를 검토해야 한다.
둘째, 모바일 브라우저에서 gx10 같은 이름이 안 열리면 MagicDNS 설정을 확인해야 한다. 가장 확실한 방법은 Tailscale IP를 직접 넣어 보는 것이다.
http://100.xxx.xxx.xxx:3000
Tailscale IP로는 열리는데 이름으로 안 열리면, 네트워크 연결 문제가 아니라 DNS 이름 해석 문제일 가능성이 높다.
셋째, 서비스가 127.0.0.1에만 바인딩되어 있으면 외부 기기에서 접근이 안 될 수 있다. Open WebUI나 개인 웹사이트가 GX10 내부에서만 보이고 Tailscale에서는 안 보인다면, 애플리케이션이 어떤 주소에 바인딩되어 있는지 확인해야 한다.
ss -ltnp
보통 다른 기기에서 접근하려면 0.0.0.0:3000 또는 GX10의 Tailscale IP/내부망 IP에서 받을 수 있어야 한다.
마무리
GX10(DGX Spark OEM)을 24시간 구동하고 로컬 LLM을 서빙하면 얻는 가장 큰 가치는 프라이버시와 독립성이다. 클라우드 API에 의존하지 않고, 내 네트워크 안에서 모델을 돌릴 수 있다. 여기에 Tailscale을 붙이면 외부에서도 집안 서비스처럼 접근할 수 있다. 포트포워딩도, 도메인도, HTTPS 인증서 관리도 필요 없다.
나에게 이 방식이 마음에 든 이유는 “외부 공개”와 “외부 접근”을 분리할 수 있기 때문이다. 집 밖에서 접속은 하고 싶지만, 인터넷 전체에 열고 싶지는 않은 서비스들이 있다. Open WebUI가 딱 그런 예다.
GX10을 개인 AI 서버나 홈서버처럼 쓰고 있다면, Tailscale은 거의 기본 장비처럼 붙여둘 만하다. 특히 모바일에서 Open WebUI를 확인하거나, GX10 위에 만든 작은 웹사이트를 밖에서 테스트하는 용도라면 설정 대비 만족도가 높다.
더 나아가 생각해보면, GX10 위에 올릴 수 있는 서비스는 Open WebUI나 개인 웹사이트에 그치지 않는다. 문서 분석, 이미지 생성, 자동화 파이프라인, 대시보드 등 활용 방향은 무한하다. Tailscale은 그 모든 서비스에 “외부 접근”이라는 레이어를 추가해 준다. 24시간 구동 중인 서버가 외부에서도 내 것이 되는 순간, 로컬 LLM 서빙은 단순한 실험을 넘어 실제 생활과 업무에 활용되는 서비스가 된다.