tailscale/tailscale · error

only implemented on Synology

Error message

only implemented on Synology

What it means

runConfigureSynology requires runtime.GOOS == linux AND distro.Get() == distro.Synology before it will create /dev/net/tun and adjust outbound settings. The command manipulates DSM-specific system state, so on ordinary Linux or non-Linux hosts it refuses immediately with this error.

Source

Thrown at cmd/tailscale/cli/configure-synology.go:74

This command is intended to run at boot as root on a Synology device to
create the /dev/net/tun device and give the tailscaled binary permission
to use it.

See: https://tailscale.com/s/synology-outbound
`),
		FlagSet: (func() *flag.FlagSet {
			fs := newFlagSet("synology")
			return fs
		})(),
	}
}

func runConfigureSynology(ctx context.Context, args []string) error {
	if len(args) > 0 {
		return errors.New("unknown arguments")
	}
	if runtime.GOOS != "linux" || distro.Get() != distro.Synology {
		return errors.New("only implemented on Synology")
	}
	if uid := os.Getuid(); uid != 0 {
		return fmt.Errorf("must be run as root, not %q (%v)", os.Getenv("USER"), uid)
	}
	hi := hostinfo.New()
	isDSM6 := strings.HasPrefix(hi.DistroVersion, "6.")
	isDSM7 := strings.HasPrefix(hi.DistroVersion, "7.")
	if !isDSM6 && !isDSM7 {
		return fmt.Errorf("unsupported DSM version %q", hi.DistroVersion)
	}
	if _, err := os.Stat("/dev/net/tun"); os.IsNotExist(err) {
		if err := os.MkdirAll("/dev/net", 0755); err != nil {
			return fmt.Errorf("creating /dev/net: %v", err)
		}
		if out, err := exec.Command("/bin/mknod", "/dev/net/tun", "c", "10", "200").CombinedOutput(); err != nil {
			return fmt.Errorf("creating /dev/net/tun: %v, %s", err, out)
		}
	}

View on GitHub (pinned to cfe32b8be6)

Solutions

  1. SSH into the Synology NAS and run `sudo tailscale configure synology` there
  2. Verify DSM detection: `cat /etc/VERSION` should show a DSM build
  3. If the CLI is containerized on the NAS, run it from the host shell instead

Example fix

# before
$ tailscale configure synology
error: only implemented on Synology

# after
nas$ sudo tailscale configure synology
Defensive patterns

Strategy: validation

Validate before calling

[ "$(uname -s)" = "Linux" ] || { echo 'needs Linux'; exit 1; }
grep -q synology /etc/VERSION 2>/dev/null || { echo 'only on Synology DSM hosts'; exit 1; }
sudo tailscale configure synology

Prevention

When it happens

Trigger: Executing `tailscale configure synology` anywhere other than a Synology DSM host — a desktop, a Debian server, or an environment where distro.Get() fails to identify DSM.

Common situations: Running the setup from a workstation by mistake; a containerized tailscale CLI on the NAS that cannot see DSM markers; testing in a VM that mimics but is not DSM.

Related errors


AI-assisted analysis of tailscale/tailscale@cfe32b8be6 (2026-08-15). Data as JSON: /api/errors/01ee08ed586ee8f5. Report an issue: GitHub.