Skip to content

CLI hard-blocks ws:// to Tailscale IPs — regression in v2026.2.19 for bind: lan users #21760

@Stache73

Description

@Stache73

Description

v2026.2.19 introduced a hard security check in isSecureWebSocketUrl() that throws SECURITY ERROR for any ws:// connection to a non-loopback address. This completely breaks CLI commands (openclaw status, openclaw devices, openclaw doctor, etc.) for users who run gateway.bind: "lan" with Tailscale.

Environment

  • OpenClaw: v2026.2.19-2
  • OS: Windows 10 (10.0.19045)
  • Node: v24.6.0
  • Tailscale: active, IP 100.94.193.120

Steps to Reproduce

  1. Set gateway.bind: "lan" (needed for phone node access over Tailscale)
  2. Update to v2026.2.19
  3. Run any CLI command: openclaw status, openclaw devices, etc.

Expected Behavior

CLI connects to the gateway. Tailscale traffic is WireGuard-encrypted end-to-end, so ws:// over Tailscale is effectively as secure as wss://.

Actual Behavior

SECURITY ERROR: Gateway URL "ws://100.94.193.120:18789" uses plaintext ws:// to a non-loopback address.
Both credentials and chat data would be exposed to network interception.

Even --url ws://localhost:18789 is ignored — the check still resolves the LAN IP from config.

Impact

  • All CLI commands are broken (status, devices, doctor, security audit, etc.)
  • Gateway itself runs fine (Discord/messaging works)
  • The --url override doesn't bypass the check
  • No config option to allowlist trusted networks

Suggested Fix

One or more of:

  1. Detect Tailscale IPs (100.64.0.0/10 CGNAT range) and treat them as trusted (WireGuard-encrypted)
  2. Add gateway.security.allowInsecureWs: true config override for advanced users
  3. Honor --url override and skip the auto-detected LAN IP check
  4. Make this a warning instead of a hard error, with --force to proceed

Workaround

Switching to Tailscale Serve mode may work but is a significant config change. Rolling back to v2026.2.17 restores full functionality.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions