Remote access
Tailscale
OpenClaw은 Gateway 대시보드와 WebSocket 포트에 대해 Tailscale Serve(tailnet) 또는 Funnel(공개)을 자동으로 구성할 수 있습니다. 이렇게 하면 Gateway는 루프백에 바인딩된 상태를 유지하면서 Tailscale이 HTTPS, 라우팅 및 (Serve의 경우) ID 헤더를 제공합니다.
모드
gateway.tailscale.mode:
| 모드 | 동작 |
|---|---|
serve |
tailscale serve를 통한 tailnet 전용 Serve입니다. Gateway는 127.0.0.1에서 유지됩니다. |
funnel |
tailscale funnel을 통한 공개 HTTPS입니다. 공유 비밀번호가 필요합니다. |
off (기본값) |
Tailscale 자동화를 사용하지 않습니다. |
상태 및 감사 출력에서는 이 OpenClaw Serve/Funnel 모드를 Tailscale 노출이라고 합니다. off는 OpenClaw이 Serve 또는 Funnel을 관리하지 않는다는 의미이며, 로컬 Tailscale 데몬이 중지되었거나 로그아웃되었다는 의미는 아닙니다.
구성 예시
Tailnet 전용(Serve)
{ gateway: { bind: "loopback", tailscale: { mode: "serve" }, },}열기: https://<magicdns>/(또는 구성한 gateway.controlUi.basePath)
기기 호스트 이름 대신 명명된 Tailscale Service를 통해 Control UI를 노출하려면 gateway.tailscale.serviceName을 Service 이름으로 설정합니다.
{ gateway: { bind: "loopback", tailscale: { mode: "serve", serviceName: "svc:openclaw" }, },}그러면 시작 시 기기 호스트 이름 대신 Service URL이 https://openclaw.<tailnet-name>.ts.net/으로 보고됩니다. Tailscale Services를 사용하려면 호스트가 tailnet에서 승인된 태그 지정 Node여야 합니다. 이를 활성화하기 전에 Tailscale에서 태그를 구성하고 Service를 승인하세요. 그렇지 않으면 Gateway 시작 중 tailscale serve --service=...가 실패합니다.
Tailnet 전용(Tailnet IP에 바인딩)
Serve/Funnel 없이 Gateway가 Tailnet IP에서 직접 수신하도록 하려면 다음을 사용합니다.
{ gateway: { bind: "tailnet", auth: { mode: "token", token: "your-token" }, },}다른 Tailnet 기기에서 연결합니다.
- Control UI:
http://<tailscale-ip>:18789/ - WebSocket:
ws://<tailscale-ip>:18789
공개 인터넷(Funnel + 공유 비밀번호)
{ gateway: { bind: "loopback", tailscale: { mode: "funnel" }, auth: { mode: "password", password: "replace-me" }, },}비밀번호를 디스크에 커밋하는 대신 OPENCLAW_GATEWAY_PASSWORD를 사용하는 것이 좋습니다.
CLI 예시
openclaw gateway --tailscale serveopenclaw gateway --tailscale funnel --auth password인증
gateway.auth.mode는 핸드셰이크를 제어합니다.
| 모드 | 사용 사례 |
|---|---|
none |
비공개 인그레스 전용 |
token (OPENCLAW_GATEWAY_TOKEN이 설정된 경우 기본값) |
공유 토큰 |
password |
OPENCLAW_GATEWAY_PASSWORD 또는 구성을 통한 공유 비밀 |
trusted-proxy |
ID 인식 역방향 프록시. 신뢰할 수 있는 프록시 인증을 참조하세요. |
Tailscale ID 헤더(Serve 전용)
tailscale.mode: "serve"이고 gateway.auth.allowTailscale이 true이면 Control UI/WebSocket 인증에서 토큰/비밀번호 대신 Tailscale ID 헤더(tailscale-user-login)를 사용할 수 있습니다. OpenClaw은 요청을 수락하기 전에 로컬 Tailscale 데몬(tailscale whois)을 통해 요청의 x-forwarded-for 주소를 확인하고 헤더의 로그인 정보와 일치시키는 방식으로 헤더를 검증합니다. 요청이 루프백에서 도착하고 Tailscale의 x-forwarded-for, x-forwarded-proto, x-forwarded-host 헤더를 포함하는 경우에만 이 경로를 사용할 수 있습니다.
이 토큰 없는 흐름은 Gateway 호스트가 신뢰할 수 있다고 가정합니다. 신뢰할 수 없는 로컬 코드가 같은 호스트에서 실행될 수 있다면 gateway.auth.allowTailscale: false를 설정하고 대신 토큰/비밀번호 인증을 요구하세요.
우회 범위:
- Control UI WebSocket 인증 표면에만 적용됩니다. HTTP API 엔드포인트(
/v1/*,/tools/invoke,/api/channels/*등)는 Tailscale ID 헤더 인증을 절대 사용하지 않으며 항상 Gateway의 일반 HTTP 인증 모드를 따릅니다. - 브라우저 기기 ID가 이미 포함된 Control UI 운영자 세션의 경우, 검증된 Tailscale ID를 사용하면 부트스트랩 토큰/QR 페어링 왕복 과정을 건너뜁니다.
- 기기 ID 자체를 우회하지는 않습니다. 기기 정보가 없는 클라이언트는 계속 거부되며, Node 역할 연결도 일반 페어링 및 인증 검사를 계속 거칩니다.
참고 사항
- Tailscale Serve/Funnel을 사용하려면
tailscaleCLI가 설치되어 있고 로그인되어 있어야 합니다. - 공개 노출을 방지하기 위해 인증 모드가
password가 아니면tailscale.mode: "funnel"은 시작을 거부합니다. gateway.tailscale.serviceName은 Serve 모드에만 적용되며tailscale serve --service=<name>에 전달됩니다. 값은 Tailscale의svc:<dns-label>형식(예:svc:openclaw)을 사용해야 합니다. Tailscale에서는 Service 호스트가 태그 지정 Node여야 하며 Serve가 Service를 게시하기 전에 관리자 콘솔 승인이 필요할 수 있습니다.gateway.tailscale.resetOnExit은 종료 시tailscale serve/tailscale funnel구성을 되돌립니다.gateway.tailscale.preserveFunnel: true는 외부에서 구성된tailscale funnel경로가 Gateway 재시작 후에도 유지되도록 합니다.mode: "serve"일 때 OpenClaw은 Serve를 다시 적용하기 전에tailscale funnel status를 확인하고 Funnel 경로가 이미 Gateway 포트를 포함하면 적용을 건너뜁니다. OpenClaw이 관리하는 Funnel의 비밀번호 전용 정책은 변경되지 않습니다.gateway.bind: "tailnet"은 Tailnet IPv4를 사용할 수 있을 때 직접 Tailnet 바인딩(HTTPS 및 Serve/Funnel 없음)과 필수 로컬127.0.0.1을 사용하며, 그렇지 않으면 루프백 전용으로 대체됩니다.gateway.bind: "auto"는 루프백을 우선합니다. 동일 호스트의 루프백 액세스를 유지하면서 네트워크 노출을 Tailnet으로 제한하려면tailnet을 사용하세요.- Serve/Funnel은 Gateway 제어 UI + WS만 노출합니다. Node도 동일한 Gateway WS 엔드포인트를 통해 연결되므로 Serve는 Node 액세스에도 사용할 수 있습니다.
Tailscale 전제 조건 및 제한 사항
- Serve를 사용하려면 tailnet에 HTTPS가 활성화되어 있어야 합니다. 활성화되어 있지 않으면 CLI에 메시지가 표시됩니다.
- Serve는 Tailscale ID 헤더를 삽입하지만 Funnel은 삽입하지 않습니다.
- Funnel을 사용하려면 Tailscale v1.38.3 이상, MagicDNS, 활성화된 HTTPS 및 Funnel Node 속성이 필요합니다.
- Funnel은 TLS를 통한 포트
443,8443,10000만 지원합니다. - macOS에서 Funnel을 사용하려면 오픈 소스 Tailscale 앱 변형이 필요합니다.
브라우저 제어(원격 Gateway + 로컬 브라우저)
한 컴퓨터에서 Gateway를 실행하면서 다른 컴퓨터의 브라우저를 제어하려면 브라우저 컴퓨터에서 Node 호스트를 실행하고 두 컴퓨터를 동일한 tailnet에 유지하세요. Gateway가 브라우저 작업을 Node로 프록시하므로 별도의 제어 서버나 Serve URL은 필요하지 않습니다.
브라우저 제어에는 Funnel을 사용하지 마세요. Node 페어링을 운영자 액세스와 동일하게 취급하세요.
자세히 알아보기
- Tailscale Serve 개요: https://tailscale.com/kb/1312/serve
tailscale serve명령: https://tailscale.com/kb/1242/tailscale-serve- Tailscale Funnel 개요: https://tailscale.com/kb/1223/tailscale-funnel
tailscale funnel명령: https://tailscale.com/kb/1311/tailscale-funnel