diff --git a/hscontrol/servertest/apiv2_devices_test.go b/hscontrol/servertest/apiv2_devices_test.go index 5d85a46f9..cd7466e51 100644 --- a/hscontrol/servertest/apiv2_devices_test.go +++ b/hscontrol/servertest/apiv2_devices_test.go @@ -1,7 +1,10 @@ package servertest_test import ( + "cmp" + "encoding/json" "fmt" + "net/http" "net/url" "os" "os/exec" @@ -13,6 +16,7 @@ import ( "github.com/juanfont/headscale/hscontrol/servertest" "github.com/juanfont/headscale/hscontrol/types" + "github.com/juanfont/headscale/hscontrol/types/testcapture" "github.com/juanfont/headscale/hscontrol/util" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -455,3 +459,90 @@ func apiv2DevicesACLTerraform(t *testing.T, srv *servertest.TestServer, baseURL, _, ok := srv.State().GetNodeByID(id) assert.True(t, ok, "data-source node persists across destroy") } + +// TestAPIV2TaggedDeviceUserCompat replays the setup step of the user-role +// capture, where odin and freya each join an untagged and a tag:server node +// with keys they minted, and compares each device's user and tags in +// headscale's v2 device list with SaaS's. +// +// Test data source: testdata/steps/user-role.hujson, loaded by name; its +// role steps are TestUserChangeDispatchCompat's. +func TestAPIV2TaggedDeviceUserCompat(t *testing.T) { + t.Parallel() + + t.Run(userRoleID, func(t *testing.T) { + t.Parallel() + + c := readStepCapture(t, userRoleID) + r := newStepReplay(t, c) + step := c.Steps[0] + require.Equal(t, userRoleSetup, step.Name) + requireUserRoleResult(t, step) + + r.applyUserRole(t, step) + + evaluated := map[string]bool{} + holdChecks(t, mapStreamSkipReasons, userRoleID+"/"+step.Name+"/", deviceListChecks(t, r, step), evaluated) + + for k := range mapStreamSkipReasons { + if strings.HasPrefix(k, userRoleID+"/") && deviceListCheck(k) && !evaluated[k] { + t.Errorf("skip entry %q names no check", k) + } + } + }) +} + +// deviceListChecks compares, per device in the step's device list, its user, +// SaaS emails mapped to user names, and its tags. +func deviceListChecks(t *testing.T, r *stepReplay, step testcapture.Step) []stepCheck { + t.Helper() + + hsDevice := func(alias string) (saasDevice, string) { + nodes := r.machineNodes(alias) + if len(nodes) != 1 { + return saasDevice{}, fmt.Sprintf("devices %d", len(nodes)) + } + + status, body := r.call(t, http.MethodGet, "/api/v2/tailnet/-/devices?fields=all", nil) + if status != http.StatusOK { + return saasDevice{}, fmt.Sprintf("status %d", status) + } + + var list struct { + Devices []saasDevice `json:"devices"` + } + require.NoError(t, json.Unmarshal(body, &list)) + + for _, d := range list.Devices { + if d.ID == nodes[0].StringID() { + return d, "" + } + } + + return saasDevice{}, "not listed" + } + + devices := stepDevices(t, step) + checks := make([]stepCheck, 0, 2*len(devices)) + + for _, d := range devices { + x := deviceLabelAlias(d.ID) + user, ok := captureUserNames[d.User] + require.True(t, ok, "%s: %s's user %q is not a capture user", step.Name, x, d.User) + + checks = append(checks, + stepCheck{x + "/device-user", user, func() string { + got, missing := hsDevice(x) + + return cmp.Or(missing, got.User) + }}, + stepCheck{x + "/device-tags", sortedStrings(d.Tags), func() string { + got, missing := hsDevice(x) + + return cmp.Or(missing, sortedStrings(got.Tags)) + }}, + ) + } + + return checks +} diff --git a/hscontrol/servertest/mapstream_compat_test.go b/hscontrol/servertest/mapstream_compat_test.go index ef067210f..94aab2820 100644 --- a/hscontrol/servertest/mapstream_compat_test.go +++ b/hscontrol/servertest/mapstream_compat_test.go @@ -3,14 +3,17 @@ // home, disco key, hostname or port, when a node goes down and up around // policy pushes, and which Hostinfo fields peers and the node itself get; // what a node hears of nodes it cannot see; what a router's peers hear of -// routes it announces but has no approval for; and what every node is sent -// as one policy is compiled again for node changes and a group edit. +// routes it announces but has no approval for; what every node is sent as +// one policy is compiled again for node changes and a group edit; and what +// every node is sent when an admin role change alters what the policy +// resolves. // // Test data source: testdata/steps/{map-delivery,hidden-peers,route-announce, -// policy-generation}.hujson, loaded by name. The disco rotation of +// policy-generation,user-role}.hujson, loaded by name. The disco rotation of // map-delivery also pins a row of TestBuildMapRequestChangeResponse in // ../state; policy-generation is also read by TestPolicySequenceCompat in -// ../policy/v2. +// ../policy/v2; user-role's setup step is also read by +// TestAPIV2TaggedDeviceUserCompat in apiv2_devices_test.go. // Source format: github.com/juanfont/headscale/hscontrol/types/testcapture package servertest_test @@ -29,6 +32,7 @@ import ( "time" "github.com/juanfont/headscale/hscontrol/servertest" + "github.com/juanfont/headscale/hscontrol/types" "github.com/juanfont/headscale/hscontrol/types/testcapture" "github.com/stretchr/testify/require" "tailscale.com/tailcfg" @@ -154,6 +158,13 @@ var mapStreamSkipReasons = map[string]string{ "policy-generation/G5/rt/enabled": withdrawnRouteEnabled, "policy-generation/G7/rt/enabled": withdrawnRouteEnabled, "policy-generation/G8/rt/enabled": withdrawnRouteEnabled, + + "user-role/S1-reconnect/own-a/frames": reconnectAnnounced, + "user-role/S1-reconnect/own-b/frames": reconnectAnnounced, + "user-role/S2-reconnect/own-a/frames": reconnectAnnounced, + + "user-role/S0/tag-a/device-user": taggedDeviceUser, + "user-role/S0/tag-b/device-user": taggedDeviceUser, } const ( @@ -168,6 +179,7 @@ const ( removalSentToAll = "REMOVAL_SENT_TO_ALL: headscale tells every connected node that a deleted node is gone; SaaS tells only the nodes that had it as a peer" announcePolicyResend = "ANNOUNCE_POLICY_RESEND: under an autogroup:self or via policy, headscale sends every connected node a policy response when a router changes only routes nobody approved; SaaS sends nothing to nodes that cannot see the router" withdrawnRouteEnabled = "WITHDRAWN_ROUTE_ENABLED: headscale's routes API keeps a route the device stopped advertising in enabledRoutes; SaaS lists only advertised routes as enabled" + taggedDeviceUser = "TAGGED_DEVICE_USER: SaaS shows a tagged device's user as the login that made its key; headscale shows tagged-devices" ) // mapStreamNotCompared lists, by key prefix, checks left out: SaaS's answer @@ -196,6 +208,25 @@ var mapStreamNotCompared = []string{ "policy-generation/G7/rt-plain/filter", "policy-generation/G7/srv/filter", "policy-generation/G7/srv/ssh", + + "user-role/S1/own-a/frames", + "user-role/S1/own-b/frames", + "user-role/S1/own-b/peers", + "user-role/S1/tag-a/frames", + "user-role/S1/tag-a/peers", + "user-role/S1/tag-a/filter", + "user-role/S1/tag-b/frames", + "user-role/S1/tag-b/peers", + "user-role/S1/tag-b/filter", + "user-role/S1-reconnect/own-b/peers", + "user-role/S1-reconnect/tag-b/peers", + "user-role/S1-reconnect/tag-b/filter", + "user-role/S2/own-a/frames", + "user-role/S2/own-b/frames", + "user-role/S2/tag-a/frames", + "user-role/S2/tag-a/peers", + "user-role/S2/tag-a/filter", + "user-role/S2/tag-b/frames", } // compared drops the checks mapStreamNotCompared leaves out. @@ -955,7 +986,7 @@ func TestRouteAnnouncementCompat(t *testing.T) { func TestMapStreamSkipEntriesNameCaptures(t *testing.T) { t.Parallel() - requireSkipCaptures(t, mapStreamSkipReasons, "map-delivery", "hidden-peers", "route-announce", "policy-generation") + requireSkipCaptures(t, mapStreamSkipReasons, "map-delivery", "hidden-peers", "route-announce", "policy-generation", userRoleID) } // visibilityMark is what a client had been sent when a step began. @@ -1343,3 +1374,202 @@ func peerOwners(nm *netmap.NetworkMap, alias func(tailcfg.NodeID) (string, bool) return strings.Join(out, "; ") } + +// userRoleID is the capture of an admin role change that +// [TestUserChangeDispatchCompat] and [TestAPIV2TaggedDeviceUserCompat] replay. +const userRoleID = "user-role" + +// userRoleSetup is the step that pushes the policy and joins the nodes; its +// frames are join traffic, not the role change's. +const userRoleSetup = "S0" + +// adminSuffix marks a user's name while the replay stands in for its admin +// role; see [stepReplay.applyUserRole]. +const adminSuffix = "-admin" + +// TestUserChangeDispatchCompat replays an admin role change under a fixed +// policy whose autogroup:admin rule reaches two tag:server nodes: freya +// raised to admin, one tagged node's stream restarted, freya back to member +// and that stream restarted again. After each step it compares, per node, +// its peers and filter and, past the setup step, whether it was sent +// anything. +func TestUserChangeDispatchCompat(t *testing.T) { + t.Parallel() + + t.Run(userRoleID, func(t *testing.T) { + t.Parallel() + + c := readStepCapture(t, userRoleID) + r := newStepReplay(t, c) + saasNames := topologyAddrNames(c) + evaluated := map[string]bool{} + + for _, step := range c.Steps { + requireUserRoleResult(t, step) + + r.settle(t) + + updates := make(map[string]int, len(r.clients)) + for alias, cl := range r.clients { + updates[alias] = cl.UpdateCount() + } + + r.applyUserRole(t, step) + + t.Run(step.Name, func(t *testing.T) { + prefix := userRoleID + "/" + step.Name + "/" + holdChecks(t, mapStreamSkipReasons, prefix, + compared(prefix, userRoleChecks(t, r, step, saasNames, updates)), evaluated) + }) + } + + for k := range mapStreamSkipReasons { + if strings.HasPrefix(k, userRoleID+"/") && !deviceListCheck(k) && !evaluated[k] { + t.Errorf("skip entry %q names no check", k) + } + } + }) +} + +// requireUserRoleResult admits observed steps and barrier timeouts. The +// probe's barrier waits for the role change to reach the streams; a timeout +// whose note lists the links that never held is that observation, and its +// captures and frames are what SaaS showed by the barrier's end. +func requireUserRoleResult(t *testing.T, step testcapture.Step) { + t.Helper() + + if step.Result == "timeout" { + require.True(t, strings.HasPrefix(step.Note, "never held:"), "%s: timeout without the links that never held: %q", step.Name, step.Note) + + return + } + + require.Equal(t, "observed", step.Result, "%s: the replay follows every step", step.Name) +} + +// applyUserRole applies one user-role step, each action landing before the +// next. Headscale has no user roles, so a name stands in for the admin role: +// autogroup:admin becomes the tailnet owner, whom SaaS counts as an admin, +// plus each user's name with adminSuffix, and a role call renames its user +// to or from that name through the v1 API. Like the role call, the rename is +// a user change the policy resolves while its text stays the same, sent by +// headscale's own admin path. Roles held before the capture's first role +// call are not mirrored, so the setup step's checks fail if one decides +// what a node reaches. +func (r *stepReplay) applyUserRole(t *testing.T, step testcapture.Step) { + t.Helper() + + for _, a := range step.Actions { + switch a.Kind { + case "policy": + require.Equal(t, http.StatusOK, a.Status, "%s: replay of a refused policy", step.Name) + r.setPolicy(t, step.Name, adminPolicy(r.c.Tailnet, string(a.Body))) + + case "role": + r.roleRename(t, step.Name, a) + + default: + one := step + one.Actions = []testcapture.Action{a} + require.Empty(t, r.apply(t, one), "%s: every login succeeds", step.Name) + r.waitSession(t, step.Name, a) + } + } +} + +// adminPolicy replaces autogroup:admin in policy with the owner and the +// names [stepReplay.roleRename] gives admins. +func adminPolicy(owner, policy string) string { + admins := make([]string, 0, len(captureUserNames)+1) + + admins = append(admins, strconv.Quote(owner)) + for _, name := range slices.Sorted(maps.Values(captureUserNames)) { + admins = append(admins, strconv.Quote(name+adminSuffix+"@")) + } + + return strings.ReplaceAll(policy, strconv.Quote("autogroup:admin"), strings.Join(admins, ", ")) +} + +// roleRename mirrors a role call on "/users/{user:x}/role": admin renames x +// to x with adminSuffix, member back to x. +func (r *stepReplay) roleRename(t *testing.T, stepName string, a testcapture.Action) { + t.Helper() + + require.Equal(t, http.StatusOK, a.Status, "%s: replay of a refused role call", stepName) + + rest, ok := strings.CutPrefix(a.Path, "/users/{user:") + alias, _, found := strings.Cut(rest, "}") + require.True(t, ok && found, "%s: no user label in %q", stepName, a.Path) + + user, ok := r.users[alias] + require.True(t, ok, "%s: role of unknown user %s", stepName, alias) + + var body struct { + Role string `json:"role"` + } + require.NoError(t, json.Unmarshal(a.Body, &body), "%s: role body", stepName) + + name := alias + + switch body.Role { + case "admin": + name += adminSuffix + case "member": + default: + t.Fatalf("%s: no replay for role %q", stepName, body.Role) + } + + current, err := r.srv.State().GetUserByID(types.UserID(user.ID)) + require.NoError(t, err) + + if current.Name == name { + return + } + + status, resp := r.call(t, http.MethodPost, fmt.Sprintf("/api/v1/user/%d/rename/%s", user.ID, name), nil) + require.Equal(t, http.StatusOK, status, "%s: rename %s: %s", stepName, alias, resp) +} + +// userRoleChecks compares, per node SaaS captured, its peers and filter and, +// past the setup step, whether it was sent anything but a keep-alive since +// updates, each client's update count when the step began. +func userRoleChecks( + t *testing.T, + r *stepReplay, + step testcapture.Step, + saasNames map[netip.Addr]string, + updates map[string]int, +) []stepCheck { + t.Helper() + + var checks []stepCheck + + for _, x := range slices.Sorted(maps.Keys(step.Captures)) { + saas, cl := step.Captures[x].Netmap, r.clients[x] + require.NotNil(t, saas, "%s: no netmap of %s", step.Name, x) + require.NotNil(t, cl, "%s: %s never joined", step.Name, x) + + if step.Name != userRoleSetup { + checks = append(checks, stepCheck{x + "/frames", saasDelivered(step.Frames[x]), func() string { + if cl.UpdateCount() > updates[x] { + return "frame" + } + + return "silent" + }}) + } + + checks = append(checks, + stepCheck{x + "/peers", peerAliases(saas, r.saasAlias), func() string { return peerAliases(cl.Netmap(), r.hsAlias) }}, + stepCheck{x + "/filter", renderMatches(saas, saasNames), func() string { return renderMatches(cl.Netmap(), r.addrNames()) }}, + ) + } + + return checks +} + +// deviceListCheck reports whether a user-role skip key names one of +// [TestAPIV2TaggedDeviceUserCompat]'s checks. +func deviceListCheck(key string) bool { + return strings.HasSuffix(key, "/device-user") || strings.HasSuffix(key, "/device-tags") +} diff --git a/hscontrol/servertest/testdata/steps/user-role.hujson b/hscontrol/servertest/testdata/steps/user-role.hujson new file mode 100644 index 000000000..c7b1a1273 --- /dev/null +++ b/hscontrol/servertest/testdata/steps/user-role.hujson @@ -0,0 +1,7586 @@ +// user-role +// +// An admin role change under a fixed policy whose autogroup:admin rule reaches tag:server: freya raised to admin, then back to member. Four nodes, all map streams followed; own-a is the control. +// +// Nodes with filter rules: 4 of 4 +// Steps: 5 +// Captured at: 2026-10-20T13:41:04Z +// tool version: saasprobe 70008cc2bd1a22129411ea70c70cbd1ef8ad5fc2 +// schema version: 1 +{ + "schema_version": 1, + "test_id": "user-role", + "description": "An admin role change under a fixed policy whose autogroup:admin rule reaches tag:server: freya raised to admin, then back to member. Four nodes, all map streams followed; own-a is the control.", + "captured_at": "2026-10-20T13:41:04.876754952Z", + "tool_version": "saasprobe 70008cc2bd1a22129411ea70c70cbd1ef8ad5fc2", + "client_version": "1.102.5-ERR-BuildInfo capver 142", + "tailnet": "odin@example.com", + "input": {"api_response_code": 0, "tailnet": {"dns": { + "magic_dns": false, + "nameservers": null, + "search_paths": null, + "split_dns": null + }, "settings": {}}, "scenario_hujson": "", "full_policy": { + "tagOwners": {"tag:server": ["odin@example.com", "freya@example.com"]}, + "acls": [ + {"action": "accept", "src": ["odin@example.com"], "dst": ["*:*"]}, + {"action": "accept", "src": ["autogroup:admin"], "dst": ["tag:server:*"]} + ] + }}, + "topology": {"users": [ + {"id": 1, "name": "odin", "email": "odin@example.com"}, + {"id": 2, "name": "thor", "email": "thor@example.org"}, + {"id": 3, "name": "freya", "email": "freya@example.com"} + ], "nodes": {"own-a": { + "hostname": "own-a", + "tags": [], + "ipv4": "100.115.149.80", + "ipv6": "fd7a:115c:a1e0::7128:9551", + "user": "odin", + "routable_ips": [], + "approved_routes": [] + }, "own-b": { + "hostname": "own-b", + "tags": [], + "ipv4": "100.91.17.52", + "ipv6": "fd7a:115c:a1e0::a728:1135", + "user": "freya", + "routable_ips": [], + "approved_routes": [] + }, "tag-a": { + "hostname": "tag-a", + "tags": ["tag:server"], + "ipv4": "100.69.123.71", + "ipv6": "fd7a:115c:a1e0::b828:7b48", + "routable_ips": [], + "approved_routes": [] + }, "tag-b": { + "hostname": "tag-b", + "tags": ["tag:server"], + "ipv4": "100.79.219.39", + "ipv6": "fd7a:115c:a1e0::2628:db28", + "routable_ips": [], + "approved_routes": [] + }}}, + "captures": { + "own-a": {"packet_filter_rules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], "netmap": { + "Cached": false, + "SelfNode": { + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "Hostinfo": {"Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/is-admin": null, + "https://tailscale.com/cap/is-owner": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/is-admin", + "https://tailscale.com/cap/is-owner", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "MachineKey": "mkey:e85ef6426e0397d36338f97a182db866ea147e69511cee0d3204c1969cce5533", + "Peers": [{ + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "AllowedIPs": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Endpoints": [ + "192.0.2.1:60009", + "198.51.100.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-b", "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222} + ]}, + "Created": "2026-10-20T13:41:19.99812632Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-b", + "ComputedNameWithHost": "own-b" + }, { + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "AllowedIPs": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "tag-a", "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911} + ]}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true, + "ComputedName": "tag-a", + "ComputedNameWithHost": "tag-a" + }, { + "ID": 6169742216312948, + "StableID": "n7xDNdfHBq11CNTRL", + "Name": "tag-b.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Addresses": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "AllowedIPs": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "Endpoints": [ + "192.0.2.1:58884", + "198.51.100.1:58884", + "198.51.100.2:58884", + "198.51.100.3:58884", + "198.51.100.4:58884", + "198.51.100.5:58884", + "198.51.100.6:58884", + "198.51.100.7:58884" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "tag-b", "Services": [ + {"Proto": "peerapi4", "Port": 47696}, + {"Proto": "peerapi6", "Port": 47696} + ]}, + "Created": "2026-10-20T13:41:21.531227448Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true, + "ComputedName": "tag-b", + "ComputedNameWithHost": "tag-b" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], + "PacketFilterRules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"1260082990019555": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "3982058329734709": { + "ID": 3982058329734709, + "LoginName": "freya@example.com", + "DisplayName": "freya" + }, "4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }} + }, "whois": {"100.69.123.71": {"Node": { + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "AllowedIPs": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "tag-a", "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911} + ]}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true, + "ComputedName": "tag-a", + "ComputedNameWithHost": "tag-a" + }, "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null}, "100.79.219.39": {"Node": { + "ID": 6169742216312948, + "StableID": "n7xDNdfHBq11CNTRL", + "Name": "tag-b.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Addresses": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "AllowedIPs": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "Endpoints": [ + "192.0.2.1:58884", + "198.51.100.1:58884", + "198.51.100.2:58884", + "198.51.100.3:58884", + "198.51.100.4:58884", + "198.51.100.5:58884", + "198.51.100.6:58884", + "198.51.100.7:58884" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "tag-b", "Services": [ + {"Proto": "peerapi4", "Port": 47696}, + {"Proto": "peerapi6", "Port": 47696} + ]}, + "Created": "2026-10-20T13:41:21.531227448Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true, + "ComputedName": "tag-b", + "ComputedNameWithHost": "tag-b" + }, "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null}, "100.91.17.52": {"Node": { + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "AllowedIPs": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Endpoints": [ + "192.0.2.1:60009", + "198.51.100.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-b", "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222} + ]}, + "Created": "2026-10-20T13:41:19.99812632Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-b", + "ComputedNameWithHost": "own-b" + }, "UserProfile": { + "ID": 3982058329734709, + "LoginName": "freya@example.com", + "DisplayName": "freya" + }, "CapMap": null}, "fd7a:115c:a1e0::2628:db28": {"Node": { + "ID": 6169742216312948, + "StableID": "n7xDNdfHBq11CNTRL", + "Name": "tag-b.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Addresses": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "AllowedIPs": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "Endpoints": [ + "192.0.2.1:58884", + "198.51.100.1:58884", + "198.51.100.2:58884", + "198.51.100.3:58884", + "198.51.100.4:58884", + "198.51.100.5:58884", + "198.51.100.6:58884", + "198.51.100.7:58884" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "tag-b", "Services": [ + {"Proto": "peerapi4", "Port": 47696}, + {"Proto": "peerapi6", "Port": 47696} + ]}, + "Created": "2026-10-20T13:41:21.531227448Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true, + "ComputedName": "tag-b", + "ComputedNameWithHost": "tag-b" + }, "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null}, "fd7a:115c:a1e0::a728:1135": {"Node": { + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "AllowedIPs": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Endpoints": [ + "192.0.2.1:60009", + "198.51.100.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-b", "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222} + ]}, + "Created": "2026-10-20T13:41:19.99812632Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-b", + "ComputedNameWithHost": "own-b" + }, "UserProfile": { + "ID": 3982058329734709, + "LoginName": "freya@example.com", + "DisplayName": "freya" + }, "CapMap": null}, "fd7a:115c:a1e0::b828:7b48": {"Node": { + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "AllowedIPs": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "tag-a", "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911} + ]}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true, + "ComputedName": "tag-a", + "ComputedNameWithHost": "tag-a" + }, "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null}}, "backend_state": "Running"}, + "own-b": {"packet_filter_rules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], "netmap": { + "Cached": false, + "SelfNode": { + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "AllowedIPs": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Endpoints": [ + "192.0.2.1:60009", + "198.51.100.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ], + "Hostinfo": {"Hostname": "own-b", "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:19.99812632Z", + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "own-b", + "ComputedNameWithHost": "own-b" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "MachineKey": "mkey:19a8b80433d0d07cdef41943f8f47a1131b9d49bd95519693a32cbcaa6533e43", + "Peers": [{ + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], + "PacketFilterRules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"3982058329734709": { + "ID": 3982058329734709, + "LoginName": "freya@example.com", + "DisplayName": "freya" + }, "4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }} + }, "backend_state": "Running"}, + "tag-a": { + "packet_filter_rules": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.69.123.71", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::b828:7b48", "Ports": {"First": 0, "Last": 65535}} + ]}], + "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "100.69.123.71/32", "Ports": {"First": 0, "Last": 65535}}, + { + "Net": "fd7a:115c:a1e0::b828:7b48/128", + "Ports": {"First": 0, "Last": 65535} + } + ], + "Caps": [] + }], + "netmap": { + "Cached": false, + "SelfNode": { + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 5609962921794417, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "AllowedIPs": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "Hostinfo": {"Hostname": "tag-a", "RequestTags": ["tag:server"], "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Tags": ["tag:server"], + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/is-owner": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "tag-a", + "ComputedNameWithHost": "tag-a" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/is-owner", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "MachineKey": "mkey:86059abbaa34043eed3baaad18d166600355a72caa04d406a63db23c8c2d1c49", + "Peers": [{ + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "100.69.123.71/32", "Ports": {"First": 0, "Last": 65535}}, + { + "Net": "fd7a:115c:a1e0::b828:7b48/128", + "Ports": {"First": 0, "Last": 65535} + } + ], + "Caps": [] + }], + "PacketFilterRules": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.69.123.71", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::b828:7b48", "Ports": {"First": 0, "Last": 65535}} + ]}], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }, "5609962921794417": { + "ID": 5609962921794417, + "LoginName": "tag-a.tail78f774.ts.net", + "DisplayName": "tag-a" + }} + }, + "backend_state": "Running" + }, + "tag-b": { + "packet_filter_rules": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.79.219.39", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::2628:db28", "Ports": {"First": 0, "Last": 65535}} + ]}], + "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "100.79.219.39/32", "Ports": {"First": 0, "Last": 65535}}, + { + "Net": "fd7a:115c:a1e0::2628:db28/128", + "Ports": {"First": 0, "Last": 65535} + } + ], + "Caps": [] + }], + "netmap": { + "Cached": false, + "SelfNode": { + "ID": 6169742216312948, + "StableID": "n7xDNdfHBq11CNTRL", + "Name": "tag-b.tail78f774.ts.net.", + "User": 6169742216312948, + "Key": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Addresses": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "AllowedIPs": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "Hostinfo": { + "Hostname": "tag-b", + "RequestTags": ["tag:server"], + "Services": [{"Proto": "peerapi-dns-proxy", "Port": 1}] + }, + "Created": "2026-10-20T13:41:21.531227448Z", + "Tags": ["tag:server"], + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "tag-b", + "ComputedNameWithHost": "tag-b" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "MachineKey": "mkey:6a852bb4841c235040b9d9a75a9fc80f8dd2aa787b561e80d23639055f969f0f", + "Peers": [{ + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "100.79.219.39/32", "Ports": {"First": 0, "Last": 65535}}, + { + "Net": "fd7a:115c:a1e0::2628:db28/128", + "Ports": {"First": 0, "Last": 65535} + } + ], + "Caps": [] + }], + "PacketFilterRules": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.79.219.39", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::2628:db28", "Ports": {"First": 0, "Last": 65535}} + ]}], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }, "6169742216312948": { + "ID": 6169742216312948, + "LoginName": "tag-b.tail78f774.ts.net", + "DisplayName": "tag-b" + }} + }, + "backend_state": "Running" + } + }, + "node_ids": { + "own-a": 6604014731421167, + "own-b": 769496275498017, + "tag-a": 5609962921794417, + "tag-b": 6169742216312948 + }, + "steps": [{ + "name": "S0", + "at": "2026-10-20T13:41:04.876772628Z", + "note": "landed after 4s", + "result": "observed", + "actions": [{ + "kind": "api", + "principal": "admin", + "method": "GET", + "path": "/tailnet/-/users", + "status": 200, + "resp_header": {"Content-Type": "application/json"}, + "response": {"users": [{ + "created": "2025-01-06T15:34:57.211063713Z", + "displayName": "odin@example.com", + "id": "{user:odin}", + "lastSeen": "2026-10-20T13:30:27Z", + "loginName": "odin@example.com", + "profilePicUrl": "", + "role": "owner", + "status": "active", + "tailnetId": "{tailnet}", + "type": "member" + }, { + "created": "2026-02-20T13:16:07.187446882Z", + "displayName": "thor@example.org", + "id": "{user:thor}", + "lastSeen": "2026-10-17T16:47:43Z", + "loginName": "thor@example.org", + "profilePicUrl": "", + "role": "admin", + "status": "active", + "tailnetId": "{tailnet}", + "type": "member" + }, { + "created": "2026-02-20T13:19:42.5861759Z", + "displayName": "freya@example.com", + "id": "{user:freya}", + "lastSeen": "2026-10-17T16:05:59Z", + "loginName": "freya@example.com", + "profilePicUrl": "", + "role": "admin", + "status": "active", + "tailnetId": "{tailnet}", + "type": "member" + }]} + }, { + "kind": "api", + "principal": "admin", + "method": "POST", + "path": "/tailnet/-/acl/validate", + "header": {"Content-Type": "application/hujson"}, + "body": {"acls": [ + {"action": "accept", "dst": ["*:*"], "src": ["odin@example.com"]}, + {"action": "accept", "dst": ["tag:server:*"], "src": ["autogroup:admin"]} + ], "tagOwners": {"tag:server": ["odin@example.com", "freya@example.com"]}}, + "status": 200, + "resp_header": {"Content-Type": "application/json"}, + "response": {}, + "offset_ms": 16 + }, { + "kind": "policy", + "principal": "admin", + "method": "POST", + "path": "/tailnet/-/acl", + "header": {"Content-Type": "application/hujson"}, + "body": {"acls": [ + {"action": "accept", "dst": ["*:*"], "src": ["odin@example.com"]}, + {"action": "accept", "dst": ["tag:server:*"], "src": ["autogroup:admin"]} + ], "tagOwners": {"tag:server": ["odin@example.com", "freya@example.com"]}}, + "status": 200, + "resp_header": {"Content-Type": "application/hujson", "ETag": "{etag:1}"}, + "response": {"acls": [ + {"action": "accept", "dst": ["*:*"], "src": ["odin@example.com"]}, + {"action": "accept", "dst": ["tag:server:*"], "src": ["autogroup:admin"]} + ], "tagOwners": {"tag:server": ["odin@example.com", "freya@example.com"]}}, + "offset_ms": 2001 + }, { + "kind": "api", + "key": "K-own-a", + "principal": "admin", + "method": "POST", + "path": "/tailnet/-/keys", + "header": {"Content-Type": "application/json"}, + "body": {"capabilities": {"devices": { + "create": {"ephemeral": false, "preauthorized": true, "reusable": false, "tags": null} + }}, "description": "tscap-saasprobe K-own-a", "expirySeconds": 3600}, + "status": 200, + "resp_header": {"Content-Type": "application/json"}, + "response": { + "capabilities": { + "devices": {"create": {"ephemeral": false, "preauthorized": true, "reusable": false}} + }, + "created": "2026-10-20T13:41:11Z", + "description": "tscap-saasprobe K-own-a", + "expires": "2026-10-20T14:41:11Z", + "expirySeconds": 3600, + "id": "{key:K-own-a}", + "keyType": "auth", + "userId": "{user:odin}" + }, + "offset_ms": 4039 + }, { + "kind": "api", + "key": "K-own-b", + "principal": "user:freya", + "method": "POST", + "path": "/tailnet/-/keys", + "header": {"Content-Type": "application/json"}, + "body": {"capabilities": {"devices": { + "create": {"ephemeral": false, "preauthorized": true, "reusable": false, "tags": null} + }}, "description": "tscap-saasprobe K-own-b", "expirySeconds": 3600}, + "status": 200, + "resp_header": {"Content-Type": "application/json"}, + "response": { + "capabilities": { + "devices": {"create": {"ephemeral": false, "preauthorized": true, "reusable": false}} + }, + "created": "2026-10-20T13:41:13Z", + "description": "tscap-saasprobe K-own-b", + "expires": "2026-10-20T14:41:13Z", + "expirySeconds": 3600, + "id": "{key:K-own-b}", + "keyType": "auth", + "userId": "{user:freya}" + }, + "offset_ms": 6043 + }, { + "kind": "api", + "key": "K-tag-a", + "principal": "admin", + "method": "POST", + "path": "/tailnet/-/keys", + "header": {"Content-Type": "application/json"}, + "body": {"capabilities": {"devices": {"create": { + "ephemeral": false, + "preauthorized": true, + "reusable": false, + "tags": ["tag:server"] + }}}, "description": "tscap-saasprobe K-tag-a", "expirySeconds": 3600}, + "status": 200, + "resp_header": {"Content-Type": "application/json"}, + "response": { + "capabilities": {"devices": {"create": { + "ephemeral": false, + "preauthorized": true, + "reusable": false, + "tags": ["tag:server"] + }}}, + "created": "2026-10-20T13:41:15Z", + "description": "tscap-saasprobe K-tag-a", + "expires": "2026-10-20T14:41:15Z", + "expirySeconds": 3600, + "id": "{key:K-tag-a}", + "keyType": "auth", + "userId": "{user:odin}" + }, + "offset_ms": 8063 + }, { + "kind": "api", + "key": "K-tag-b", + "principal": "user:freya", + "method": "POST", + "path": "/tailnet/-/keys", + "header": {"Content-Type": "application/json"}, + "body": {"capabilities": {"devices": {"create": { + "ephemeral": false, + "preauthorized": true, + "reusable": false, + "tags": ["tag:server"] + }}}, "description": "tscap-saasprobe K-tag-b", "expirySeconds": 3600}, + "status": 200, + "resp_header": {"Content-Type": "application/json"}, + "response": { + "capabilities": {"devices": {"create": { + "ephemeral": false, + "preauthorized": true, + "reusable": false, + "tags": ["tag:server"] + }}}, + "created": "2026-10-20T13:41:17Z", + "description": "tscap-saasprobe K-tag-b", + "expires": "2026-10-20T14:41:17Z", + "expirySeconds": 3600, + "id": "{key:K-tag-b}", + "keyType": "auth", + "userId": "{user:freya}" + }, + "offset_ms": 10083 + }, { + "kind": "role", + "principal": "admin", + "method": "POST", + "path": "/users/{user:freya}/role", + "header": {"Content-Type": "application/json"}, + "body": {"role": "member"}, + "status": 200, + "resp_header": {"Content-Type": "application/json"}, + "response": null, + "offset_ms": 12102 + }, { + "kind": "api", + "principal": "admin", + "method": "GET", + "path": "/tailnet/-/users", + "status": 200, + "resp_header": {"Content-Type": "application/json"}, + "response": {"users": [{ + "created": "2025-01-06T15:34:57.211063713Z", + "displayName": "odin@example.com", + "id": "{user:odin}", + "lastSeen": "2026-10-20T13:30:27Z", + "loginName": "odin@example.com", + "profilePicUrl": "", + "role": "owner", + "status": "active", + "tailnetId": "{tailnet}", + "type": "member" + }, { + "created": "2026-02-20T13:16:07.187446882Z", + "displayName": "thor@example.org", + "id": "{user:thor}", + "lastSeen": "2026-10-17T16:47:43Z", + "loginName": "thor@example.org", + "profilePicUrl": "", + "role": "admin", + "status": "active", + "tailnetId": "{tailnet}", + "type": "member" + }, { + "created": "2026-02-20T13:19:42.5861759Z", + "displayName": "freya@example.com", + "id": "{user:freya}", + "lastSeen": "2026-10-17T16:05:59Z", + "loginName": "freya@example.com", + "profilePicUrl": "", + "role": "member", + "status": "active", + "tailnetId": "{tailnet}", + "type": "member" + }]}, + "offset_ms": 14149 + }, { + "kind": "join", + "node": "own-a", + "key": "K-own-a", + "hostname": "own-a", + "offset_ms": 14283 + }, { + "kind": "join", + "node": "own-b", + "key": "K-own-b", + "hostname": "own-b", + "offset_ms": 14921 + }, { + "kind": "join", + "node": "tag-a", + "key": "K-tag-a", + "request_tags": ["tag:server"], + "hostname": "tag-a", + "offset_ms": 15812 + }, { + "kind": "join", + "node": "tag-b", + "key": "K-tag-b", + "request_tags": ["tag:server"], + "hostname": "tag-b", + "offset_ms": 16451 + }, { + "kind": "api", + "principal": "admin", + "method": "GET", + "path": "/tailnet/-/devices?fields=all", + "status": 200, + "resp_header": {"Content-Type": "application/json"}, + "response": {"devices": [{ + "addresses": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "advertisedRoutes": [], + "authorized": true, + "blocksIncomingConnections": false, + "clientConnectivity": {"clientSupports": { + "hairPinning": null, + "ipv6": false, + "pcp": false, + "pmp": false, + "udp": true, + "upnp": false + }, "endpoints": [ + "198.51.100.1:45536", + "192.0.2.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], "latency": { + "Amsterdam": {"latencyMs": 18.132547, "preferred": true}, + "Ashburn": {"latencyMs": 109.979219}, + "Bengaluru": {"latencyMs": 140.5185}, + "Chicago": {"latencyMs": 112.57723899999999}, + "Dallas": {"latencyMs": 127.95073200000002}, + "Denver": {"latencyMs": 137.976846}, + "Dubai": {"latencyMs": 113.392517}, + "Frankfurt": {"latencyMs": 23.313719}, + "Helsinki": {"latencyMs": 42.399269000000004}, + "Hong Kong": {"latencyMs": 201.011085}, + "Honolulu": {"latencyMs": 199.673662}, + "Johannesburg": {"latencyMs": 214.19254600000002}, + "London": {"latencyMs": 21.657731}, + "Los Angeles": {"latencyMs": 144.489499}, + "Madrid": {"latencyMs": 36.240415}, + "Miami": {"latencyMs": 119.175086}, + "Nairobi": {"latencyMs": 166.73217200000002}, + "New York City": {"latencyMs": 92.76329899999999}, + "Nuremberg": {"latencyMs": 30.163769}, + "Paris": {"latencyMs": 27.463570999999998}, + "San Francisco": {"latencyMs": 163.167658}, + "Seattle": {"latencyMs": 147.646824}, + "Tokyo": {"latencyMs": 243.86363}, + "Toronto": {"latencyMs": 123.16788100000001}, + "Warsaw": {"latencyMs": 29.255948} + }, "mappingVariesByDestIP": false}, + "clientVersion": "1.102.5-ERR-BuildInfo", + "connectedToControl": true, + "created": "2026-10-20T13:41:19Z", + "distro": {"codeName": "yarara", "name": "nixos", "version": "26.05"}, + "enabledRoutes": [], + "expires": "2027-04-18T13:41:19Z", + "hostname": "own-a", + "id": "{device:own-a}", + "isExternal": false, + "keyExpiryDisabled": false, + "lastSeen": "2026-10-20T13:41:22Z", + "machineKey": "{machine:own-a}", + "name": "own-a.tail78f774.ts.net", + "nodeId": "{device:own-a}", + "nodeKey": "{nodekey:1}", + "oauthClientId": "{key:K-own-a}", + "os": "linux", + "postureStatus": {}, + "sshEnabled": false, + "tailnetLockError": "", + "tailnetLockKey": "nlpub:2de708771b77f3ff5ec05858246bcf5e7057e219e9c04b719fd4212d3f5fee77", + "updateAvailable": true, + "user": "odin@example.com" + }, { + "addresses": ["100.91.17.52", "fd7a:115c:a1e0::a728:1135"], + "advertisedRoutes": [], + "authorized": true, + "blocksIncomingConnections": false, + "clientConnectivity": {"clientSupports": { + "hairPinning": null, + "ipv6": false, + "pcp": false, + "pmp": false, + "udp": true, + "upnp": false + }, "endpoints": [ + "198.51.100.1:60009", + "192.0.2.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ], "latency": { + "Amsterdam": {"latencyMs": 11.921787, "preferred": true}, + "Ashburn": {"latencyMs": 106.625821}, + "Bengaluru": {"latencyMs": 224.530454}, + "Chicago": {"latencyMs": 113.423451}, + "Dallas": {"latencyMs": 130.51808300000002}, + "Denver": {"latencyMs": 138.427993}, + "Dubai": {"latencyMs": 112.05530499999999}, + "Frankfurt": {"latencyMs": 19.361255}, + "Helsinki": {"latencyMs": 36.922450000000005}, + "Hong Kong": {"latencyMs": 199.203308}, + "Honolulu": {"latencyMs": 220.792268}, + "Johannesburg": {"latencyMs": 182.60602}, + "London": {"latencyMs": 17.144755}, + "Los Angeles": {"latencyMs": 143.335522}, + "Madrid": {"latencyMs": 35.59218}, + "Miami": {"latencyMs": 120.105297}, + "Nairobi": {"latencyMs": 178.063039}, + "New York City": {"latencyMs": 90.41586}, + "Nuremberg": {"latencyMs": 28.413425}, + "Paris": {"latencyMs": 21.235812}, + "San Francisco": {"latencyMs": 158.887264}, + "Seattle": {"latencyMs": 146.760322}, + "Tokyo": {"latencyMs": 236.75651200000001}, + "Toronto": {"latencyMs": 120.65163}, + "Warsaw": {"latencyMs": 28.479519} + }, "mappingVariesByDestIP": false}, + "clientVersion": "1.102.5-ERR-BuildInfo", + "connectedToControl": true, + "created": "2026-10-20T13:41:20Z", + "distro": {"codeName": "yarara", "name": "nixos", "version": "26.05"}, + "enabledRoutes": [], + "expires": "2027-04-18T13:41:20Z", + "hostname": "own-b", + "id": "{device:own-b}", + "isExternal": false, + "keyExpiryDisabled": false, + "lastSeen": "2026-10-20T13:41:22Z", + "machineKey": "{machine:own-b}", + "name": "own-b.tail78f774.ts.net", + "nodeId": "{device:own-b}", + "nodeKey": "{nodekey:2}", + "oauthClientId": "{key:K-own-b}", + "os": "linux", + "postureStatus": {}, + "sshEnabled": false, + "tailnetLockError": "", + "tailnetLockKey": "nlpub:03d371043c060e10ae436ec875870b0d2c0d2b7fb0541cf605338e697a59168d", + "updateAvailable": true, + "user": "freya@example.com" + }, { + "addresses": ["100.69.123.71", "fd7a:115c:a1e0::b828:7b48"], + "advertisedRoutes": [], + "authorized": true, + "blocksIncomingConnections": false, + "clientConnectivity": {"clientSupports": { + "hairPinning": null, + "ipv6": false, + "pcp": false, + "pmp": false, + "udp": true, + "upnp": false + }, "endpoints": [ + "198.51.100.1:35303", + "192.0.2.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], "latency": { + "Amsterdam": {"latencyMs": 11.467537, "preferred": true}, + "Ashburn": {"latencyMs": 104.361965}, + "Bengaluru": {"latencyMs": 147.47912599999998}, + "Chicago": {"latencyMs": 110.59437799999999}, + "Dallas": {"latencyMs": 125.6437}, + "Denver": {"latencyMs": 137.263219}, + "Dubai": {"latencyMs": 111.579819}, + "Frankfurt": {"latencyMs": 18.675544}, + "Helsinki": {"latencyMs": 38.504664}, + "Hong Kong": {"latencyMs": 198.912362}, + "Honolulu": {"latencyMs": 220.81737800000002}, + "Johannesburg": {"latencyMs": 180.66586900000001}, + "London": {"latencyMs": 16.943251}, + "Los Angeles": {"latencyMs": 145.131416}, + "Madrid": {"latencyMs": 34.908809}, + "Miami": {"latencyMs": 120.32561199999999}, + "Nairobi": {"latencyMs": 164.946921}, + "New York City": {"latencyMs": 90.99554499999999}, + "Nuremberg": {"latencyMs": 26.151491999999998}, + "Paris": {"latencyMs": 22.984006}, + "San Francisco": {"latencyMs": 155.133128}, + "Seattle": {"latencyMs": 148.787801}, + "Tokyo": {"latencyMs": 237.23703400000002}, + "Toronto": {"latencyMs": 120.52583999999999}, + "Warsaw": {"latencyMs": 29.641755999999997} + }, "mappingVariesByDestIP": false}, + "clientVersion": "1.102.5-ERR-BuildInfo", + "connectedToControl": true, + "created": "2026-10-20T13:41:21Z", + "distro": {"codeName": "yarara", "name": "nixos", "version": "26.05"}, + "enabledRoutes": [], + "expires": "2027-04-18T13:41:21Z", + "hostname": "tag-a", + "id": "{device:tag-a}", + "isExternal": false, + "keyExpiryDisabled": true, + "lastSeen": "2026-10-20T13:41:22Z", + "machineKey": "{machine:tag-a}", + "name": "tag-a.tail78f774.ts.net", + "nodeId": "{device:tag-a}", + "nodeKey": "{nodekey:3}", + "oauthClientId": "{key:K-tag-a}", + "os": "linux", + "postureStatus": {}, + "sshEnabled": false, + "tags": ["tag:server"], + "tailnetLockError": "", + "tailnetLockKey": "nlpub:20c90e202998a6579b805288d7ceeab0ea9dc32fe7c2ccd8048e4719cb770750", + "updateAvailable": true, + "user": "odin@example.com" + }, { + "addresses": ["100.79.219.39", "fd7a:115c:a1e0::2628:db28"], + "advertisedRoutes": [], + "authorized": true, + "blocksIncomingConnections": false, + "clientConnectivity": {"clientSupports": { + "hairPinning": null, + "ipv6": false, + "pcp": false, + "pmp": false, + "udp": true, + "upnp": false + }, "endpoints": [ + "198.51.100.1:58884", + "192.0.2.1:58884", + "198.51.100.2:58884", + "198.51.100.3:58884", + "198.51.100.4:58884", + "198.51.100.5:58884", + "198.51.100.6:58884", + "198.51.100.7:58884" + ], "latency": { + "Amsterdam": {"latencyMs": 13.356833, "preferred": true}, + "Ashburn": {"latencyMs": 98.765068}, + "Bengaluru": {"latencyMs": 153.56686}, + "Chicago": {"latencyMs": 110.815843}, + "Dallas": {"latencyMs": 127.163842}, + "Denver": {"latencyMs": 137.046994}, + "Dubai": {"latencyMs": 112.492388}, + "Frankfurt": {"latencyMs": 18.291933}, + "Helsinki": {"latencyMs": 36.748653}, + "Hong Kong": {"latencyMs": 198.368574}, + "Honolulu": {"latencyMs": 222.913116}, + "Johannesburg": {"latencyMs": 175.437241}, + "London": {"latencyMs": 18.34283}, + "Los Angeles": {"latencyMs": 142.73533999999998}, + "Madrid": {"latencyMs": 35.691694000000005}, + "Miami": {"latencyMs": 120.399704}, + "Nairobi": {"latencyMs": 163.184803}, + "New York City": {"latencyMs": 92.020493}, + "Nuremberg": {"latencyMs": 26.32902}, + "Paris": {"latencyMs": 21.20947}, + "San Francisco": {"latencyMs": 157.437798}, + "Seattle": {"latencyMs": 148.764843}, + "Tokyo": {"latencyMs": 250.65232500000002}, + "Toronto": {"latencyMs": 121.14896999999999}, + "Warsaw": {"latencyMs": 28.013339000000002} + }, "mappingVariesByDestIP": false}, + "clientVersion": "1.102.5-ERR-BuildInfo", + "connectedToControl": true, + "created": "2026-10-20T13:41:22Z", + "distro": {"codeName": "yarara", "name": "nixos", "version": "26.05"}, + "enabledRoutes": [], + "expires": "2027-04-18T13:41:22Z", + "hostname": "tag-b", + "id": "{device:tag-b}", + "isExternal": false, + "keyExpiryDisabled": true, + "lastSeen": "2026-10-20T13:41:21Z", + "machineKey": "{machine:tag-b}", + "name": "tag-b.tail78f774.ts.net", + "nodeId": "{device:tag-b}", + "nodeKey": "{nodekey:4}", + "oauthClientId": "{key:K-tag-b}", + "os": "linux", + "postureStatus": {}, + "sshEnabled": false, + "tags": ["tag:server"], + "tailnetLockError": "", + "tailnetLockKey": "nlpub:eb0dadb76ec830612d07bca3e4962cfb999396d26cb71f4fe9adb4b2e653cb14", + "updateAvailable": true, + "user": "freya@example.com" + }]}, + "offset_ms": 17059 + }, { + "kind": "wait", + "args": ["until", "own-b reaches nothing", "2m0s"], + "offset_ms": 17076 + }, {"kind": "wait", "args": ["quiet", "15s"], "offset_ms": 21083}], + "captures": { + "own-a": {"packet_filter_rules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], "netmap": { + "Cached": false, + "SelfNode": { + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "Hostinfo": {"Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/is-admin": null, + "https://tailscale.com/cap/is-owner": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/is-admin", + "https://tailscale.com/cap/is-owner", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "MachineKey": "mkey:e85ef6426e0397d36338f97a182db866ea147e69511cee0d3204c1969cce5533", + "Peers": [{ + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "AllowedIPs": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Endpoints": [ + "192.0.2.1:60009", + "198.51.100.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-b", "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222} + ]}, + "Created": "2026-10-20T13:41:19.99812632Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-b", + "ComputedNameWithHost": "own-b" + }, { + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "AllowedIPs": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "tag-a", "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911} + ]}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true, + "ComputedName": "tag-a", + "ComputedNameWithHost": "tag-a" + }, { + "ID": 6169742216312948, + "StableID": "n7xDNdfHBq11CNTRL", + "Name": "tag-b.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Addresses": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "AllowedIPs": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "Endpoints": [ + "192.0.2.1:58884", + "198.51.100.1:58884", + "198.51.100.2:58884", + "198.51.100.3:58884", + "198.51.100.4:58884", + "198.51.100.5:58884", + "198.51.100.6:58884", + "198.51.100.7:58884" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "tag-b", "Services": [ + {"Proto": "peerapi4", "Port": 47696}, + {"Proto": "peerapi6", "Port": 47696} + ]}, + "Created": "2026-10-20T13:41:21.531227448Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true, + "ComputedName": "tag-b", + "ComputedNameWithHost": "tag-b" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], + "PacketFilterRules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"1260082990019555": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "3982058329734709": { + "ID": 3982058329734709, + "LoginName": "freya@example.com", + "DisplayName": "freya" + }, "4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }} + }, "whois": {"100.69.123.71": {"Node": { + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "AllowedIPs": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "tag-a", "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911} + ]}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true, + "ComputedName": "tag-a", + "ComputedNameWithHost": "tag-a" + }, "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null}, "100.79.219.39": {"Node": { + "ID": 6169742216312948, + "StableID": "n7xDNdfHBq11CNTRL", + "Name": "tag-b.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Addresses": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "AllowedIPs": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "Endpoints": [ + "192.0.2.1:58884", + "198.51.100.1:58884", + "198.51.100.2:58884", + "198.51.100.3:58884", + "198.51.100.4:58884", + "198.51.100.5:58884", + "198.51.100.6:58884", + "198.51.100.7:58884" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "tag-b", "Services": [ + {"Proto": "peerapi4", "Port": 47696}, + {"Proto": "peerapi6", "Port": 47696} + ]}, + "Created": "2026-10-20T13:41:21.531227448Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true, + "ComputedName": "tag-b", + "ComputedNameWithHost": "tag-b" + }, "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null}, "100.91.17.52": {"Node": { + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "AllowedIPs": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Endpoints": [ + "192.0.2.1:60009", + "198.51.100.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-b", "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222} + ]}, + "Created": "2026-10-20T13:41:19.99812632Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-b", + "ComputedNameWithHost": "own-b" + }, "UserProfile": { + "ID": 3982058329734709, + "LoginName": "freya@example.com", + "DisplayName": "freya" + }, "CapMap": null}, "fd7a:115c:a1e0::2628:db28": {"Node": { + "ID": 6169742216312948, + "StableID": "n7xDNdfHBq11CNTRL", + "Name": "tag-b.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Addresses": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "AllowedIPs": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "Endpoints": [ + "192.0.2.1:58884", + "198.51.100.1:58884", + "198.51.100.2:58884", + "198.51.100.3:58884", + "198.51.100.4:58884", + "198.51.100.5:58884", + "198.51.100.6:58884", + "198.51.100.7:58884" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "tag-b", "Services": [ + {"Proto": "peerapi4", "Port": 47696}, + {"Proto": "peerapi6", "Port": 47696} + ]}, + "Created": "2026-10-20T13:41:21.531227448Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true, + "ComputedName": "tag-b", + "ComputedNameWithHost": "tag-b" + }, "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null}, "fd7a:115c:a1e0::a728:1135": {"Node": { + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "AllowedIPs": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Endpoints": [ + "192.0.2.1:60009", + "198.51.100.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-b", "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222} + ]}, + "Created": "2026-10-20T13:41:19.99812632Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-b", + "ComputedNameWithHost": "own-b" + }, "UserProfile": { + "ID": 3982058329734709, + "LoginName": "freya@example.com", + "DisplayName": "freya" + }, "CapMap": null}, "fd7a:115c:a1e0::b828:7b48": {"Node": { + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "AllowedIPs": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "tag-a", "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911} + ]}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true, + "ComputedName": "tag-a", + "ComputedNameWithHost": "tag-a" + }, "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null}}, "backend_state": "Running"}, + "own-b": {"packet_filter_rules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], "netmap": { + "Cached": false, + "SelfNode": { + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "AllowedIPs": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Endpoints": [ + "192.0.2.1:60009", + "198.51.100.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ], + "Hostinfo": {"Hostname": "own-b", "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:19.99812632Z", + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "own-b", + "ComputedNameWithHost": "own-b" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "MachineKey": "mkey:19a8b80433d0d07cdef41943f8f47a1131b9d49bd95519693a32cbcaa6533e43", + "Peers": [{ + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], + "PacketFilterRules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"3982058329734709": { + "ID": 3982058329734709, + "LoginName": "freya@example.com", + "DisplayName": "freya" + }, "4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }} + }, "backend_state": "Running"}, + "tag-a": { + "packet_filter_rules": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.69.123.71", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::b828:7b48", "Ports": {"First": 0, "Last": 65535}} + ]}], + "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "100.69.123.71/32", "Ports": {"First": 0, "Last": 65535}}, + { + "Net": "fd7a:115c:a1e0::b828:7b48/128", + "Ports": {"First": 0, "Last": 65535} + } + ], + "Caps": [] + }], + "netmap": { + "Cached": false, + "SelfNode": { + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 5609962921794417, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "AllowedIPs": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "Hostinfo": {"Hostname": "tag-a", "RequestTags": ["tag:server"], "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Tags": ["tag:server"], + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/is-owner": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "tag-a", + "ComputedNameWithHost": "tag-a" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/is-owner", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "MachineKey": "mkey:86059abbaa34043eed3baaad18d166600355a72caa04d406a63db23c8c2d1c49", + "Peers": [{ + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "100.69.123.71/32", "Ports": {"First": 0, "Last": 65535}}, + { + "Net": "fd7a:115c:a1e0::b828:7b48/128", + "Ports": {"First": 0, "Last": 65535} + } + ], + "Caps": [] + }], + "PacketFilterRules": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.69.123.71", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::b828:7b48", "Ports": {"First": 0, "Last": 65535}} + ]}], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }, "5609962921794417": { + "ID": 5609962921794417, + "LoginName": "tag-a.tail78f774.ts.net", + "DisplayName": "tag-a" + }} + }, + "backend_state": "Running" + }, + "tag-b": { + "packet_filter_rules": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.79.219.39", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::2628:db28", "Ports": {"First": 0, "Last": 65535}} + ]}], + "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "100.79.219.39/32", "Ports": {"First": 0, "Last": 65535}}, + { + "Net": "fd7a:115c:a1e0::2628:db28/128", + "Ports": {"First": 0, "Last": 65535} + } + ], + "Caps": [] + }], + "netmap": { + "Cached": false, + "SelfNode": { + "ID": 6169742216312948, + "StableID": "n7xDNdfHBq11CNTRL", + "Name": "tag-b.tail78f774.ts.net.", + "User": 6169742216312948, + "Key": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Addresses": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "AllowedIPs": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "Hostinfo": { + "Hostname": "tag-b", + "RequestTags": ["tag:server"], + "Services": [{"Proto": "peerapi-dns-proxy", "Port": 1}] + }, + "Created": "2026-10-20T13:41:21.531227448Z", + "Tags": ["tag:server"], + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "tag-b", + "ComputedNameWithHost": "tag-b" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "MachineKey": "mkey:6a852bb4841c235040b9d9a75a9fc80f8dd2aa787b561e80d23639055f969f0f", + "Peers": [{ + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "100.79.219.39/32", "Ports": {"First": 0, "Last": 65535}}, + { + "Net": "fd7a:115c:a1e0::2628:db28/128", + "Ports": {"First": 0, "Last": 65535} + } + ], + "Caps": [] + }], + "PacketFilterRules": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.79.219.39", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::2628:db28", "Ports": {"First": 0, "Last": 65535}} + ]}], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }, "6169742216312948": { + "ID": 6169742216312948, + "LoginName": "tag-b.tail78f774.ts.net", + "DisplayName": "tag-b" + }} + }, + "backend_state": "Running" + } + }, + "register": {"own-a": [{ + "node_key": "{nodekey:1}", + "node_key_expired": false, + "machine_authorized": true, + "offset_ms": 14123 + }], "own-b": [{ + "node_key": "{nodekey:2}", + "node_key_expired": false, + "machine_authorized": true, + "offset_ms": 14123 + }], "tag-a": [{ + "node_key": "{nodekey:3}", + "node_key_expired": false, + "machine_authorized": true, + "offset_ms": 15123 + }], "tag-b": [{ + "node_key": "{nodekey:4}", + "node_key_expired": false, + "machine_authorized": true, + "offset_ms": 16123 + }]}, + "frames": {"own-a": [ + {"offset_ms": 14123, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Stream": true, + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "own-a", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "Services": [{"Proto": "peerapi-dns-proxy", "Port": 1}], + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "DebugFlags": ["netstack"] + }}, + {"offset_ms": 14123, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "own-a", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "Services": [{"Proto": "peerapi-dns-proxy", "Port": 1}], + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "OmitPeers": true, + "DebugFlags": ["netstack"] + }}, + {"offset_ms": 14123, "response": { + "Node": { + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Hostinfo": { + "Hostname": "own-a", + "Services": [{"Proto": "peerapi-dns-proxy", "Port": 1}] + }, + "Created": "2026-10-20T13:41:19.292442823Z", + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/is-admin": null, + "https://tailscale.com/cap/is-owner": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + } + }, + "DNSConfig": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "Domain": "odin@example.com", + "PacketFilter": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], + "UserProfiles": [{ + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }], + "SSHPolicy": {"rules": []}, + "ControlTime": "2026-10-20T13:41:19.316850145Z" + }, "dropped": ["DERPMap", "ControlDialPlan"]}, + {"offset_ms": 14123, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "own-a", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ], + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "OmitPeers": true, + "DebugFlags": ["netstack"] + }}, + {"offset_ms": 14123, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "own-a", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ], + "NetInfo": { + "MappingVariesByDestIP": false, + "WorkingIPv6": false, + "OSHasIPv6": true, + "WorkingUDP": true, + "WorkingICMPv4": false, + "UPnP": false, + "PMP": false, + "PCP": false, + "PreferredDERP": 14, + "DERPLatency": { + "1-v4": 0, + "10-v4": 0, + "12-v4": 0, + "13-v4": 0, + "14-v4": 0, + "15-v4": 0, + "16-v4": 0, + "17-v4": 0, + "18-v4": 0, + "19-v4": 0, + "2-v4": 0, + "20-v4": 0, + "21-v4": 0, + "22-v4": 0, + "23-v4": 0, + "24-v4": 0, + "25-v4": 0, + "26-v4": 0, + "27-v4": 0, + "28-v4": 0, + "4-v4": 0, + "6-v4": 0, + "7-v4": 0, + "8-v4": 0, + "9-v4": 0 + } + }, + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "OmitPeers": true, + "DebugFlags": ["netstack"] + }}, + {"offset_ms": 14123, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "own-a", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ], + "NetInfo": { + "MappingVariesByDestIP": false, + "WorkingIPv6": false, + "OSHasIPv6": true, + "WorkingUDP": true, + "WorkingICMPv4": false, + "UPnP": false, + "PMP": false, + "PCP": false, + "PreferredDERP": 14, + "DERPLatency": { + "1-v4": 0, + "10-v4": 0, + "12-v4": 0, + "13-v4": 0, + "14-v4": 0, + "15-v4": 0, + "16-v4": 0, + "17-v4": 0, + "18-v4": 0, + "19-v4": 0, + "2-v4": 0, + "20-v4": 0, + "21-v4": 0, + "22-v4": 0, + "23-v4": 0, + "24-v4": 0, + "25-v4": 0, + "26-v4": 0, + "27-v4": 0, + "28-v4": 0, + "4-v4": 0, + "6-v4": 0, + "7-v4": 0, + "8-v4": 0, + "9-v4": 0 + } + }, + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "EndpointTypes": [2, 1, 1, 1, 1, 1, 1, 1], + "OmitPeers": true, + "DebugFlags": ["netstack"] + }}, + {"offset_ms": 15123, "response": {"Node": { + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "Hostinfo": {"Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/is-admin": null, + "https://tailscale.com/cap/is-owner": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + } + }, "PeersChanged": [{ + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Hostinfo": {"OS": "linux", "Hostname": "own-b"}, + "Created": "2026-10-20T13:41:19.99812632Z", + "Cap": 142, + "Online": true + }], "UserProfiles": [{ + "ID": 3982058329734709, + "LoginName": "freya@example.com", + "DisplayName": "freya" + }], "ControlTime": "2026-10-20T13:41:20.001391589Z"}}, + {"offset_ms": 15123, "response": {"PeersChanged": [{ + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Hostinfo": {"OS": "linux", "Hostname": "own-b"}, + "Created": "2026-10-20T13:41:19.99812632Z", + "Cap": 142, + "Online": true + }]}}, + { + "offset_ms": 15123, + "response": {"PeersChangedPatch": [{"NodeID": 769496275498017, "Online": true}]} + }, + {"offset_ms": 15123, "response": {"PeersChanged": [{ + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Hostinfo": {"OS": "linux", "Hostname": "own-b", "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222} + ]}, + "Created": "2026-10-20T13:41:19.99812632Z", + "Cap": 142, + "Online": true + }]}}, + {"offset_ms": 15123, "response": {"PeersChanged": [{ + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "DERP": "127.3.3.40:14", + "Hostinfo": {"OS": "linux", "Hostname": "own-b", "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222} + ]}, + "Created": "2026-10-20T13:41:19.99812632Z", + "Cap": 142, + "Online": true + }]}}, + { + "offset_ms": 15123, + "response": {"PeersChangedPatch": [{"NodeID": 769496275498017, "Endpoints": [ + "192.0.2.1:60009", + "198.51.100.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ]}]} + }, + {"offset_ms": 15123, "response": {"PeersChanged": [{ + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Hostinfo": {"OS": "linux", "Hostname": "tag-a"}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true + }], "UserProfiles": [{ + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }], "ControlTime": "2026-10-20T13:41:20.822781313Z"}}, + {"offset_ms": 15123, "response": {"PeersChanged": [{ + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Hostinfo": {"OS": "linux", "Hostname": "tag-a"}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true + }]}}, + {"offset_ms": 15123, "response": {"PeersChanged": [{ + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Hostinfo": {"OS": "linux", "Hostname": "tag-a", "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911} + ]}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true + }]}}, + { + "offset_ms": 16123, + "response": {"PeersChangedPatch": [{"NodeID": 5609962921794417, "Online": true}]} + }, + {"offset_ms": 16123, "response": {"PeersChanged": [{ + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "DERP": "127.3.3.40:14", + "Hostinfo": {"OS": "linux", "Hostname": "tag-a", "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911} + ]}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true + }]}}, + { + "offset_ms": 16123, + "response": {"PeersChangedPatch": [{"NodeID": 5609962921794417, "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ]}]} + }, + {"offset_ms": 16123, "response": {"PeersChanged": [{ + "ID": 6169742216312948, + "StableID": "n7xDNdfHBq11CNTRL", + "Name": "tag-b.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "Addresses": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "Hostinfo": {"OS": "linux", "Hostname": "tag-b"}, + "Created": "2026-10-20T13:41:21.531227448Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true + }], "ControlTime": "2026-10-20T13:41:21.535780256Z"}}, + {"offset_ms": 16123, "response": {"PeersChanged": [{ + "ID": 6169742216312948, + "StableID": "n7xDNdfHBq11CNTRL", + "Name": "tag-b.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Addresses": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "Hostinfo": {"OS": "linux", "Hostname": "tag-b"}, + "Created": "2026-10-20T13:41:21.531227448Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true + }]}}, + {"offset_ms": 16123, "response": {"PeersChanged": [{ + "ID": 6169742216312948, + "StableID": "n7xDNdfHBq11CNTRL", + "Name": "tag-b.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Addresses": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "Hostinfo": {"OS": "linux", "Hostname": "tag-b", "Services": [ + {"Proto": "peerapi4", "Port": 47696}, + {"Proto": "peerapi6", "Port": 47696} + ]}, + "Created": "2026-10-20T13:41:21.531227448Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true + }]}}, + {"offset_ms": 16123, "response": {"PeersChanged": [{ + "ID": 6169742216312948, + "StableID": "n7xDNdfHBq11CNTRL", + "Name": "tag-b.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Addresses": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "DERP": "127.3.3.40:14", + "Hostinfo": {"OS": "linux", "Hostname": "tag-b", "Services": [ + {"Proto": "peerapi4", "Port": 47696}, + {"Proto": "peerapi6", "Port": 47696} + ]}, + "Created": "2026-10-20T13:41:21.531227448Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true + }]}}, + { + "offset_ms": 16123, + "response": {"PeersChangedPatch": [{"NodeID": 6169742216312948, "Endpoints": [ + "192.0.2.1:58884", + "198.51.100.1:58884", + "198.51.100.2:58884", + "198.51.100.3:58884", + "198.51.100.4:58884", + "198.51.100.5:58884", + "198.51.100.6:58884", + "198.51.100.7:58884" + ]}]} + }, + { + "offset_ms": 17123, + "response": {"PeersChangedPatch": [{"NodeID": 6169742216312948, "Online": true}]} + } + ], "own-b": [{"offset_ms": 15123, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "own-b", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "Services": [{"Proto": "peerapi-dns-proxy", "Port": 1}], + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "OmitPeers": true, + "DebugFlags": ["netstack"] + }}, {"offset_ms": 15123, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Stream": true, + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "own-b", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "Services": [{"Proto": "peerapi-dns-proxy", "Port": 1}], + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "DebugFlags": ["netstack"] + }}, {"offset_ms": 15123, "response": { + "Node": { + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "AllowedIPs": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Hostinfo": { + "Hostname": "own-b", + "Services": [{"Proto": "peerapi-dns-proxy", "Port": 1}] + }, + "Created": "2026-10-20T13:41:19.99812632Z", + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + } + }, + "PeersChanged": [{ + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "DERP": "127.3.3.40:14", + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true + }], + "DNSConfig": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "Domain": "odin@example.com", + "PacketFilter": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], + "UserProfiles": [{ + "ID": 3982058329734709, + "LoginName": "freya@example.com", + "DisplayName": "freya" + }, { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }], + "SSHPolicy": {"rules": []}, + "ControlTime": "2026-10-20T13:41:20.039876261Z" + }, "dropped": ["DERPMap", "ControlDialPlan"]}, { + "offset_ms": 15123, + "response": {"PeersChangedPatch": [{"NodeID": 6604014731421167, "Online": true}]} + }, {"offset_ms": 15123, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "own-b", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ], + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "OmitPeers": true, + "DebugFlags": ["netstack"] + }}, {"offset_ms": 15123, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "own-b", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ], + "NetInfo": { + "MappingVariesByDestIP": false, + "WorkingIPv6": false, + "OSHasIPv6": true, + "WorkingUDP": true, + "WorkingICMPv4": false, + "UPnP": false, + "PMP": false, + "PCP": false, + "PreferredDERP": 14, + "DERPLatency": { + "1-v4": 0, + "10-v4": 0, + "12-v4": 0, + "13-v4": 0, + "14-v4": 0, + "15-v4": 0, + "16-v4": 0, + "17-v4": 0, + "18-v4": 0, + "19-v4": 0, + "2-v4": 0, + "20-v4": 0, + "21-v4": 0, + "22-v4": 0, + "23-v4": 0, + "24-v4": 0, + "25-v4": 0, + "26-v4": 0, + "27-v4": 0, + "28-v4": 0, + "4-v4": 0, + "6-v4": 0, + "7-v4": 0, + "8-v4": 0, + "9-v4": 0 + } + }, + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "OmitPeers": true, + "DebugFlags": ["netstack"] + }}, {"offset_ms": 15123, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "own-b", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ], + "NetInfo": { + "MappingVariesByDestIP": false, + "WorkingIPv6": false, + "OSHasIPv6": true, + "WorkingUDP": true, + "WorkingICMPv4": false, + "UPnP": false, + "PMP": false, + "PCP": false, + "PreferredDERP": 14, + "DERPLatency": { + "1-v4": 0, + "10-v4": 0, + "12-v4": 0, + "13-v4": 0, + "14-v4": 0, + "15-v4": 0, + "16-v4": 0, + "17-v4": 0, + "18-v4": 0, + "19-v4": 0, + "2-v4": 0, + "20-v4": 0, + "21-v4": 0, + "22-v4": 0, + "23-v4": 0, + "24-v4": 0, + "25-v4": 0, + "26-v4": 0, + "27-v4": 0, + "28-v4": 0, + "4-v4": 0, + "6-v4": 0, + "7-v4": 0, + "8-v4": 0, + "9-v4": 0 + } + }, + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "Endpoints": [ + "192.0.2.1:60009", + "198.51.100.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ], + "EndpointTypes": [2, 1, 1, 1, 1, 1, 1, 1], + "OmitPeers": true, + "DebugFlags": ["netstack"] + }}, {"offset_ms": 15123, "response": {"Node": { + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "AllowedIPs": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Endpoints": [ + "192.0.2.1:60009", + "198.51.100.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ], + "Hostinfo": {"Hostname": "own-b", "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:19.99812632Z", + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + } + }, "ControlTime": "2026-10-20T13:41:20.822588977Z"}}], "tag-a": [ + {"offset_ms": 15123, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "tag-a", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "RequestTags": ["tag:server"], + "Services": [{"Proto": "peerapi-dns-proxy", "Port": 1}], + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "OmitPeers": true, + "DebugFlags": ["netstack"] + }}, + {"offset_ms": 15123, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Stream": true, + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "tag-a", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "RequestTags": ["tag:server"], + "Services": [{"Proto": "peerapi-dns-proxy", "Port": 1}], + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "DebugFlags": ["netstack"] + }}, + {"offset_ms": 15123, "response": { + "Node": { + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 5609962921794417, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "AllowedIPs": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Hostinfo": { + "Hostname": "tag-a", + "RequestTags": ["tag:server"], + "Services": [{"Proto": "peerapi-dns-proxy", "Port": 1}] + }, + "Created": "2026-10-20T13:41:20.818879489Z", + "Tags": ["tag:server"], + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/is-owner": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + } + }, + "PeersChanged": [{ + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "DERP": "127.3.3.40:14", + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true + }], + "DNSConfig": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "Domain": "odin@example.com", + "PacketFilter": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.69.123.71", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::b828:7b48", "Ports": {"First": 0, "Last": 65535}} + ]}], + "UserProfiles": [{ + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }, { + "ID": 5609962921794417, + "LoginName": "tag-a.tail78f774.ts.net", + "DisplayName": "tag-a" + }], + "SSHPolicy": {"rules": []}, + "ControlTime": "2026-10-20T13:41:20.843862266Z" + }, "dropped": ["DERPMap", "ControlDialPlan"]}, + {"offset_ms": 15123, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "tag-a", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "RequestTags": ["tag:server"], + "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ], + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "OmitPeers": true, + "DebugFlags": ["netstack"] + }}, + {"offset_ms": 16123, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "tag-a", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "RequestTags": ["tag:server"], + "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ], + "NetInfo": { + "MappingVariesByDestIP": false, + "WorkingIPv6": false, + "OSHasIPv6": true, + "WorkingUDP": true, + "WorkingICMPv4": false, + "UPnP": false, + "PMP": false, + "PCP": false, + "PreferredDERP": 14, + "DERPLatency": { + "1-v4": 0, + "10-v4": 0, + "12-v4": 0, + "13-v4": 0, + "14-v4": 0, + "15-v4": 0, + "16-v4": 0, + "17-v4": 0, + "18-v4": 0, + "19-v4": 0, + "2-v4": 0, + "20-v4": 0, + "21-v4": 0, + "22-v4": 0, + "23-v4": 0, + "24-v4": 0, + "25-v4": 0, + "26-v4": 0, + "27-v4": 0, + "28-v4": 0, + "4-v4": 0, + "6-v4": 0, + "7-v4": 0, + "8-v4": 0, + "9-v4": 0 + } + }, + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "OmitPeers": true, + "DebugFlags": ["netstack"] + }}, + {"offset_ms": 16123, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "tag-a", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "RequestTags": ["tag:server"], + "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ], + "NetInfo": { + "MappingVariesByDestIP": false, + "WorkingIPv6": false, + "OSHasIPv6": true, + "WorkingUDP": true, + "WorkingICMPv4": false, + "UPnP": false, + "PMP": false, + "PCP": false, + "PreferredDERP": 14, + "DERPLatency": { + "1-v4": 0, + "10-v4": 0, + "12-v4": 0, + "13-v4": 0, + "14-v4": 0, + "15-v4": 0, + "16-v4": 0, + "17-v4": 0, + "18-v4": 0, + "19-v4": 0, + "2-v4": 0, + "20-v4": 0, + "21-v4": 0, + "22-v4": 0, + "23-v4": 0, + "24-v4": 0, + "25-v4": 0, + "26-v4": 0, + "27-v4": 0, + "28-v4": 0, + "4-v4": 0, + "6-v4": 0, + "7-v4": 0, + "8-v4": 0, + "9-v4": 0 + } + }, + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "EndpointTypes": [2, 1, 1, 1, 1, 1, 1, 1], + "OmitPeers": true, + "DebugFlags": ["netstack"] + }}, + {"offset_ms": 16123, "response": {"Node": { + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 5609962921794417, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "AllowedIPs": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "Hostinfo": {"Hostname": "tag-a", "RequestTags": ["tag:server"], "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Tags": ["tag:server"], + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/is-owner": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + } + }, "ControlTime": "2026-10-20T13:41:21.535502387Z"}} + ], "tag-b": [ + {"offset_ms": 16123, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "tag-b", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "RequestTags": ["tag:server"], + "Services": [{"Proto": "peerapi-dns-proxy", "Port": 1}], + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "OmitPeers": true, + "DebugFlags": ["netstack"] + }}, + {"offset_ms": 16123, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Stream": true, + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "tag-b", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "RequestTags": ["tag:server"], + "Services": [{"Proto": "peerapi-dns-proxy", "Port": 1}], + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "DebugFlags": ["netstack"] + }}, + {"offset_ms": 16123, "response": { + "Node": { + "ID": 6169742216312948, + "StableID": "n7xDNdfHBq11CNTRL", + "Name": "tag-b.tail78f774.ts.net.", + "User": 6169742216312948, + "Key": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Addresses": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "AllowedIPs": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "Hostinfo": { + "Hostname": "tag-b", + "RequestTags": ["tag:server"], + "Services": [{"Proto": "peerapi-dns-proxy", "Port": 1}] + }, + "Created": "2026-10-20T13:41:21.531227448Z", + "Tags": ["tag:server"], + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + } + }, + "PeersChanged": [{ + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "DERP": "127.3.3.40:14", + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true + }], + "DNSConfig": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "Domain": "odin@example.com", + "PacketFilter": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.79.219.39", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::2628:db28", "Ports": {"First": 0, "Last": 65535}} + ]}], + "UserProfiles": [{ + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }, { + "ID": 6169742216312948, + "LoginName": "tag-b.tail78f774.ts.net", + "DisplayName": "tag-b" + }], + "SSHPolicy": {"rules": []}, + "ControlTime": "2026-10-20T13:41:21.567168543Z" + }, "dropped": ["DERPMap", "ControlDialPlan"]}, + {"offset_ms": 16123, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "tag-b", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "RequestTags": ["tag:server"], + "Services": [ + {"Proto": "peerapi4", "Port": 47696}, + {"Proto": "peerapi6", "Port": 47696}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ], + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "OmitPeers": true, + "DebugFlags": ["netstack"] + }}, + {"offset_ms": 16123, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "tag-b", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "RequestTags": ["tag:server"], + "Services": [ + {"Proto": "peerapi4", "Port": 47696}, + {"Proto": "peerapi6", "Port": 47696}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ], + "NetInfo": { + "MappingVariesByDestIP": false, + "WorkingIPv6": false, + "OSHasIPv6": true, + "WorkingUDP": true, + "WorkingICMPv4": false, + "UPnP": false, + "PMP": false, + "PCP": false, + "PreferredDERP": 14, + "DERPLatency": { + "1-v4": 0, + "10-v4": 0, + "12-v4": 0, + "13-v4": 0, + "14-v4": 0, + "15-v4": 0, + "16-v4": 0, + "17-v4": 0, + "18-v4": 0, + "19-v4": 0, + "2-v4": 0, + "20-v4": 0, + "21-v4": 0, + "22-v4": 0, + "23-v4": 0, + "24-v4": 0, + "25-v4": 0, + "26-v4": 0, + "27-v4": 0, + "28-v4": 0, + "4-v4": 0, + "6-v4": 0, + "7-v4": 0, + "8-v4": 0, + "9-v4": 0 + } + }, + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "OmitPeers": true, + "DebugFlags": ["netstack"] + }}, + {"offset_ms": 16123, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "tag-b", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "RequestTags": ["tag:server"], + "Services": [ + {"Proto": "peerapi4", "Port": 47696}, + {"Proto": "peerapi6", "Port": 47696}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ], + "NetInfo": { + "MappingVariesByDestIP": false, + "WorkingIPv6": false, + "OSHasIPv6": true, + "WorkingUDP": true, + "WorkingICMPv4": false, + "UPnP": false, + "PMP": false, + "PCP": false, + "PreferredDERP": 14, + "DERPLatency": { + "1-v4": 0, + "10-v4": 0, + "12-v4": 0, + "13-v4": 0, + "14-v4": 0, + "15-v4": 0, + "16-v4": 0, + "17-v4": 0, + "18-v4": 0, + "19-v4": 0, + "2-v4": 0, + "20-v4": 0, + "21-v4": 0, + "22-v4": 0, + "23-v4": 0, + "24-v4": 0, + "25-v4": 0, + "26-v4": 0, + "27-v4": 0, + "28-v4": 0, + "4-v4": 0, + "6-v4": 0, + "7-v4": 0, + "8-v4": 0, + "9-v4": 0 + } + }, + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "Endpoints": [ + "192.0.2.1:58884", + "198.51.100.1:58884", + "198.51.100.2:58884", + "198.51.100.3:58884", + "198.51.100.4:58884", + "198.51.100.5:58884", + "198.51.100.6:58884", + "198.51.100.7:58884" + ], + "EndpointTypes": [2, 1, 1, 1, 1, 1, 1, 1], + "OmitPeers": true, + "DebugFlags": ["netstack"] + }}, + {"offset_ms": 34123, "response": {"KeepAlive": true}} + ]} + }, { + "name": "S1", + "at": "2026-10-20T13:41:53.162544475Z", + "note": "never held: tag-a admits own-b: false; tag-a sees own-b: false; own-b sees tag-a: false; tag-b admits own-b: false; tag-b sees own-b: false; own-b sees tag-b: false; timeout: own-b reaches tag:server: not within 1m0s", + "result": "timeout", + "actions": [{ + "kind": "api", + "principal": "admin", + "method": "GET", + "path": "/tailnet/-/users", + "status": 200, + "resp_header": {"Content-Type": "application/json"}, + "response": {"users": [{ + "created": "2025-01-06T15:34:57.211063713Z", + "currentlyConnected": true, + "deviceCount": 1, + "displayName": "odin@example.com", + "id": "{user:odin}", + "lastSeen": "2026-10-20T13:41:57.180704655Z", + "loginName": "odin@example.com", + "profilePicUrl": "", + "role": "owner", + "status": "active", + "tailnetId": "{tailnet}", + "type": "member" + }, { + "created": "2026-02-20T13:16:07.187446882Z", + "displayName": "thor@example.org", + "id": "{user:thor}", + "lastSeen": "2026-10-17T16:47:43Z", + "loginName": "thor@example.org", + "profilePicUrl": "", + "role": "admin", + "status": "active", + "tailnetId": "{tailnet}", + "type": "member" + }, { + "created": "2026-02-20T13:19:42.5861759Z", + "currentlyConnected": true, + "deviceCount": 1, + "displayName": "freya@example.com", + "id": "{user:freya}", + "lastSeen": "2026-10-20T13:41:57.180704655Z", + "loginName": "freya@example.com", + "profilePicUrl": "", + "role": "member", + "status": "active", + "tailnetId": "{tailnet}", + "type": "member" + }]}, + "offset_ms": 4007 + }, { + "kind": "role", + "principal": "admin", + "method": "POST", + "path": "/users/{user:freya}/role", + "header": {"Content-Type": "application/json"}, + "body": {"role": "admin"}, + "status": 200, + "resp_header": {"Content-Type": "application/json"}, + "response": null, + "offset_ms": 4027 + }, { + "kind": "wait", + "args": ["until", "own-b reaches tag:server", "1m0s"], + "offset_ms": 4045 + }, {"kind": "wait", "args": ["quiet", "15s"], "offset_ms": 64131}, { + "kind": "api", + "principal": "admin", + "method": "GET", + "path": "/tailnet/-/users", + "status": 200, + "resp_header": {"Content-Type": "application/json"}, + "response": {"users": [{ + "created": "2025-01-06T15:34:57.211063713Z", + "currentlyConnected": true, + "deviceCount": 1, + "displayName": "odin@example.com", + "id": "{user:odin}", + "lastSeen": "2026-10-20T13:43:24.334298275Z", + "loginName": "odin@example.com", + "profilePicUrl": "", + "role": "owner", + "status": "active", + "tailnetId": "{tailnet}", + "type": "member" + }, { + "created": "2026-02-20T13:16:07.187446882Z", + "displayName": "thor@example.org", + "id": "{user:thor}", + "lastSeen": "2026-10-17T16:47:43Z", + "loginName": "thor@example.org", + "profilePicUrl": "", + "role": "admin", + "status": "active", + "tailnetId": "{tailnet}", + "type": "member" + }, { + "created": "2026-02-20T13:19:42.5861759Z", + "currentlyConnected": true, + "deviceCount": 1, + "displayName": "freya@example.com", + "id": "{user:freya}", + "lastSeen": "2026-10-20T13:43:24.334298275Z", + "loginName": "freya@example.com", + "profilePicUrl": "", + "role": "admin", + "status": "active", + "tailnetId": "{tailnet}", + "type": "member" + }]}, + "offset_ms": 91162 + }], + "captures": {"own-a": {"packet_filter_rules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], "netmap": { + "Cached": false, + "SelfNode": { + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "Hostinfo": {"Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/is-admin": null, + "https://tailscale.com/cap/is-owner": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/is-admin", + "https://tailscale.com/cap/is-owner", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "MachineKey": "mkey:e85ef6426e0397d36338f97a182db866ea147e69511cee0d3204c1969cce5533", + "Peers": [{ + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "AllowedIPs": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Endpoints": [ + "192.0.2.1:60009", + "198.51.100.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-b", "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222} + ]}, + "Created": "2026-10-20T13:41:19.99812632Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-b", + "ComputedNameWithHost": "own-b" + }, { + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "AllowedIPs": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "tag-a", "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911} + ]}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true, + "ComputedName": "tag-a", + "ComputedNameWithHost": "tag-a" + }, { + "ID": 6169742216312948, + "StableID": "n7xDNdfHBq11CNTRL", + "Name": "tag-b.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Addresses": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "AllowedIPs": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "Endpoints": [ + "192.0.2.1:58884", + "198.51.100.1:58884", + "198.51.100.2:58884", + "198.51.100.3:58884", + "198.51.100.4:58884", + "198.51.100.5:58884", + "198.51.100.6:58884", + "198.51.100.7:58884" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "tag-b", "Services": [ + {"Proto": "peerapi4", "Port": 47696}, + {"Proto": "peerapi6", "Port": 47696} + ]}, + "Created": "2026-10-20T13:41:21.531227448Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true, + "ComputedName": "tag-b", + "ComputedNameWithHost": "tag-b" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], + "PacketFilterRules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"1260082990019555": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "3982058329734709": { + "ID": 3982058329734709, + "LoginName": "freya@example.com", + "DisplayName": "freya" + }, "4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }} + }, "backend_state": "Running"}, "own-b": {"packet_filter_rules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], "netmap": { + "Cached": false, + "SelfNode": { + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "AllowedIPs": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Endpoints": [ + "192.0.2.1:60009", + "198.51.100.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ], + "Hostinfo": {"Hostname": "own-b", "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:19.99812632Z", + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "own-b", + "ComputedNameWithHost": "own-b" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "MachineKey": "mkey:19a8b80433d0d07cdef41943f8f47a1131b9d49bd95519693a32cbcaa6533e43", + "Peers": [{ + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], + "PacketFilterRules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"3982058329734709": { + "ID": 3982058329734709, + "LoginName": "freya@example.com", + "DisplayName": "freya" + }, "4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }} + }, "backend_state": "Running"}, "tag-a": { + "packet_filter_rules": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.69.123.71", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::b828:7b48", "Ports": {"First": 0, "Last": 65535}} + ]}], + "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "100.69.123.71/32", "Ports": {"First": 0, "Last": 65535}}, + { + "Net": "fd7a:115c:a1e0::b828:7b48/128", + "Ports": {"First": 0, "Last": 65535} + } + ], + "Caps": [] + }], + "netmap": { + "Cached": false, + "SelfNode": { + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 5609962921794417, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "AllowedIPs": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "Hostinfo": {"Hostname": "tag-a", "RequestTags": ["tag:server"], "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Tags": ["tag:server"], + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/is-owner": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "tag-a", + "ComputedNameWithHost": "tag-a" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/is-owner", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "MachineKey": "mkey:86059abbaa34043eed3baaad18d166600355a72caa04d406a63db23c8c2d1c49", + "Peers": [{ + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "100.69.123.71/32", "Ports": {"First": 0, "Last": 65535}}, + { + "Net": "fd7a:115c:a1e0::b828:7b48/128", + "Ports": {"First": 0, "Last": 65535} + } + ], + "Caps": [] + }], + "PacketFilterRules": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.69.123.71", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::b828:7b48", "Ports": {"First": 0, "Last": 65535}} + ]}], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }, "5609962921794417": { + "ID": 5609962921794417, + "LoginName": "tag-a.tail78f774.ts.net", + "DisplayName": "tag-a" + }} + }, + "backend_state": "Running" + }, "tag-b": { + "packet_filter_rules": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.79.219.39", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::2628:db28", "Ports": {"First": 0, "Last": 65535}} + ]}], + "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "100.79.219.39/32", "Ports": {"First": 0, "Last": 65535}}, + { + "Net": "fd7a:115c:a1e0::2628:db28/128", + "Ports": {"First": 0, "Last": 65535} + } + ], + "Caps": [] + }], + "netmap": { + "Cached": false, + "SelfNode": { + "ID": 6169742216312948, + "StableID": "n7xDNdfHBq11CNTRL", + "Name": "tag-b.tail78f774.ts.net.", + "User": 6169742216312948, + "Key": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Addresses": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "AllowedIPs": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "Hostinfo": { + "Hostname": "tag-b", + "RequestTags": ["tag:server"], + "Services": [{"Proto": "peerapi-dns-proxy", "Port": 1}] + }, + "Created": "2026-10-20T13:41:21.531227448Z", + "Tags": ["tag:server"], + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "tag-b", + "ComputedNameWithHost": "tag-b" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "MachineKey": "mkey:6a852bb4841c235040b9d9a75a9fc80f8dd2aa787b561e80d23639055f969f0f", + "Peers": [{ + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "100.79.219.39/32", "Ports": {"First": 0, "Last": 65535}}, + { + "Net": "fd7a:115c:a1e0::2628:db28/128", + "Ports": {"First": 0, "Last": 65535} + } + ], + "Caps": [] + }], + "PacketFilterRules": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.79.219.39", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::2628:db28", "Ports": {"First": 0, "Last": 65535}} + ]}], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }, "6169742216312948": { + "ID": 6169742216312948, + "LoginName": "tag-b.tail78f774.ts.net", + "DisplayName": "tag-b" + }} + }, + "backend_state": "Running" + }}, + "frames": { + "own-a": [{"offset_ms": 23837, "response": {"KeepAlive": true}}], + "own-b": [{"offset_ms": 20837, "response": {"KeepAlive": true}}], + "tag-a": [{"offset_ms": 20837, "response": {"KeepAlive": true}}] + } + }, { + "name": "S1-reconnect", + "at": "2026-10-20T13:43:24.344101099Z", + "note": "landed after 9s; the others still: own-b sees tag-a: false; tag-b admits own-b: false; tag-b sees own-b: false; own-b sees tag-b: false", + "result": "observed", + "actions": [{ + "kind": "down", + "node": "tag-a", + "args": ["down"], + "exit": 0, + "offset_ms": 4006 + }, { + "kind": "up", + "node": "tag-a", + "args": ["up"], + "exit": 0, + "offset_ms": 4125 + }, { + "kind": "wait", + "args": ["until", "tag-a's view: own-b reaches tag:server", "1m0s"], + "offset_ms": 4230 + }, {"kind": "wait", "args": ["quiet", "15s"], "offset_ms": 13249}], + "captures": {"own-a": {"packet_filter_rules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], "netmap": { + "Cached": false, + "SelfNode": { + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "Hostinfo": {"Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/is-admin": null, + "https://tailscale.com/cap/is-owner": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/is-admin", + "https://tailscale.com/cap/is-owner", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "MachineKey": "mkey:e85ef6426e0397d36338f97a182db866ea147e69511cee0d3204c1969cce5533", + "Peers": [{ + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "AllowedIPs": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Endpoints": [ + "192.0.2.1:60009", + "198.51.100.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-b", "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222} + ]}, + "Created": "2026-10-20T13:41:19.99812632Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-b", + "ComputedNameWithHost": "own-b" + }, { + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "AllowedIPs": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "tag-a", "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911} + ]}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true, + "ComputedName": "tag-a", + "ComputedNameWithHost": "tag-a" + }, { + "ID": 6169742216312948, + "StableID": "n7xDNdfHBq11CNTRL", + "Name": "tag-b.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Addresses": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "AllowedIPs": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "Endpoints": [ + "192.0.2.1:58884", + "198.51.100.1:58884", + "198.51.100.2:58884", + "198.51.100.3:58884", + "198.51.100.4:58884", + "198.51.100.5:58884", + "198.51.100.6:58884", + "198.51.100.7:58884" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "tag-b", "Services": [ + {"Proto": "peerapi4", "Port": 47696}, + {"Proto": "peerapi6", "Port": 47696} + ]}, + "Created": "2026-10-20T13:41:21.531227448Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true, + "ComputedName": "tag-b", + "ComputedNameWithHost": "tag-b" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], + "PacketFilterRules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"1260082990019555": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "3982058329734709": { + "ID": 3982058329734709, + "LoginName": "freya@example.com", + "DisplayName": "freya" + }, "4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }} + }, "backend_state": "Running"}, "own-b": {"packet_filter_rules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], "netmap": { + "Cached": false, + "SelfNode": { + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "AllowedIPs": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Endpoints": [ + "192.0.2.1:60009", + "198.51.100.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ], + "Hostinfo": {"Hostname": "own-b", "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:19.99812632Z", + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "own-b", + "ComputedNameWithHost": "own-b" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "MachineKey": "mkey:19a8b80433d0d07cdef41943f8f47a1131b9d49bd95519693a32cbcaa6533e43", + "Peers": [{ + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], + "PacketFilterRules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"3982058329734709": { + "ID": 3982058329734709, + "LoginName": "freya@example.com", + "DisplayName": "freya" + }, "4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }} + }, "backend_state": "Running"}, "tag-a": {"packet_filter_rules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }, {"SrcIPs": [ + "100.115.149.80", + "100.91.17.52", + "fd7a:115c:a1e0::7128:9551", + "fd7a:115c:a1e0::a728:1135" + ], "DstPorts": [ + {"IP": "100.69.123.71", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::b828:7b48", "Ports": {"First": 0, "Last": 65535}} + ]}], "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }, { + "IPProto": [6, 17, 1, 58], + "Srcs": [ + "100.115.149.80/32", + "100.91.17.52/32", + "fd7a:115c:a1e0::7128:9551/128", + "fd7a:115c:a1e0::a728:1135/128" + ], + "SrcCaps": null, + "Dsts": [{"Net": "100.69.123.71/32", "Ports": {"First": 0, "Last": 65535}}, { + "Net": "fd7a:115c:a1e0::b828:7b48/128", + "Ports": {"First": 0, "Last": 65535} + }], + "Caps": [] + }], "netmap": { + "Cached": false, + "SelfNode": { + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 5609962921794417, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "AllowedIPs": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "Hostinfo": {"Hostname": "tag-a", "RequestTags": ["tag:server"], "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Tags": ["tag:server"], + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/is-owner": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "tag-a", + "ComputedNameWithHost": "tag-a" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/is-owner", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "MachineKey": "mkey:86059abbaa34043eed3baaad18d166600355a72caa04d406a63db23c8c2d1c49", + "Peers": [{ + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }, { + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "AllowedIPs": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Endpoints": [ + "192.0.2.1:60009", + "198.51.100.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-b", "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222} + ]}, + "Created": "2026-10-20T13:41:19.99812632Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-b", + "ComputedNameWithHost": "own-b" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }, { + "IPProto": [6, 17, 1, 58], + "Srcs": [ + "100.115.149.80/32", + "100.91.17.52/32", + "fd7a:115c:a1e0::7128:9551/128", + "fd7a:115c:a1e0::a728:1135/128" + ], + "SrcCaps": null, + "Dsts": [{"Net": "100.69.123.71/32", "Ports": {"First": 0, "Last": 65535}}, { + "Net": "fd7a:115c:a1e0::b828:7b48/128", + "Ports": {"First": 0, "Last": 65535} + }], + "Caps": [] + }], + "PacketFilterRules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }, {"SrcIPs": [ + "100.115.149.80", + "100.91.17.52", + "fd7a:115c:a1e0::7128:9551", + "fd7a:115c:a1e0::a728:1135" + ], "DstPorts": [ + {"IP": "100.69.123.71", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::b828:7b48", "Ports": {"First": 0, "Last": 65535}} + ]}], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"3982058329734709": { + "ID": 3982058329734709, + "LoginName": "freya@example.com", + "DisplayName": "freya" + }, "4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }, "5609962921794417": { + "ID": 5609962921794417, + "LoginName": "tag-a.tail78f774.ts.net", + "DisplayName": "tag-a" + }} + }, "backend_state": "Running"}, "tag-b": { + "packet_filter_rules": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.79.219.39", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::2628:db28", "Ports": {"First": 0, "Last": 65535}} + ]}], + "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "100.79.219.39/32", "Ports": {"First": 0, "Last": 65535}}, + { + "Net": "fd7a:115c:a1e0::2628:db28/128", + "Ports": {"First": 0, "Last": 65535} + } + ], + "Caps": [] + }], + "netmap": { + "Cached": false, + "SelfNode": { + "ID": 6169742216312948, + "StableID": "n7xDNdfHBq11CNTRL", + "Name": "tag-b.tail78f774.ts.net.", + "User": 6169742216312948, + "Key": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Addresses": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "AllowedIPs": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "Hostinfo": { + "Hostname": "tag-b", + "RequestTags": ["tag:server"], + "Services": [{"Proto": "peerapi-dns-proxy", "Port": 1}] + }, + "Created": "2026-10-20T13:41:21.531227448Z", + "Tags": ["tag:server"], + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "tag-b", + "ComputedNameWithHost": "tag-b" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "MachineKey": "mkey:6a852bb4841c235040b9d9a75a9fc80f8dd2aa787b561e80d23639055f969f0f", + "Peers": [{ + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "100.79.219.39/32", "Ports": {"First": 0, "Last": 65535}}, + { + "Net": "fd7a:115c:a1e0::2628:db28/128", + "Ports": {"First": 0, "Last": 65535} + } + ], + "Caps": [] + }], + "PacketFilterRules": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.79.219.39", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::2628:db28", "Ports": {"First": 0, "Last": 65535}} + ]}], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }, "6169742216312948": { + "ID": 6169742216312948, + "LoginName": "tag-b.tail78f774.ts.net", + "DisplayName": "tag-b" + }} + }, + "backend_state": "Running" + }}, + "register": {"tag-a": [{ + "node_key": "{nodekey:3}", + "node_key_expired": false, + "machine_authorized": true, + "offset_ms": 3655 + }]}, + "frames": {"tag-a": [{"offset_ms": 3655, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Stream": true, + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "tag-a", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "RequestTags": ["tag:server"], + "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ], + "NetInfo": { + "MappingVariesByDestIP": false, + "WorkingIPv6": false, + "OSHasIPv6": true, + "WorkingUDP": true, + "WorkingICMPv4": false, + "UPnP": false, + "PMP": false, + "PCP": false, + "PreferredDERP": 14, + "DERPLatency": { + "1-v4": 0, + "10-v4": 0, + "12-v4": 0, + "13-v4": 0, + "14-v4": 0, + "15-v4": 0, + "16-v4": 0, + "17-v4": 0, + "18-v4": 0, + "19-v4": 0, + "2-v4": 0, + "20-v4": 0, + "21-v4": 0, + "22-v4": 0, + "23-v4": 0, + "24-v4": 0, + "25-v4": 0, + "26-v4": 0, + "27-v4": 0, + "28-v4": 0, + "4-v4": 0, + "6-v4": 0, + "7-v4": 0, + "8-v4": 0, + "9-v4": 0 + } + }, + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "EndpointTypes": [2, 1, 1, 1, 1, 1, 1, 1], + "DebugFlags": ["netstack"] + }}, {"offset_ms": 3655, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "tag-a", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "RequestTags": ["tag:server"], + "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ], + "NetInfo": { + "MappingVariesByDestIP": false, + "WorkingIPv6": false, + "OSHasIPv6": true, + "WorkingUDP": true, + "WorkingICMPv4": false, + "UPnP": false, + "PMP": false, + "PCP": false, + "PreferredDERP": 14, + "DERPLatency": { + "1-v4": 0, + "10-v4": 0, + "12-v4": 0, + "13-v4": 0, + "14-v4": 0, + "15-v4": 0, + "16-v4": 0, + "17-v4": 0, + "18-v4": 0, + "19-v4": 0, + "2-v4": 0, + "20-v4": 0, + "21-v4": 0, + "22-v4": 0, + "23-v4": 0, + "24-v4": 0, + "25-v4": 0, + "26-v4": 0, + "27-v4": 0, + "28-v4": 0, + "4-v4": 0, + "6-v4": 0, + "7-v4": 0, + "8-v4": 0, + "9-v4": 0 + } + }, + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "EndpointTypes": [2, 1, 1, 1, 1, 1, 1, 1], + "OmitPeers": true, + "DebugFlags": ["netstack"] + }}, {"offset_ms": 3655, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Stream": true, + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "tag-a", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "RequestTags": ["tag:server"], + "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ], + "NetInfo": { + "MappingVariesByDestIP": false, + "WorkingIPv6": false, + "OSHasIPv6": true, + "WorkingUDP": true, + "WorkingICMPv4": false, + "UPnP": false, + "PMP": false, + "PCP": false, + "PreferredDERP": 14, + "DERPLatency": { + "1-v4": 0, + "10-v4": 0, + "12-v4": 0, + "13-v4": 0, + "14-v4": 0, + "15-v4": 0, + "16-v4": 0, + "17-v4": 0, + "18-v4": 0, + "19-v4": 0, + "2-v4": 0, + "20-v4": 0, + "21-v4": 0, + "22-v4": 0, + "23-v4": 0, + "24-v4": 0, + "25-v4": 0, + "26-v4": 0, + "27-v4": 0, + "28-v4": 0, + "4-v4": 0, + "6-v4": 0, + "7-v4": 0, + "8-v4": 0, + "9-v4": 0 + } + }, + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "EndpointTypes": [2, 1, 1, 1, 1, 1, 1, 1], + "DebugFlags": ["netstack"] + }}, {"offset_ms": 3655, "response": { + "Node": { + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 5609962921794417, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "AllowedIPs": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "Hostinfo": {"Hostname": "tag-a", "RequestTags": ["tag:server"], "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Tags": ["tag:server"], + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/is-owner": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + } + }, + "PeersChanged": [{ + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Endpoints": [ + "192.0.2.1:60009", + "198.51.100.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ], + "DERP": "127.3.3.40:14", + "Hostinfo": {"OS": "linux", "Hostname": "own-b", "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222} + ]}, + "Created": "2026-10-20T13:41:19.99812632Z", + "Cap": 142, + "Online": true + }, { + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "DERP": "127.3.3.40:14", + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true + }], + "DNSConfig": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "Domain": "odin@example.com", + "PacketFilter": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }, {"SrcIPs": [ + "100.115.149.80", + "100.91.17.52", + "fd7a:115c:a1e0::7128:9551", + "fd7a:115c:a1e0::a728:1135" + ], "DstPorts": [ + {"IP": "100.69.123.71", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::b828:7b48", "Ports": {"First": 0, "Last": 65535}} + ]}], + "UserProfiles": [{ + "ID": 3982058329734709, + "LoginName": "freya@example.com", + "DisplayName": "freya" + }, { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }, { + "ID": 5609962921794417, + "LoginName": "tag-a.tail78f774.ts.net", + "DisplayName": "tag-a" + }], + "SSHPolicy": {"rules": []}, + "ControlTime": "2026-10-20T13:43:28.595103482Z" + }, "dropped": ["DERPMap", "ControlDialPlan"]}]} + }, { + "name": "S2", + "at": "2026-10-20T13:44:04.660059601Z", + "note": "never held: tag-a admits own-b: true; tag-a sees own-b: true; timeout: own-b reaches nothing: not within 1m0s", + "result": "timeout", + "actions": [{ + "kind": "api", + "principal": "admin", + "method": "GET", + "path": "/tailnet/-/users", + "status": 200, + "resp_header": {"Content-Type": "application/json"}, + "response": {"users": [{ + "created": "2025-01-06T15:34:57.211063713Z", + "currentlyConnected": true, + "deviceCount": 1, + "displayName": "odin@example.com", + "id": "{user:odin}", + "lastSeen": "2026-10-20T13:44:08.673507352Z", + "loginName": "odin@example.com", + "profilePicUrl": "", + "role": "owner", + "status": "active", + "tailnetId": "{tailnet}", + "type": "member" + }, { + "created": "2026-02-20T13:16:07.187446882Z", + "displayName": "thor@example.org", + "id": "{user:thor}", + "lastSeen": "2026-10-17T16:47:43Z", + "loginName": "thor@example.org", + "profilePicUrl": "", + "role": "admin", + "status": "active", + "tailnetId": "{tailnet}", + "type": "member" + }, { + "created": "2026-02-20T13:19:42.5861759Z", + "currentlyConnected": true, + "deviceCount": 1, + "displayName": "freya@example.com", + "id": "{user:freya}", + "lastSeen": "2026-10-20T13:44:08.673507352Z", + "loginName": "freya@example.com", + "profilePicUrl": "", + "role": "admin", + "status": "active", + "tailnetId": "{tailnet}", + "type": "member" + }]}, + "offset_ms": 4003 + }, { + "kind": "role", + "principal": "admin", + "method": "POST", + "path": "/users/{user:freya}/role", + "header": {"Content-Type": "application/json"}, + "body": {"role": "member"}, + "status": 200, + "resp_header": {"Content-Type": "application/json"}, + "response": null, + "offset_ms": 4022 + }, { + "kind": "wait", + "args": ["until", "own-b reaches nothing", "1m0s"], + "offset_ms": 4040 + }, {"kind": "wait", "args": ["quiet", "15s"], "offset_ms": 64130}, { + "kind": "api", + "principal": "admin", + "method": "GET", + "path": "/tailnet/-/users", + "status": 200, + "resp_header": {"Content-Type": "application/json"}, + "response": {"users": [{ + "created": "2025-01-06T15:34:57.211063713Z", + "currentlyConnected": true, + "deviceCount": 1, + "displayName": "odin@example.com", + "id": "{user:odin}", + "lastSeen": "2026-10-20T13:45:35.827521589Z", + "loginName": "odin@example.com", + "profilePicUrl": "", + "role": "owner", + "status": "active", + "tailnetId": "{tailnet}", + "type": "member" + }, { + "created": "2026-02-20T13:16:07.187446882Z", + "displayName": "thor@example.org", + "id": "{user:thor}", + "lastSeen": "2026-10-17T16:47:43Z", + "loginName": "thor@example.org", + "profilePicUrl": "", + "role": "admin", + "status": "active", + "tailnetId": "{tailnet}", + "type": "member" + }, { + "created": "2026-02-20T13:19:42.5861759Z", + "currentlyConnected": true, + "deviceCount": 1, + "displayName": "freya@example.com", + "id": "{user:freya}", + "lastSeen": "2026-10-20T13:45:35.827521589Z", + "loginName": "freya@example.com", + "profilePicUrl": "", + "role": "member", + "status": "active", + "tailnetId": "{tailnet}", + "type": "member" + }]}, + "offset_ms": 91157 + }], + "captures": {"own-a": {"packet_filter_rules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], "netmap": { + "Cached": false, + "SelfNode": { + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "Hostinfo": {"Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/is-admin": null, + "https://tailscale.com/cap/is-owner": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/is-admin", + "https://tailscale.com/cap/is-owner", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "MachineKey": "mkey:e85ef6426e0397d36338f97a182db866ea147e69511cee0d3204c1969cce5533", + "Peers": [{ + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "AllowedIPs": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Endpoints": [ + "192.0.2.1:60009", + "198.51.100.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-b", "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222} + ]}, + "Created": "2026-10-20T13:41:19.99812632Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-b", + "ComputedNameWithHost": "own-b" + }, { + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "AllowedIPs": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "tag-a", "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911} + ]}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true, + "ComputedName": "tag-a", + "ComputedNameWithHost": "tag-a" + }, { + "ID": 6169742216312948, + "StableID": "n7xDNdfHBq11CNTRL", + "Name": "tag-b.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Addresses": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "AllowedIPs": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "Endpoints": [ + "192.0.2.1:58884", + "198.51.100.1:58884", + "198.51.100.2:58884", + "198.51.100.3:58884", + "198.51.100.4:58884", + "198.51.100.5:58884", + "198.51.100.6:58884", + "198.51.100.7:58884" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "tag-b", "Services": [ + {"Proto": "peerapi4", "Port": 47696}, + {"Proto": "peerapi6", "Port": 47696} + ]}, + "Created": "2026-10-20T13:41:21.531227448Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true, + "ComputedName": "tag-b", + "ComputedNameWithHost": "tag-b" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], + "PacketFilterRules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"1260082990019555": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "3982058329734709": { + "ID": 3982058329734709, + "LoginName": "freya@example.com", + "DisplayName": "freya" + }, "4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }} + }, "backend_state": "Running"}, "own-b": {"packet_filter_rules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], "netmap": { + "Cached": false, + "SelfNode": { + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "AllowedIPs": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Endpoints": [ + "192.0.2.1:60009", + "198.51.100.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ], + "Hostinfo": {"Hostname": "own-b", "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:19.99812632Z", + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "own-b", + "ComputedNameWithHost": "own-b" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "MachineKey": "mkey:19a8b80433d0d07cdef41943f8f47a1131b9d49bd95519693a32cbcaa6533e43", + "Peers": [{ + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], + "PacketFilterRules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"3982058329734709": { + "ID": 3982058329734709, + "LoginName": "freya@example.com", + "DisplayName": "freya" + }, "4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }} + }, "backend_state": "Running"}, "tag-a": {"packet_filter_rules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }, {"SrcIPs": [ + "100.115.149.80", + "100.91.17.52", + "fd7a:115c:a1e0::7128:9551", + "fd7a:115c:a1e0::a728:1135" + ], "DstPorts": [ + {"IP": "100.69.123.71", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::b828:7b48", "Ports": {"First": 0, "Last": 65535}} + ]}], "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }, { + "IPProto": [6, 17, 1, 58], + "Srcs": [ + "100.115.149.80/32", + "100.91.17.52/32", + "fd7a:115c:a1e0::7128:9551/128", + "fd7a:115c:a1e0::a728:1135/128" + ], + "SrcCaps": null, + "Dsts": [{"Net": "100.69.123.71/32", "Ports": {"First": 0, "Last": 65535}}, { + "Net": "fd7a:115c:a1e0::b828:7b48/128", + "Ports": {"First": 0, "Last": 65535} + }], + "Caps": [] + }], "netmap": { + "Cached": false, + "SelfNode": { + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 5609962921794417, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "AllowedIPs": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "Hostinfo": {"Hostname": "tag-a", "RequestTags": ["tag:server"], "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Tags": ["tag:server"], + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/is-owner": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "tag-a", + "ComputedNameWithHost": "tag-a" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/is-owner", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "MachineKey": "mkey:86059abbaa34043eed3baaad18d166600355a72caa04d406a63db23c8c2d1c49", + "Peers": [{ + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }, { + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "AllowedIPs": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Endpoints": [ + "192.0.2.1:60009", + "198.51.100.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-b", "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222} + ]}, + "Created": "2026-10-20T13:41:19.99812632Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-b", + "ComputedNameWithHost": "own-b" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }, { + "IPProto": [6, 17, 1, 58], + "Srcs": [ + "100.115.149.80/32", + "100.91.17.52/32", + "fd7a:115c:a1e0::7128:9551/128", + "fd7a:115c:a1e0::a728:1135/128" + ], + "SrcCaps": null, + "Dsts": [{"Net": "100.69.123.71/32", "Ports": {"First": 0, "Last": 65535}}, { + "Net": "fd7a:115c:a1e0::b828:7b48/128", + "Ports": {"First": 0, "Last": 65535} + }], + "Caps": [] + }], + "PacketFilterRules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }, {"SrcIPs": [ + "100.115.149.80", + "100.91.17.52", + "fd7a:115c:a1e0::7128:9551", + "fd7a:115c:a1e0::a728:1135" + ], "DstPorts": [ + {"IP": "100.69.123.71", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::b828:7b48", "Ports": {"First": 0, "Last": 65535}} + ]}], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"3982058329734709": { + "ID": 3982058329734709, + "LoginName": "freya@example.com", + "DisplayName": "freya" + }, "4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }, "5609962921794417": { + "ID": 5609962921794417, + "LoginName": "tag-a.tail78f774.ts.net", + "DisplayName": "tag-a" + }} + }, "backend_state": "Running"}, "tag-b": { + "packet_filter_rules": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.79.219.39", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::2628:db28", "Ports": {"First": 0, "Last": 65535}} + ]}], + "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "100.79.219.39/32", "Ports": {"First": 0, "Last": 65535}}, + { + "Net": "fd7a:115c:a1e0::2628:db28/128", + "Ports": {"First": 0, "Last": 65535} + } + ], + "Caps": [] + }], + "netmap": { + "Cached": false, + "SelfNode": { + "ID": 6169742216312948, + "StableID": "n7xDNdfHBq11CNTRL", + "Name": "tag-b.tail78f774.ts.net.", + "User": 6169742216312948, + "Key": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Addresses": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "AllowedIPs": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "Hostinfo": { + "Hostname": "tag-b", + "RequestTags": ["tag:server"], + "Services": [{"Proto": "peerapi-dns-proxy", "Port": 1}] + }, + "Created": "2026-10-20T13:41:21.531227448Z", + "Tags": ["tag:server"], + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "tag-b", + "ComputedNameWithHost": "tag-b" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "MachineKey": "mkey:6a852bb4841c235040b9d9a75a9fc80f8dd2aa787b561e80d23639055f969f0f", + "Peers": [{ + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "100.79.219.39/32", "Ports": {"First": 0, "Last": 65535}}, + { + "Net": "fd7a:115c:a1e0::2628:db28/128", + "Ports": {"First": 0, "Last": 65535} + } + ], + "Caps": [] + }], + "PacketFilterRules": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.79.219.39", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::2628:db28", "Ports": {"First": 0, "Last": 65535}} + ]}], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }, "6169742216312948": { + "ID": 6169742216312948, + "LoginName": "tag-b.tail78f774.ts.net", + "DisplayName": "tag-b" + }} + }, + "backend_state": "Running" + }}, + "frames": {"tag-a": [{"offset_ms": 3339, "response": {"KeepAlive": true}}]} + }, { + "name": "S2-reconnect", + "at": "2026-10-20T13:45:35.837068146Z", + "note": "landed after 9s", + "result": "observed", + "actions": [{ + "kind": "down", + "node": "tag-a", + "args": ["down"], + "exit": 0, + "offset_ms": 4006 + }, { + "kind": "up", + "node": "tag-a", + "args": ["up"], + "exit": 0, + "offset_ms": 4046 + }, { + "kind": "wait", + "args": ["until", "tag-a's view: own-b reaches nothing", "1m0s"], + "offset_ms": 4065 + }, {"kind": "wait", "args": ["quiet", "15s"], "offset_ms": 13083}], + "captures": {"own-a": {"packet_filter_rules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], "netmap": { + "Cached": false, + "SelfNode": { + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "Hostinfo": {"Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/is-admin": null, + "https://tailscale.com/cap/is-owner": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/is-admin", + "https://tailscale.com/cap/is-owner", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "MachineKey": "mkey:e85ef6426e0397d36338f97a182db866ea147e69511cee0d3204c1969cce5533", + "Peers": [{ + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "AllowedIPs": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Endpoints": [ + "192.0.2.1:60009", + "198.51.100.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-b", "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222} + ]}, + "Created": "2026-10-20T13:41:19.99812632Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-b", + "ComputedNameWithHost": "own-b" + }, { + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "AllowedIPs": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "tag-a", "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911} + ]}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true, + "ComputedName": "tag-a", + "ComputedNameWithHost": "tag-a" + }, { + "ID": 6169742216312948, + "StableID": "n7xDNdfHBq11CNTRL", + "Name": "tag-b.tail78f774.ts.net.", + "User": 1260082990019555, + "Key": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Addresses": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "AllowedIPs": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "Endpoints": [ + "192.0.2.1:58884", + "198.51.100.1:58884", + "198.51.100.2:58884", + "198.51.100.3:58884", + "198.51.100.4:58884", + "198.51.100.5:58884", + "198.51.100.6:58884", + "198.51.100.7:58884" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "tag-b", "Services": [ + {"Proto": "peerapi4", "Port": 47696}, + {"Proto": "peerapi6", "Port": 47696} + ]}, + "Created": "2026-10-20T13:41:21.531227448Z", + "Cap": 142, + "Tags": ["tag:server"], + "Online": true, + "ComputedName": "tag-b", + "ComputedNameWithHost": "tag-b" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], + "PacketFilterRules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"1260082990019555": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "3982058329734709": { + "ID": 3982058329734709, + "LoginName": "freya@example.com", + "DisplayName": "freya" + }, "4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }} + }, "backend_state": "Running"}, "own-b": {"packet_filter_rules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], "netmap": { + "Cached": false, + "SelfNode": { + "ID": 769496275498017, + "StableID": "nvuGr1NW1711CNTRL", + "Name": "own-b.tail78f774.ts.net.", + "User": 3982058329734709, + "Key": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:6064556cacea722303d91209723c2d58015cf04b8af2948bb7235dc4d2602513", + "Addresses": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "AllowedIPs": ["100.91.17.52/32", "fd7a:115c:a1e0::a728:1135/128"], + "Endpoints": [ + "192.0.2.1:60009", + "198.51.100.1:60009", + "198.51.100.2:60009", + "198.51.100.3:60009", + "198.51.100.4:60009", + "198.51.100.5:60009", + "198.51.100.6:60009", + "198.51.100.7:60009" + ], + "Hostinfo": {"Hostname": "own-b", "Services": [ + {"Proto": "peerapi4", "Port": 53222}, + {"Proto": "peerapi6", "Port": 53222}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:19.99812632Z", + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "own-b", + "ComputedNameWithHost": "own-b" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:4e80f23d5d54785dabf0fc9ff9c548a69dd47dfc456015e43ef8db4da71b1134", + "MachineKey": "mkey:19a8b80433d0d07cdef41943f8f47a1131b9d49bd95519693a32cbcaa6533e43", + "Peers": [{ + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}} + ], + "Caps": [] + }], + "PacketFilterRules": [{ + "SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], + "DstPorts": [{"IP": "*", "Ports": {"First": 0, "Last": 65535}}] + }], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"3982058329734709": { + "ID": 3982058329734709, + "LoginName": "freya@example.com", + "DisplayName": "freya" + }, "4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }} + }, "backend_state": "Running"}, "tag-a": { + "packet_filter_rules": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.69.123.71", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::b828:7b48", "Ports": {"First": 0, "Last": 65535}} + ]}], + "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "100.69.123.71/32", "Ports": {"First": 0, "Last": 65535}}, + { + "Net": "fd7a:115c:a1e0::b828:7b48/128", + "Ports": {"First": 0, "Last": 65535} + } + ], + "Caps": [] + }], + "netmap": { + "Cached": false, + "SelfNode": { + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 5609962921794417, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "AllowedIPs": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "Hostinfo": {"Hostname": "tag-a", "RequestTags": ["tag:server"], "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Tags": ["tag:server"], + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/is-owner": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "tag-a", + "ComputedNameWithHost": "tag-a" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/is-owner", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "MachineKey": "mkey:86059abbaa34043eed3baaad18d166600355a72caa04d406a63db23c8c2d1c49", + "Peers": [{ + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "100.69.123.71/32", "Ports": {"First": 0, "Last": 65535}}, + { + "Net": "fd7a:115c:a1e0::b828:7b48/128", + "Ports": {"First": 0, "Last": 65535} + } + ], + "Caps": [] + }], + "PacketFilterRules": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.69.123.71", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::b828:7b48", "Ports": {"First": 0, "Last": 65535}} + ]}], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }, "5609962921794417": { + "ID": 5609962921794417, + "LoginName": "tag-a.tail78f774.ts.net", + "DisplayName": "tag-a" + }} + }, + "backend_state": "Running" + }, "tag-b": { + "packet_filter_rules": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.79.219.39", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::2628:db28", "Ports": {"First": 0, "Last": 65535}} + ]}], + "packet_filter_matches": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "100.79.219.39/32", "Ports": {"First": 0, "Last": 65535}}, + { + "Net": "fd7a:115c:a1e0::2628:db28/128", + "Ports": {"First": 0, "Last": 65535} + } + ], + "Caps": [] + }], + "netmap": { + "Cached": false, + "SelfNode": { + "ID": 6169742216312948, + "StableID": "n7xDNdfHBq11CNTRL", + "Name": "tag-b.tail78f774.ts.net.", + "User": 6169742216312948, + "Key": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "DiscoKey": "discokey:21f29a1797dd432180d02f299cc9c9eb9098b5ce8d5d00a076387d39ba116849", + "Addresses": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "AllowedIPs": ["100.79.219.39/32", "fd7a:115c:a1e0::2628:db28/128"], + "Hostinfo": { + "Hostname": "tag-b", + "RequestTags": ["tag:server"], + "Services": [{"Proto": "peerapi-dns-proxy", "Port": 1}] + }, + "Created": "2026-10-20T13:41:21.531227448Z", + "Tags": ["tag:server"], + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + }, + "ComputedName": "tag-b", + "ComputedNameWithHost": "tag-b" + }, + "AllCaps": [ + "default-auto-update", + "https://tailscale.com/cap/file-sharing", + "https://tailscale.com/cap/ssh", + "https://tailscale.com/cap/tailnet-lock", + "probe-udp-lifetime", + "ssh-behavior-v1", + "ssh-env-vars", + "store-appc-routes", + "tailnet-display-name" + ], + "NodeKey": "nodekey:5ef48140404ca9e8c1843f9b8de15dff382d89cb42f759e3e66bdd7c26cfdb27", + "MachineKey": "mkey:6a852bb4841c235040b9d9a75a9fc80f8dd2aa787b561e80d23639055f969f0f", + "Peers": [{ + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "AllowedIPs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "HomeDERP": 14, + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true, + "ComputedName": "own-a", + "ComputedNameWithHost": "own-a" + }], + "DNS": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "PacketFilter": [{ + "IPProto": [6, 17, 1, 58], + "Srcs": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "SrcCaps": null, + "Dsts": [ + {"Net": "0.0.0.0/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "::/0", "Ports": {"First": 0, "Last": 65535}}, + {"Net": "100.79.219.39/32", "Ports": {"First": 0, "Last": 65535}}, + { + "Net": "fd7a:115c:a1e0::2628:db28/128", + "Ports": {"First": 0, "Last": 65535} + } + ], + "Caps": [] + }], + "PacketFilterRules": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.79.219.39", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::2628:db28", "Ports": {"First": 0, "Last": 65535}} + ]}], + "SSHPolicy": {"rules": []}, + "CollectServices": false, + "DERPMap": null, + "DisplayMessages": null, + "TKAEnabled": false, + "TKAHead": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Domain": "odin@example.com", + "DomainAuditLogID": "", + "UserProfiles": {"4156223528223174": { + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }, "6169742216312948": { + "ID": 6169742216312948, + "LoginName": "tag-b.tail78f774.ts.net", + "DisplayName": "tag-b" + }} + }, + "backend_state": "Running" + }}, + "register": {"tag-a": [{ + "node_key": "{nodekey:3}", + "node_key_expired": false, + "machine_authorized": true, + "offset_ms": 3162 + }]}, + "frames": {"tag-a": [{"offset_ms": 3162, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Stream": true, + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "tag-a", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "RequestTags": ["tag:server"], + "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ], + "NetInfo": { + "MappingVariesByDestIP": false, + "WorkingIPv6": false, + "OSHasIPv6": true, + "WorkingUDP": true, + "WorkingICMPv4": false, + "UPnP": false, + "PMP": false, + "PCP": false, + "PreferredDERP": 14, + "DERPLatency": { + "1-v4": 0, + "10-v4": 0, + "12-v4": 0, + "13-v4": 0, + "14-v4": 0, + "15-v4": 0, + "16-v4": 0, + "17-v4": 0, + "18-v4": 0, + "19-v4": 0, + "2-v4": 0, + "20-v4": 0, + "21-v4": 0, + "22-v4": 0, + "23-v4": 0, + "24-v4": 0, + "25-v4": 0, + "26-v4": 0, + "27-v4": 0, + "28-v4": 0, + "4-v4": 0, + "6-v4": 0, + "7-v4": 0, + "8-v4": 0, + "9-v4": 0 + } + }, + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "EndpointTypes": [2, 1, 1, 1, 1, 1, 1, 1], + "DebugFlags": ["netstack"] + }}, {"offset_ms": 3162, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Stream": true, + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "tag-a", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "RequestTags": ["tag:server"], + "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ], + "NetInfo": { + "MappingVariesByDestIP": false, + "WorkingIPv6": false, + "OSHasIPv6": true, + "WorkingUDP": true, + "WorkingICMPv4": false, + "UPnP": false, + "PMP": false, + "PCP": false, + "PreferredDERP": 14, + "DERPLatency": { + "1-v4": 0, + "10-v4": 0, + "12-v4": 0, + "13-v4": 0, + "14-v4": 0, + "15-v4": 0, + "16-v4": 0, + "17-v4": 0, + "18-v4": 0, + "19-v4": 0, + "2-v4": 0, + "20-v4": 0, + "21-v4": 0, + "22-v4": 0, + "23-v4": 0, + "24-v4": 0, + "25-v4": 0, + "26-v4": 0, + "27-v4": 0, + "28-v4": 0, + "4-v4": 0, + "6-v4": 0, + "7-v4": 0, + "8-v4": 0, + "9-v4": 0 + } + }, + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "EndpointTypes": [2, 1, 1, 1, 1, 1, 1, 1], + "DebugFlags": ["netstack"] + }}, {"offset_ms": 3162, "request": { + "Version": 142, + "Compress": "zstd", + "KeepAlive": true, + "NodeKey": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Hostinfo": { + "IPNVersion": "1.102.5-ERR-BuildInfo", + "BackendLogID": "anonymized", + "OS": "linux", + "OSVersion": "anonymized", + "Container": false, + "Distro": "anonymized", + "DistroVersion": "anonymized", + "DistroCodeName": "anonymized", + "Desktop": false, + "Hostname": "tag-a", + "NoLogsNoSupport": true, + "Machine": "anonymized", + "GoArch": "amd64", + "GoArchVar": "v1", + "GoVersion": "go1.27.1", + "RequestTags": ["tag:server"], + "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ], + "NetInfo": { + "MappingVariesByDestIP": false, + "WorkingIPv6": false, + "OSHasIPv6": true, + "WorkingUDP": true, + "WorkingICMPv4": false, + "UPnP": false, + "PMP": false, + "PCP": false, + "PreferredDERP": 14, + "DERPLatency": { + "1-v4": 0, + "10-v4": 0, + "12-v4": 0, + "13-v4": 0, + "14-v4": 0, + "15-v4": 0, + "16-v4": 0, + "17-v4": 0, + "18-v4": 0, + "19-v4": 0, + "2-v4": 0, + "20-v4": 0, + "21-v4": 0, + "22-v4": 0, + "23-v4": 0, + "24-v4": 0, + "25-v4": 0, + "26-v4": 0, + "27-v4": 0, + "28-v4": 0, + "4-v4": 0, + "6-v4": 0, + "7-v4": 0, + "8-v4": 0, + "9-v4": 0 + } + }, + "Userspace": true, + "UserspaceRouter": true, + "AppConnector": false, + "StateEncrypted": false + }, + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "EndpointTypes": [2, 1, 1, 1, 1, 1, 1, 1], + "OmitPeers": true, + "DebugFlags": ["netstack"] + }}, {"offset_ms": 3162, "response": { + "Node": { + "ID": 5609962921794417, + "StableID": "ntL3zMDmok11CNTRL", + "Name": "tag-a.tail78f774.ts.net.", + "User": 5609962921794417, + "Key": "nodekey:0567d5394920160ead08b41d4ef9aa312e1b6d19ac210f9bf7e92644b8857b47", + "DiscoKey": "discokey:bf6c0da0f6e5ba02a7c31bc9ade80356ac0afe9061e8ca32411a562502c69337", + "Addresses": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "AllowedIPs": ["100.69.123.71/32", "fd7a:115c:a1e0::b828:7b48/128"], + "Endpoints": [ + "192.0.2.1:35303", + "198.51.100.1:35303", + "198.51.100.2:35303", + "198.51.100.3:35303", + "198.51.100.4:35303", + "198.51.100.5:35303", + "198.51.100.6:35303", + "198.51.100.7:35303" + ], + "Hostinfo": {"Hostname": "tag-a", "RequestTags": ["tag:server"], "Services": [ + {"Proto": "peerapi4", "Port": 57911}, + {"Proto": "peerapi6", "Port": 57911}, + {"Proto": "peerapi-dns-proxy", "Port": 1} + ]}, + "Created": "2026-10-20T13:41:20.818879489Z", + "Tags": ["tag:server"], + "MachineAuthorized": true, + "CapMap": { + "default-auto-update": [false], + "https://tailscale.com/cap/file-sharing": null, + "https://tailscale.com/cap/is-owner": null, + "https://tailscale.com/cap/ssh": null, + "https://tailscale.com/cap/tailnet-lock": null, + "probe-udp-lifetime": null, + "ssh-behavior-v1": null, + "ssh-env-vars": null, + "store-appc-routes": null, + "tailnet-display-name": ["odin@example.com"] + } + }, + "PeersChanged": [{ + "ID": 6604014731421167, + "StableID": "nNQvRaGyZt11CNTRL", + "Name": "own-a.tail78f774.ts.net.", + "User": 4156223528223174, + "Key": "nodekey:5687af916157dc8656ed9d4698498c3ad3f89dae51c0fca18694d87071b39550", + "KeyExpiry": "2027-04-18T13:41:19Z", + "DiscoKey": "discokey:93b7bae706e9147aca26710d53f0b3d9ea28d37e04b966011a197da0db543115", + "Addresses": ["100.115.149.80/32", "fd7a:115c:a1e0::7128:9551/128"], + "Endpoints": [ + "192.0.2.1:45536", + "198.51.100.1:45536", + "198.51.100.2:45536", + "198.51.100.3:45536", + "198.51.100.4:45536", + "198.51.100.5:45536", + "198.51.100.6:45536", + "198.51.100.7:45536" + ], + "DERP": "127.3.3.40:14", + "Hostinfo": {"OS": "linux", "Hostname": "own-a", "Services": [ + {"Proto": "peerapi4", "Port": 41136}, + {"Proto": "peerapi6", "Port": 41136} + ]}, + "Created": "2026-10-20T13:41:19.292442823Z", + "Cap": 142, + "Online": true + }], + "DNSConfig": {"ExitNodeFilteredSet": [".ts.net", ".tailscale.net"]}, + "Domain": "odin@example.com", + "PacketFilter": [{"SrcIPs": ["100.115.149.80", "fd7a:115c:a1e0::7128:9551"], "DstPorts": [ + {"IP": "*", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "100.69.123.71", "Ports": {"First": 0, "Last": 65535}}, + {"IP": "fd7a:115c:a1e0::b828:7b48", "Ports": {"First": 0, "Last": 65535}} + ]}], + "UserProfiles": [{ + "ID": 4156223528223174, + "LoginName": "odin@example.com", + "DisplayName": "odin" + }, { + "ID": 5609962921794417, + "LoginName": "tag-a.tail78f774.ts.net", + "DisplayName": "tag-a" + }], + "SSHPolicy": {"rules": []}, + "ControlTime": "2026-10-20T13:45:39.927291878Z" + }, "dropped": ["DERPMap", "ControlDialPlan"]}]} + }] +} diff --git a/hscontrol/servertest/via_ha_compat_test.go b/hscontrol/servertest/via_ha_compat_test.go index e32c06dc8..97f24f405 100644 --- a/hscontrol/servertest/via_ha_compat_test.go +++ b/hscontrol/servertest/via_ha_compat_test.go @@ -879,7 +879,7 @@ func (r *stepReplay) apply(t *testing.T, step testcapture.Step) map[string]error } case "restart", "start", "kill", "shutdown", "logout", "advertise", "set_hostname", - "break_tcp_conns", "rotate_disco_key", "cli", "disconnect_control": + "break_tcp_conns", "rotate_disco_key", "cli", "disconnect_control", "down", "up": r.daemon(ctx, t, step.Name, a) case "retire": @@ -957,10 +957,10 @@ func (r *stepReplay) daemon(ctx context.Context, t *testing.T, stepName string, r.hostinfo[a.Node].Hostname = strings.TrimPrefix(args, "set --hostname=") r.sendHostinfo(ctx, t, a.Node) - case a.Kind == "cli" && args == "down": + case a.Kind == "down", a.Kind == "cli" && args == "down": cl.Disconnect(t) - case a.Kind == "cli" && args == "up": + case a.Kind == "up", a.Kind == "cli" && args == "up": // tailscaled registers again on its node key, then polls. require.NoError(t, cl.ReloginAndPoll(ctx), "%s: up", stepName)