coder/wush

`panic: node with zero ID` when running `wush serve` on ARM Windows, freezes in the other direction

Closed this issue ยท 10 comments

Windows server

I'm running ARM Windows 11 in a VM (set up following these instructions ) and ran wush serve there from the official binary at

https://github.com/coder/wush/releases/download/v0.2.1/wush_0.2.1_windows_arm64.zip

It seems to work, but when I run wush ssh or wush cp from the ARM Mac OS host, I get the same error:

macos:~$ wush cp VERSION
Auth information:
        > Server overlay STUN address:  Disabled
        > Server overlay DERP home:     San Francisco
        > Server overlay public key:    [MKp73]
        > Server overlay auth key:      [gIf3M]
Bringing WireGuard up..
panic: node with zero ID

goroutine 437 [running]:
tailscale.com/wgengine/magicsock.devPanicf({0x103d1dbdb, 0x11}, {0x0, 0x0, 0x0})
        tailscale.com@v1.70.0/wgengine/magicsock/magicsock.go:2168 +0x74
tailscale.com/wgengine/magicsock.(*Conn).SetNetworkMap(0x140003b1408, 0x14000d1e008)
        tailscale.com@v1.70.0/wgengine/magicsock/magicsock.go:2043 +0x364
tailscale.com/wgengine.(*userspaceEngine).SetNetworkMap(0x1400019d808, 0x14000d1e008)
        tailscale.com@v1.70.0/wgengine/userspace.go:1253 +0x2c
tailscale.com/ipn/ipnlocal.(*LocalBackend).SetControlClientStatus(0x14000123208, {0x10438e7e0, 0x1400043f040}, {{}, {0x0, 0x0}, {0x0, 0x0}, 0x14000d1e008, {0x14000439440}, ...})
        tailscale.com@v1.70.0/ipn/ipnlocal/local.go:1441 +0x10ec
tailscale.com/control/controlclient.(*Auto).sendStatus.func1()
        tailscale.com@v1.70.0/control/controlclient/auto.go:610 +0x50
tailscale.com/util/execqueue.(*ExecQueue).run(0x1400043f080, 0x14000446df0?)
        tailscale.com@v1.70.0/util/execqueue/execqueue.go:57 +0x28
created by tailscale.com/util/execqueue.(*ExecQueue).Add in goroutine 190
        tailscale.com@v1.70.0/util/execqueue/execqueue.go:31 +0x1a0

On the server, I get messages like

15:01:37 Received connection request over DERP from ...
15:01:38 Received updated node from  ....
15:01:38 Received updated node from  ....
15:01:38 Received updated node from  ....

Windows client

When I run wush serve on the Mac OS host, I get a different problem. When I run wush cp on the Windows VM, I get:

windows:~>  ./wush cp wush.exe
Auth information:
        > Server overlay STUN address:  Disabled
        > Server overlay DERP home:     Los Angeles
        > Server overlay public key:    [fy3OO]
        > Server overlay auth key:      [ZNkj+]
Bringing WireGuard up..

... and everything freezes. On the server, it prints:

macos:~$  wush serve
Picked DERP region  Los Angeles  as overlay home
Your auth key is:
        >  ...
Use this key to authenticate other  wush  commands to this instance.
15:04:03 WireGuard is ready
15:04:03 SSH server enabled
15:04:03 File transfer server enabled
15:04:24 Received connection request over DERP from WINDOWS-OANL56F\ilyagr@WINDOWS-OANL56F
15:07:16 Received connection request over DERP from WINDOWS-OANL56F\ilyagr@WINDOWS-OANL56F

wush ssh gives the same result

Hey @ilyagr, thanks for reporting. Could you share the logs of wush cp -v VERSION? It may contain IP addresses, fyi.

Here you go:

macos:~> wush  cp -v mkdocs.yml
Auth information:
        > Server overlay STUN address:  Disabled
        > Server overlay DERP home:     San Francisco
        > Server overlay public key:    [7II/4]
        > Server overlay auth key:      [z9fOB]
Bringing WireGuard up..
time=2024-09-30T18:33:15.381-07:00 level=INFO msg="got key request"
time=2024-09-30T18:33:15.386-07:00 level=INFO msg="got noise upgrade request"
time=2024-09-30T18:33:15.386-07:00 level=INFO msg="accepted control http"
time=2024-09-30T18:33:15.387-07:00 level=INFO msg="got noise registration request"
time=2024-09-30T18:33:15.387-07:00 level=INFO msg="notify update"
time=2024-09-30T18:33:15.387-07:00 level=INFO msg="notify update done"
time=2024-09-30T18:33:15.387-07:00 level=INFO msg="finished registration"
time=2024-09-30T18:33:15.388-07:00 level=INFO msg="got noise poll request"
time=2024-09-30T18:33:15.388-07:00 level=INFO msg="got noise poll request"
time=2024-09-30T18:33:15.388-07:00 level=INFO msg="endpoint update"
time=2024-09-30T18:33:15.388-07:00 level=INFO msg=streaming
time=2024-09-30T18:33:15.392-07:00 level=INFO msg="got noise poll request"
time=2024-09-30T18:33:15.392-07:00 level=INFO msg="endpoint update"
panic: node with zero ID

goroutine 443 [running]:
tailscale.com/wgengine/magicsock.devPanicf({0x101d8aecf, 0x11}, {0x0, 0x0, 0x0})
        /Users/ilyagr/go/pkg/mod/github.com/coadler/tailscale@v1.1.1-0.20240815205130-c39ab8bcc2a9/wgengine/magicsock/magicsock.go:2168 +0x74
tailscale.com/wgengine/magicsock.(*Conn).SetNetworkMap(0x14000400c08, 0x1400095a6c8)
        /Users/ilyagr/go/pkg/mod/github.com/coadler/tailscale@v1.1.1-0.20240815205130-c39ab8bcc2a9/wgengine/magicsock/magicsock.go:2043 +0x36c
tailscale.com/wgengine.(*userspaceEngine).SetNetworkMap(0x1400039e008, 0x1400095a6c8)
        /Users/ilyagr/go/pkg/mod/github.com/coadler/tailscale@v1.1.1-0.20240815205130-c39ab8bcc2a9/wgengine/userspace.go:1253 +0x2c
tailscale.com/ipn/ipnlocal.(*LocalBackend).SetControlClientStatus(0x1400027ad88, {0x1023fb540, 0x140003ca280}, {{}, {0x0, 0x0}, {0x0, 0x0}, 0x1400095a6c8, {0x140001e05a0}, ...})
        /Users/ilyagr/go/pkg/mod/github.com/coadler/tailscale@v1.1.1-0.20240815205130-c39ab8bcc2a9/ipn/ipnlocal/local.go:1441 +0x10f8
tailscale.com/control/controlclient.(*Auto).sendStatus.func1()
        /Users/ilyagr/go/pkg/mod/github.com/coadler/tailscale@v1.1.1-0.20240815205130-c39ab8bcc2a9/control/controlclient/auto.go:610 +0x50
tailscale.com/util/execqueue.(*ExecQueue).run(0x140003ca2c0, 0x140004928f0?)
        /Users/ilyagr/go/pkg/mod/github.com/coadler/tailscale@v1.1.1-0.20240815205130-c39ab8bcc2a9/util/execqueue/execqueue.go:57 +0x28
created by tailscale.com/util/execqueue.(*ExecQueue).Add in goroutine 81
        /Users/ilyagr/go/pkg/mod/github.com/coadler/tailscale@v1.1.1-0.20240815205130-c39ab8bcc2a9/util/execqueue/execqueue.go:31 +0x1a4
macos:~>

And in the other direction:

windows-arm:~> $ ./wush cp -v wush.exe
Auth information:
        > Server overlay STUN address:  Disabled
        > Server overlay DERP home:     San Francisco
        > Server overlay public key:    [ygFsB]
        > Server overlay auth key:      [c1LUJ]
Bringing WireGuard up..

It freezes forever at this point. (Though wish serve on Mac OS prints something about a connection request at this point as shown in my original message)

I pushed a commit e9a7958 that should help debug further, I wasn't outputting the tailscale logs in verbose mode. If you could retry verbose on windows where it's hanging on the latest commit, that should clear it up. Thanks!

Here you go.

MacOS as the client (crash)

macos:~/dev/wush/cmd/wush$ go run . cp -v cp.go
Auth information:
        > Server overlay STUN address:  Disabled
        > Server overlay DERP home:     San Francisco
        > Server overlay public key:    [lbiZk]
        > Server overlay auth key:      [VyyZU]
Bringing WireGuard up..
[v1] using fake (no-op) tun device
[v1] using fake (no-op) OS network configurator
[v1] using fake (no-op) DNS configurator
dns: using dns.noopManager
link state: interfaces.State{defaultRoute=en0 ifs={bridge100:[192.168.64.1/24 fd92:bcb2:adb8:4777:1c7f:e258:d7c3:58ed/64 llu6] en0:[192.168.0.91/24 llu6]} v4=true v6=true}
onPortUpdate(port=63117, network=udp6)
[v1] warning: fakeRouter.UpdateMagicsockPort: not implemented.
onPortUpdate(port=62390, network=udp4)
[v1] warning: fakeRouter.UpdateMagicsockPort: not implemented.
[v1] magicsock: peermtu: peer MTU status is false
[v1] couldn't create raw v4 disco listener, using regular listener instead: raw disco listening not supported on this OS
[v1] couldn't create raw v6 disco listener, using regular listener instead: raw disco listening not supported on this OS
magicsock: disco key = d:3d9070d8cb67133e
Creating WireGuard device...
Bringing WireGuard device up...
wg: [v2] UDP bind has been updated
wg: [v2] Interface state was Down, requested Up, now Up
Bringing router up...
[v1] warning: fakeRouter.Up: not implemented.
Clearing router settings...
[v1] warning: fakeRouter.Set: not implemented.
Starting network monitor...
Engine created.
wg: [v2] Routine: receive incoming receiveDERP - started
wg: [v2] Routine: receive incoming mkReceiveFunc - started
wg: [v2] Routine: receive incoming mkReceiveFunc - started
pm: migrating "_daemon" profile to new format
logpolicy: using system state directory "/Users/ilyagr/.local/share/tailscale"
[v1] netmap packet filter: (not ready yet)
tsnet starting with hostname "wush-send", varRoot "/var/folders/lj/rv4h95_d0mxb9ryztzpz4qph0000gn/T/"
Start
[vJSON]1{"Hostinfo":{"IPNVersion":"1.71.0-ERR-BuildInfo","BackendLogID":"fd23dc23f760198f29f76092b618b9894faf3d038a2253403ff5d4e9f21da52e","OS":"macOS","Package":"tsnet","Hostname":"macaw","Machine":"arm64","GoArch":"arm64","GoVersion":"go1.22.5","Userspace":true,"UserspaceRouter":true,"AppConnector":false}}
generating new machine key
machine key written to store
[v1] netmap packet filter: (not ready yet)
timeout waiting for initial portlist
control: [v1] HostInfo: {"IPNVersion":"1.71.0-ERR-BuildInfo","BackendLogID":"fd23dc23f760198f29f76092b618b9894faf3d038a2253403ff5d4e9f21da52e","OS":"macOS","Package":"tsnet","Hostname":"wush-send","Machine":"arm64","GoArch":"arm64","GoVersion":"go1.22.5","Userspace":true,"UserspaceRouter":true,"AppConnector":false}
Backend: logs: be:fd23dc23f760198f29f76092b618b9894faf3d038a2253403ff5d4e9f21da52e fe:
control: [v1] authRoutine: state:new; goal=nil paused=false
control: [v1] mapRoutine: state:new
Switching ipn state NoState -> NeedsLogin (WantRunning=true, nm=false)
control: [v1] HostInfo: {"IPNVersion":"1.71.0-ERR-BuildInfo","BackendLogID":"fd23dc23f760198f29f76092b618b9894faf3d038a2253403ff5d4e9f21da52e","OS":"macOS","Package":"tsnet","Hostname":"wush-send","Machine":"arm64","GoArch":"arm64","GoVersion":"go1.22.5","Services":[{"Proto":"peerapi-dns-proxy","Port":1}],"Userspace":true,"UserspaceRouter":true,"AppConnector":false}
blockEngineUpdates(true)
health(warnable=is-using-unstable-version): error: This is an unstable version of Tailscale meant for testing and development purposes. Please report any issues to Tailscale.
health(warnable=warming-up): error: Tailscale is starting. Please wait.
[v1] magicsock: peermtu: peer MTU status is false
wgengine: Reconfig: configuring userspace WireGuard config (with 0/0 peers)
wgengine: Reconfig: configuring router
[v1] warning: fakeRouter.Set: not implemented.
wgengine: Reconfig: configuring DNS
dns: Set: {DefaultResolvers:[] Routes:{} SearchDomains:[] Hosts:0}
dns: Resolvercfg: {Routes:{} Hosts:0 LocalDomains:[]}
dns: OScfg: {}
[v1] wgengine: Reconfig done
LocalBackend state is NeedsLogin; running StartLoginInteractive...
StartLoginInteractive: url=false
control: client.Login(6)
control: [v1] mapRoutine: context done.
control: [v1] mapRoutine: state:new
control: [v1] authRoutine: context done.
control: [v1] authRoutine: state:new; wantLoggedIn=true
control: [v1] direct.TryLogin(flags=6)
control: LoginInteractive -> regen=true
control: doLogin(regen=true, hasUrl=false)
time=2024-10-01T12:53:22.386-07:00 level=INFO msg="got key request"
control: control server key from http://localhost:8080: ts2021=[5E/wt], legacy=
control: Generating a new nodekey.
control: RegisterReq: onode= node=[Qzszg] fup=false nks=false
control: [v1] creating new noise client
time=2024-10-01T12:53:22.393-07:00 level=INFO msg="got noise upgrade request"
time=2024-10-01T12:53:22.394-07:00 level=INFO msg="accepted control http"
time=2024-10-01T12:53:22.395-07:00 level=INFO msg="got noise registration request"
time=2024-10-01T12:53:22.395-07:00 level=INFO msg="notify update"
time=2024-10-01T12:53:22.395-07:00 level=INFO msg="notify update done"
time=2024-10-01T12:53:22.395-07:00 level=INFO msg="finished registration"
control: RegisterReq: got response; nodeKeyExpired=false, machineAuthorized=true; authURL=false
control: [v1] No AuthURL
control: [v1] sendStatus: authRoutine-success: state:authenticated
control: [v1] restartMap: synced=false
control: [v1] authRoutine: state:authenticated; goal=nil paused=false
control: [v1] mapRoutine: context done.
control: [v1] PollNetMap: stream=false ep=[]
control: [v1] mapRoutine: state:authenticated
blockEngineUpdates(false)
control: [v1] PollNetMap: stream=true ep=[]
[v1] authReconfig: netmap not yet valid. Skipping.
[v1] authReconfig: netmap not yet valid. Skipping.
time=2024-10-01T12:53:22.396-07:00 level=INFO msg="got noise poll request"
time=2024-10-01T12:53:22.397-07:00 level=INFO msg="got noise poll request"
time=2024-10-01T12:53:22.397-07:00 level=INFO msg="endpoint update"
time=2024-10-01T12:53:22.397-07:00 level=INFO msg=streaming
control: [v1] successful lite map update in 1ms
control: [vJSON]1{"controltime":"2024-10-01T19:53:22.397125Z"}
health(warnable=not-in-map-poll): ok
control: [v1] new network map (periodic):
netmap: self: [Qzszg] auth=machine-authorized u=userid:7b [100.64.0.4/32]

control: [v1] mapRoutine: netmap received: state:synchronized
control: [v1] sendStatus: mapRoutine-got-netmap: state:synchronized
[v2] netstack: registered IP 100.64.0.4/32
active login: <missing-profile>
[v1] netmap packet filter: 1 filters
Switching ipn state NeedsLogin -> Starting (WantRunning=true, nm=true)
monitor: gateway and self IP changed: gw=192.168.0.1 self=192.168.0.91
[v1] shouldUseOneCGNATRoute: macOS automatic=true
magicsock: SetPrivateKey called (init)
[v1] magicsock: peermtu: peer MTU status is false
wgengine: Reconfig: configuring userspace WireGuard config (with 0/0 peers)
wg: [v2] UAPI: Updating private key
wgengine: Reconfig: configuring router
[v1] warning: fakeRouter.Set: not implemented.
wgengine: Reconfig: configuring DNS
dns: Set: {DefaultResolvers:[] Routes:{} SearchDomains:[] Hosts:1}
dns: Resolvercfg: {Routes:{} Hosts:1 LocalDomains:[]}
dns: OScfg: {}
[v1] wgengine: Reconfig done
[v1] authReconfig: ra=true dns=true 0x02: <nil>
peerapi: serving on http://100.64.0.4:37067
control: [v1] HostInfo: {"IPNVersion":"1.71.0-ERR-BuildInfo","BackendLogID":"fd23dc23f760198f29f76092b618b9894faf3d038a2253403ff5d4e9f21da52e","OS":"macOS","Package":"tsnet","Hostname":"wush-send","Machine":"arm64","GoArch":"arm64","GoVersion":"go1.22.5","Services":[{"Proto":"peerapi4","Port":37067},{"Proto":"peerapi-dns-proxy","Port":1}],"Userspace":true,"UserspaceRouter":true,"AppConnector":false}
control: [v1] PollNetMap: stream=false ep=[]
[v1] shouldUseOneCGNATRoute: macOS automatic=true
[v1] magicsock: peermtu: peer MTU status is false
[v1] wgengine: Reconfig done
[v1] authReconfig: ra=true dns=true 0x02: <nil>
time=2024-10-01T12:53:22.404-07:00 level=INFO msg="got noise poll request"
time=2024-10-01T12:53:22.404-07:00 level=INFO msg="endpoint update"
control: [v1] successful lite map update in 0s
control: [vJSON]1{"controltime":"2024-10-01T19:53:22.462345Z"}
control: [v1] mapRoutine: netmap received: state:synchronized
control: [v1] sendStatus: mapRoutine-got-netmap: state:synchronized
[v1] netmap diff:
+                     :

[v1] magicsock: got updated network map; 1 peers
panic: node with zero ID

goroutine 467 [running]:
tailscale.com/wgengine/magicsock.devPanicf({0x1054ceba1, 0x11}, {0x0, 0x0, 0x0})
        /Users/ilyagr/go/pkg/mod/github.com/coadler/tailscale@v1.1.1-0.20240926000438-059d0c1039af/wgengine/magicsock/magicsock.go:2168 +0x74
tailscale.com/wgengine/magicsock.(*Conn).SetNetworkMap(0x140003a6c08, 0x1400089c008)
        /Users/ilyagr/go/pkg/mod/github.com/coadler/tailscale@v1.1.1-0.20240926000438-059d0c1039af/wgengine/magicsock/magicsock.go:2043 +0x36c
tailscale.com/wgengine.(*userspaceEngine).SetNetworkMap(0x140000fa608, 0x1400089c008)
        /Users/ilyagr/go/pkg/mod/github.com/coadler/tailscale@v1.1.1-0.20240926000438-059d0c1039af/wgengine/userspace.go:1253 +0x2c
tailscale.com/ipn/ipnlocal.(*LocalBackend).SetControlClientStatus(0x1400040a008, {0x105b3f640, 0x140000f2280}, {{}, {0x0, 0x0}, {0x0, 0x0}, 0x1400089c008, {0x14000001440}, ...})
        /Users/ilyagr/go/pkg/mod/github.com/coadler/tailscale@v1.1.1-0.20240926000438-059d0c1039af/ipn/ipnlocal/local.go:1441 +0x10f8
tailscale.com/control/controlclient.(*Auto).sendStatus.func1()
        /Users/ilyagr/go/pkg/mod/github.com/coadler/tailscale@v1.1.1-0.20240926000438-059d0c1039af/control/controlclient/auto.go:610 +0x50
tailscale.com/util/execqueue.(*ExecQueue).run(0x140000f22c0, 0x140003acee0?)
        /Users/ilyagr/go/pkg/mod/github.com/coadler/tailscale@v1.1.1-0.20240926000438-059d0c1039af/util/execqueue/execqueue.go:57 +0x28
created by tailscale.com/util/execqueue.(*ExecQueue).Add in goroutine 195
        /Users/ilyagr/go/pkg/mod/github.com/coadler/tailscale@v1.1.1-0.20240926000438-059d0c1039af/util/execqueue/execqueue.go:31 +0x1a4
exit status 2

Windows as a client

PS H:\dev\wush\cmd\wush> ./wush cp -v .\version.go
Auth information:
        > Server overlay STUN address:  Disabled
        > Server overlay DERP home:     San Francisco
        > Server overlay public key:    [kaT7v]
        > Server overlay auth key:      [QcjTq]
Bringing WireGuard up..
[v1] using fake (no-op) tun device
[v1] using fake (no-op) OS network configurator
[v1] using fake (no-op) DNS configurator
dns: using dns.noopManager
link state: interfaces.State{defaultRoute=Ethernet (Red Hat VirtIO Ethernet Adapter) ifs={Ethernet:[192.168.64.2/24 fd92:bcb2:adb8:4777:3905:97aa:fee1:9dfd/128 fd92:bcb2:adb8:4777:d857:b470:1d75:4a54/64 llu6] Tailscale:[100.78.26.1/32 fd7a:115c:a1e0::6501:1a01/128 llu6]} v4=true v6=true}
onPortUpdate(port=51435, network=udp6)
[v1] warning: fakeRouter.UpdateMagicsockPort: not implemented.
onPortUpdate(port=51436, network=udp4)
[v1] warning: fakeRouter.UpdateMagicsockPort: not implemented.
[v1] couldn't create raw v4 disco listener, using regular listener instead: raw disco listening not supported on this OS
[v1] couldn't create raw v6 disco listener, using regular listener instead: raw disco listening not supported on this OS
magicsock: disco key = d:c9387b814555f131
Creating WireGuard device...
Bringing WireGuard device up...
wg: [v2] UDP bind has been updated
wg: [v2] Routine: receive incoming mkReceiveFunc - started
wg: [v2] Routine: receive incoming mkReceiveFunc - started
wg: [v2] Interface state was Down, requested Up, now Up
Bringing router up...
[v1] warning: fakeRouter.Up: not implemented.
Clearing router settings...
[v1] warning: fakeRouter.Set: not implemented.
Starting network monitor...
wg: [v2] Routine: receive incoming receiveDERP - started
Engine created.
logpolicy: using LocalAppData dir C:\Users\ilyagr\AppData\Local\Tailscale
[v1] netmap packet filter: (not ready yet)
tsnet starting with hostname "wush-send", varRoot "C:\\Users\\ilyagr\\AppData\\Local\\Temp"
Start
[vJSON]1{"Hostinfo":{"IPNVersion":"1.71.0-dev20241001-t76648322e-dirty","BackendLogID":"d8ae73d301bef59a95ede53ee02b7e7396fb7f0c2f08ad5284676755ddbf8467","OS":"windows","OSVersion":"10.0.22631.4169","Package":"tsnet","Hostname":"WINDOWS-OANL56F","GoArch":"arm64","GoVersion":"go1.22.5","Userspace":true,"UserspaceRouter":true,"AppConnector":false}}
generating new machine key
machine key written to store
Start: serverMode=false
[v1] netmap packet filter: (not ready yet)
timeout waiting for initial portlist
control: [v1] HostInfo: {"IPNVersion":"1.71.0-dev20241001-t76648322e-dirty","BackendLogID":"d8ae73d301bef59a95ede53ee02b7e7396fb7f0c2f08ad5284676755ddbf8467","OS":"windows","OSVersion":"10.0.22631.4169","Package":"tsnet","Hostname":"wush-send","GoArch":"arm64","GoVersion":"go1.22.5","Userspace":true,"UserspaceRouter":true,"AppConnector":false}
control: [v1] authRoutine: state:new; goal=nil paused=false
control: [v1] mapRoutine: state:new
Backend: logs: be:d8ae73d301bef59a95ede53ee02b7e7396fb7f0c2f08ad5284676755ddbf8467 fe:
Switching ipn state NoState -> NeedsLogin (WantRunning=true, nm=false)
control: [v1] HostInfo: {"IPNVersion":"1.71.0-dev20241001-t76648322e-dirty","BackendLogID":"d8ae73d301bef59a95ede53ee02b7e7396fb7f0c2f08ad5284676755ddbf8467","OS":"windows","OSVersion":"10.0.22631.4169","Package":"tsnet","Hostname":"wush-send","GoArch":"arm64","GoVersion":"go1.22.5","Services":[{"Proto":"peerapi-dns-proxy","Port":1}],"Userspace":true,"UserspaceRouter":true,"AppConnector":false}
health(warnable=warming-up): error: Tailscale is starting. Please wait.
health(warnable=is-using-unstable-version): error: This is an unstable version of Tailscale meant for testing and development purposes. Please report any issues to Tailscale.
blockEngineUpdates(true)
wgengine: Reconfig: configuring userspace WireGuard config (with 0/0 peers)
wgengine: Reconfig: configuring router
[v1] warning: fakeRouter.Set: not implemented.
wgengine: Reconfig: configuring DNS
dns: Set: {DefaultResolvers:[] Routes:{} SearchDomains:[] Hosts:0}
dns: Resolvercfg: {Routes:{} Hosts:0 LocalDomains:[]}
dns: OScfg: {}
[v1] wgengine: Reconfig done
LocalBackend state is NeedsLogin; running StartLoginInteractive...
StartLoginInteractive: url=false
control: client.Login(6)
control: [v1] mapRoutine: context done.
control: [v1] mapRoutine: state:new
control: [v1] authRoutine: context done.
control: [v1] authRoutine: state:new; wantLoggedIn=true
control: [v1] direct.TryLogin(flags=6)
control: LoginInteractive -> regen=true
control: doLogin(regen=true, hasUrl=false)
control: trying bootstrapDNS("derp11.tailscale.com", "18.230.97.74") for "localhost" ...
control: trying bootstrapDNS("derp12.tailscale.com", "2001:19f0:5c01:289:5400:3ff:fe8d:cb5e") for "localhost" ...
control: bootstrapDNS("derp12.tailscale.com", "2001:19f0:5c01:289:5400:3ff:fe8d:cb5e") for "localhost" error: Get "https://derp12.tailscale.com/bootstrap-dns?q=localhost": dial tcp [2001:19f0:5c01:289:5400:3ff:fe8d:cb5e]:443: connectex: A socket operation was attempted to an unreachable network.
control: trying bootstrapDNS("derp1e.tailscale.com", "64.225.56.166") for "localhost" ...
control: trying bootstrapDNS("derp12c.tailscale.com", "2001:19f0:5c01:2cb:5400:3ff:fe8d:cb60") for "localhost" ...
control: bootstrapDNS("derp12c.tailscale.com", "2001:19f0:5c01:2cb:5400:3ff:fe8d:cb60") for "localhost" error: Get "https://derp12c.tailscale.com/bootstrap-dns?q=localhost": dial tcp [2001:19f0:5c01:2cb:5400:3ff:fe8d:cb60]:443: connectex: A socket operation was attempted to an unreachable network.
control: trying bootstrapDNS("derp3.tailscale.com", "68.183.179.66") for "localhost" ...
control: trying bootstrapDNS("derp12b.tailscale.com", "2001:19f0:5c01:48a:5400:3ff:fe8d:cb5f") for "localhost" ...
control: bootstrapDNS("derp12b.tailscale.com", "2001:19f0:5c01:48a:5400:3ff:fe8d:cb5f") for "localhost" error: Get "https://derp12b.tailscale.com/bootstrap-dns?q=localhost": dial tcp [2001:19f0:5c01:48a:5400:3ff:fe8d:cb5f]:443: connectex: A socket operation was attempted to an unreachable network.
control: trying bootstrapDNS("derp7.tailscale.com", "167.179.89.145") for "localhost" ...
control: trying bootstrapDNS("derp9.tailscale.com", "2001:19f0:6401:1d9c:5400:2ff:feef:bb82") for "localhost" ...
control: bootstrapDNS("derp9.tailscale.com", "2001:19f0:6401:1d9c:5400:2ff:feef:bb82") for "localhost" error: Get "https://derp9.tailscale.com/bootstrap-dns?q=localhost": dial tcp [2001:19f0:6401:1d9c:5400:2ff:feef:bb82]:443: connectex: A socket operation was attempted to an unreachable network.
control: trying bootstrapDNS("derp12b.tailscale.com", "45.63.71.144") for "localhost" ...
control: trying bootstrapDNS("derp2d.tailscale.com", "2607:f740:0:3f::287") for "localhost" ...
control: bootstrapDNS("derp2d.tailscale.com", "2607:f740:0:3f::287") for "localhost" error: Get "https://derp2d.tailscale.com/bootstrap-dns?q=localhost": dial tcp [2607:f740:0:3f::287]:443: connectex: A socket operation was attempted to an unreachable network.
control: trying bootstrapDNS("derp1d.tailscale.com", "165.22.33.71") for "localhost" ...
control: trying bootstrapDNS("derp10.tailscale.com", "2001:19f0:8001:2d9:5400:2ff:feef:bbb1") for "localhost" ...
control: bootstrapDNS("derp10.tailscale.com", "2001:19f0:8001:2d9:5400:2ff:feef:bbb1") for "localhost" error: Get "https://derp10.tailscale.com/bootstrap-dns?q=localhost": dial tcp [2001:19f0:8001:2d9:5400:2ff:feef:bbb1]:443: connectex: A socket operation was attempted to an unreachable network.
control: [v1] TryLogin: fetch control key: Get "http://localhost:8080/key?v=104": failed to resolve "localhost": no DNS fallback candidates remain for "localhost"
health(warnable=login-state): error: You are logged out. The last login error was: fetch control key: Get "http://localhost:8080/key?v=104": failed to resolve "localhost": no DNS fallback candidates remain for "localhost"
control: [v1] sendStatus: authRoutine-report: state:authenticating
control: authRoutine: [v1] backoff: 7 msec
Received error: fetch control key: Get "http://localhost:8080/key?v=104": failed to resolve "localhost": no DNS fallback candidates remain for "localhost"
control: [v1] authRoutine: state:authenticating; wantLoggedIn=true
control: [v1] direct.TryLogin(flags=6)
control: LoginInteractive -> regen=true
control: doLogin(regen=true, hasUrl=false)
control: trying bootstrapDNS("derp6.tailscale.com", "68.183.90.120") for "localhost" ...
control: trying bootstrapDNS("derp9c.tailscale.com", "2001:19f0:6401:fe7:5400:3ff:fe8d:6d9c") for "localhost" ...
control: bootstrapDNS("derp9c.tailscale.com", "2001:19f0:6401:fe7:5400:3ff:fe8d:6d9c") for "localhost" error: Get "https://derp9c.tailscale.com/bootstrap-dns?q=localhost": dial tcp [2001:19f0:6401:fe7:5400:3ff:fe8d:6d9c]:443: connectex: A socket operation was attempted to an unreachable network.
control: trying bootstrapDNS("derp4c.tailscale.com", "134.122.77.138") for "localhost" ...
control: trying bootstrapDNS("derp5.tailscale.com", "2001:19f0:5801:10b7:5400:2ff:feaa:284c") for "localhost" ...
control: bootstrapDNS("derp5.tailscale.com", "2001:19f0:5801:10b7:5400:2ff:feaa:284c") for "localhost" error: Get "https://derp5.tailscale.com/bootstrap-dns?q=localhost": dial tcp [2001:19f0:5801:10b7:5400:2ff:feaa:284c]:443: connectex: A socket operation was attempted to an unreachable network.
control: trying bootstrapDNS("derp1c.tailscale.com", "104.248.8.210") for "localhost" ...
control: trying bootstrapDNS("derp8d.tailscale.com", "2a03:b0c0:1:d0::e08:e001") for "localhost" ...
control: bootstrapDNS("derp8d.tailscale.com", "2a03:b0c0:1:d0::e08:e001") for "localhost" error: Get "https://derp8d.tailscale.com/bootstrap-dns?q=localhost": dial tcp [2a03:b0c0:1:d0::e08:e001]:443: connectex: A socket operation was attempted to an unreachable network.
control: trying bootstrapDNS("derp9c.tailscale.com", "155.138.243.219") for "localhost" ...
control: trying bootstrapDNS("derp9b.tailscale.com", "2001:19f0:6401:eb5:5400:3ff:fe8d:6d9b") for "localhost" ...
control: bootstrapDNS("derp9b.tailscale.com", "2001:19f0:6401:eb5:5400:3ff:fe8d:6d9b") for "localhost" error: Get "https://derp9b.tailscale.com/bootstrap-dns?q=localhost": dial tcp [2001:19f0:6401:eb5:5400:3ff:fe8d:6d9b]:443: connectex: A socket operation was attempted to an unreachable network.
control: trying bootstrapDNS("derp6.tailscale.com", "68.183.90.120") for "localhost" ...
health(warnable=warming-up): ok
control: trying bootstrapDNS("derp9.tailscale.com", "2001:19f0:6401:1d9c:5400:2ff:feef:bb82") for "localhost" ...
control: bootstrapDNS("derp9.tailscale.com", "2001:19f0:6401:1d9c:5400:2ff:feef:bb82") for "localhost" error: Get "https://derp9.tailscale.com/bootstrap-dns?q=localhost": dial tcp [2001:19f0:6401:1d9c:5400:2ff:feef:bb82]:443: connectex: A socket operation was attempted to an unreachable network.
control: trying bootstrapDNS("derp10.tailscale.com", "137.220.36.168") for "localhost" ...
control: trying bootstrapDNS("derp4d.tailscale.com", "2a03:b0c0:3:d0::1501:b001") for "localhost" ...
control: bootstrapDNS("derp4d.tailscale.com", "2a03:b0c0:3:d0::1501:b001") for "localhost" error: Get "https://derp4d.tailscale.com/bootstrap-dns?q=localhost": dial tcp [2a03:b0c0:3:d0::1501:b001]:443: connectex: A socket operation was attempted to an unreachable network.
control: [v1] TryLogin: fetch control key: Get "http://localhost:8080/key?v=104": failed to resolve "localhost": no DNS fallback candidates remain for "localhost"
control: [v1] sendStatus: authRoutine-report: state:authenticating
control: authRoutine: [v1] backoff: 36 msec
Received error: fetch control key: Get "http://localhost:8080/key?v=104": failed to resolve "localhost": no DNS fallback candidates remain for "localhost"
control: [v1] authRoutine: state:authenticating; wantLoggedIn=true
control: [v1] direct.TryLogin(flags=6)
...

(This repeats forewer)

Thanks! I'll see what I can do to reproduce this now. What OS are you running wush serve from?

As I mentioned in the first message, I'm running an ARM Windows VM on an ARM Mac. If you have an ARM Mac, you can reproduce it following the instructions I linked via https://github.com/utmapp/UTM.

So, in the panicing case, Windows is running wush serve and Mac is running wuch cp. In the hanging case, it's the other way around.

Was able to replicate the same hanging on Windows arm64. Will have this fixed today ๐Ÿ‘

Thanks again for your help reporting/debugging!

Seems to work. Thank you very much!