내부 사이트 · NAT 뒤 · Connector
어디서나 Grafana나 Home Assistant를 — 포트 포워딩 없이
LAN에서 대시보드 하나가 돌아가고 있습니다 — Grafana, Home Assistant, Portainer, 라우터 관리 페이지 같은 것 말이죠. 그걸 노출하지 않고 다른 곳의 브라우저에서 열고 싶습니다. 그 머신이나 같은 네트워크의 아무 장비에 Termalin Connector를 설치하고, 캐비닛에서 사이트를 추가한 다음, https://<10 자>.termal.ink 같은 사설 주소로 접속하세요. Connector가 바깥으로 연결하므로 리슨하는 것도, 포워딩하는 포트도 없습니다. 공개 링크는 없습니다. 나와, 내가 이메일로 초대한 사람만 접속합니다.
사설 주소만 · 공개 링크 없음 · Pro와 Team(14일 체험)
01 / 문제
8123이나 3000을 그냥 포워딩하면 안 되는 이유
대시보드의 포트를 인터넷에 포워딩하면 로그인 화면이 — 더 나쁘게는 그냥 열린 UI가 — 인터넷의 모든 스캐너 앞에 놓입니다. 흔한 대안들은 그 자체로 하나의 프로젝트입니다. VPN은 접속하는 모든 기기에 클라이언트를, 들어와야 하는 사람마다 계정을 요구합니다. 도메인과 접근 정책을 갖춘 리버스 프록시는 내부 페이지 하나치고는 손봐야 할 부분이 너무 많습니다. 내부 사이트는 이 모두를 건너뜁니다. Connector는 늘 바깥으로만 연결하고, 페이지는 나와 지정한 사람에게만 닿으며 그 외에는 아무도 닿지 못합니다.
02 / 작동 방식
머신이 바깥으로 연결하고, 나는 링크를 엽니다
- ▸아웃바운드 전용. Connector는 termal.in으로 연결을 유지할 뿐 리슨하지 않습니다. 포워딩하거나 스캔할 것이 없으므로 NAT, CGNAT, 엄격한 방화벽 뒤에서도 동작합니다.
- ▸고유한 사설 주소. 각 사이트에는
https://k7m4p9qrst.termal.ink/처럼 10자 주소가 붙습니다. termal.ink는 termal.in과 별개의 사이트이며, 그 페이지는noindex를 달고 검색에서 제외됩니다. - ▸진짜 브라우저 탭. 대시보드는 여느 사이트처럼 열립니다. 지금 앉아 있는 머신에 설치할 클라이언트가 없습니다.
03 / 설정
1분이면 만드는 사이트
웹 캐비닛에서 내부 사이트 카드(백업 옆)를 열고 사이트 추가를 클릭하세요.
- ▸사이트에 닿을 수 있는 Connector.
- ▸Connector의 머신에서 보이는 주소 — 예:
http://10.0.0.5:8080또는http://localhost:3000. - ▸선택 사항인 이름(최대 80자), 내부 사이트가 https를 사용하는지 여부, 그리고 링크 자체의 주소를 호스트 이름으로 보낼지 여부(Host 헤더에 까다로운 앱을 위해).
추가하고 열기를 누르면 대시보드가 새 탭에서 열립니다. Connector의 컨텍스트 메뉴에도 내부 사이트 열기…가 있습니다. 데스크톱 앱은 내 사이트를 목록으로 보여 주고(설정 → 내부 사이트) 로그인된 상태로 열어 주며, 추가와 공유는 웹 캐비닛에서 하고, 모바일은 목록을 보여 줍니다.
04 / 되는 것
실시간 대시보드, WebSocket까지 모두
트래픽은 버퍼링 없이 흘러가고 WebSocket도 그대로 지나가므로, 어설픈 프록시에서 깨지던 것들이 그냥 동작합니다.
- ▸Grafana 실시간 패널, Home Assistant, Portainer, Proxmox 모두 LAN에서와 똑같이 동작합니다.
- ▸http든 https든, 어떤 포트든. 대시보드에 자체 서명 인증서나 내부 인증서가 있어도 괜찮습니다. ‘내부 사이트가 https를 사용함’에 체크하면, 그 구간의 인증서는 Connector 네트워크 안에 머물기 때문에 검사하지 않습니다.
- ▸사설 주소만. localhost,
10/8,172.16/12,192.168/16, 링크-로컬, Tailscale의100.64/10, IPv6 ULA, 그리고 사설 주소로 해석되는 호스트 이름도 됩니다. 공용 주소는 거부됩니다.
05 / 공유
동료나 가족을 하루나 일주일 동안 들여보내기
사이트는 한 번에 이메일 주소 하나씩, 24시간 또는 7일 동안 공유합니다(다시 공유하면 연장됩니다). 한 링크에 동시에 최대 25명까지 가능합니다. 먼저 내 이메일이 확인되어 있어야 합니다.
- ▸상대방은 개인 링크가 담긴 초대 이메일을 받고, 그 주소로 전송된 6자리 코드로 로그인합니다(10분간 유효, 5회 시도). 다른 누군가가 사이트 주소를 열면 “이 링크는 동작하지 않습니다”만 보일 뿐, 사이트가 있다는 사실조차 드러나지 않습니다.
- ▸Termalin 계정은 필요 없습니다. 그 코드만 쓰면 됩니다.
- ▸공유가 유지되는 동안 그 대시보드 하나만 보이며, 만료되면 세션도 끝납니다.
06 / 보안 모델
누가 들어올 수 있고, 어떻게 되돌리는가
- ▸공개 모드 없음. 내 사이트는 일회용 링크(120초간 유효)로 열며, 이 링크가 12시간 동안 로그인 상태를 유지해 줍니다. 그 외의 사람은 모두 이메일로 초대합니다.
- ▸단단히 잠근 쿠키. 세션 쿠키는 슬러그에 host-only로 묶이고
__Host-, HttpOnly, Secure, SameSite=Lax가 적용되며, 대시보드에 무엇이 닿기 전에 제거됩니다. - ▸즉시 해지. 제거는 한 사람의 접근을 거두고 그가 열어 둔 페이지를 즉시 멈춥니다. 끄기는 모두에게서 링크를 내립니다. 요금제가 Free로 내려가면 공유받은 사람들은 “접근이 종료됨”을 보게 됩니다.
- ▸활동 로그가 이를 기록합니다. 사이트가 언제 만들어지고, 열리고, 공유되고, 공유받은 사람이 열고, 접근이 제거되고, 꺼졌는지가 남습니다.
07 / 비교
터널 서비스, Tailscale, VPN과 비교
| 방식 | 공개 링크? | 보는 사람 쪽에 필요한 것 | 적합한 경우 |
|---|---|---|---|
| ngrok·터널 서비스 | 예 — URL만 있으면 누구나 | 없음 | 빠른 공개 데모 |
| Cloudflare Tunnel | 공개, 또는 Access 정책 | 없음, 또는 Access 로그인 | 도메인이 있고 공개 또는 정책으로 제한하고 싶을 때 |
| Tailscale·WireGuard | 아니요 — 사설 메시 | 모든 기기에 VPN 클라이언트 | 접속하는 모두가 클라이언트를 설치할 수 있을 때 |
| 리버스 프록시 + 포트 포워딩 | 예 — 인터넷에 | 없음 | 노출을 감수할 때 |
| Termalin 내부 사이트 | 아니요 — 이메일로 초대 | 브라우저만 | 대시보드 한두 개를 지정한 사람과 공유할 때 |
트레이드오프는 솔직합니다. 영구 공개 링크가 없고 링크마다 하루 5 GB 소프트 상한이 있는데, 이는 사설 대시보드에는 장점이고 공개용에는 제약입니다. 홈랩 실습이 궁금하다면 Home Assistant나 Grafana에 원격 접속하기(영어)를 참고하세요.
08 / 요금제와 한도
Pro와 Team에 포함
내부 사이트에는 Connector가 필요하므로 유료 요금제에 포함됩니다.
- ▸Free: 포함되지 않음. 체험: 사이트를 열 수는 있지만 공유할 수는 없습니다.
- ▸Pro와 Team: 사이트 개수에 제한이 없습니다.
- ▸UTC 하루 기준 링크마다 5 GB, 계정마다 20 GB 트래픽 — 완전히 막는 것이 아니라 부드러운 제동입니다. 진행 중인 요청은 끝까지 마치고, 그 뒤에는 짧은 “내일 다시 오세요” 페이지가 대신 나옵니다. 요청 하나는 최대 1 GB로 제한됩니다.
- ▸종단 간이 아니라 전송 구간 TLS. 트래픽은 TLS로 전달되고 프록시에서 복호화되어 중계됩니다.
자주 묻는 질문
링크가 공개되나요? 링크만 있으면 누구나 들어올 수 있나요?
아니요. 공개 모드나 “링크만 있으면 누구나” 들어오는 모드는 없습니다. 사이트는 내 계정에 로그인한 상태로 열며, 그 외의 사람은 모두 이메일로 초대받아 일회용 코드로 로그인해야 합니다. 링크가 새어 나가도 그것만으로는 아무 쓸모가 없습니다.
포트를 열거나 VPN을 설정해야 하나요?
둘 다 아닙니다. Connector는 termal.in으로 아웃바운드 연결을 만들 뿐 리슨하지 않으므로, 라우터에서 포워딩할 것도, 스캐너가 찾아낼 것도 없습니다. 함께 쓰는 사람도 VPN 클라이언트를 설치하지 않습니다. 브라우저에서 링크만 열면 됩니다.
어떤 주소를 사이트로 지정할 수 있나요?
Connector의 머신이 닿을 수 있는 사설 주소라면 http든 https든, 어떤 포트든 모두 됩니다. localhost, 10.x, 172.16–31.x, 192.168.x, 링크-로컬, Tailscale의 100.64/10 대역, IPv6 ULA가 해당합니다. 호스트 이름도 사설 주소로 해석되기만 하면 쓸 수 있습니다. 공용 인터넷 주소는 거부됩니다.
자체 서명 인증서에서도 동작하나요?
네. 대시보드가 자체 서명 인증서나 내부 인증서로 https를 제공한다면 ‘내부 사이트가 https를 사용함’에 체크하세요. 그 구간의 인증서는 검사하지 않습니다. 경로의 그 부분은 Connector 자체 네트워크 안에 머물기 때문입니다.
휴대폰에서 사이트를 추가하거나 공유할 수 있나요?
추가와 공유는 웹 캐비닛에서 합니다. 데스크톱 앱은 내 사이트를 목록으로 보여 주고 로그인된 상태로 열어 주며, 모바일은 목록을 보여 줍니다. 그러니 추가와 공유는 브라우저나 데스크톱에서 하고, 열기는 어디서든 하세요.
종단 간 암호화인가요?
아니요. 저희도 그렇게 부르지 않습니다. 트래픽은 브라우저에서 Cloudflare를 거쳐 프록시까지 TLS로 전달되고, 프록시에서 복호화되어 사이트로 중계됩니다. 그래서 저희는 종단 간 암호화가 아니라 전송 구간 TLS라고 말합니다.