Files
headscale/hscontrol/policy/v2/testdata/grant_results/GRANT-F2.json
Kristoffer Dalby 995ed0187c policy/v2: add advertised routes to compat test topologies
Add routable_ips and approved_routes fields to the node topology
definitions in all golden test files. These represent the subnet
routes actually advertised by nodes on the Tailscale SaaS network
during data capture:

  Routes topology (92 files, 6 router nodes):
    big-router:     10.0.0.0/8
    subnet-router:  10.33.0.0/16
    ha-router1:     192.168.1.0/24
    ha-router2:     192.168.1.0/24
    multi-router:   172.16.0.0/24
    exit-node:      0.0.0.0/0, ::/0

  ACL topology (199 files, 1 router node):
    subnet-router:  10.33.0.0/16

  Grants topology (203 files, 1 router node):
    subnet-router:  10.33.0.0/16

The route assignments were deduced from the golden data by analyzing
which router nodes receive FilterRules for which destination CIDRs
across all test files, and cross-referenced with the MTS setup
script (setup_grant_nodes.sh).

Updates #2180
2026-04-01 14:10:42 +01:00

907 lines
36 KiB
JSON

{
"test_id": "GRANT-F2",
"timestamp": "2026-02-23T00:34:04Z",
"propagation_wait_seconds": 15,
"input": {
"policy_file": "/home/kradalby/acl-explore/grant_policies/grant_f2.json",
"full_policy": {
"groups": {
"group:admins": ["kratail2tid@passkey"],
"group:developers": ["kristoffer@dalby.cc", "kratail2tid@passkey"],
"group:monitors": ["monitorpasskeykradalby@passkey"],
"group:empty": []
},
"tagOwners": {
"tag:server": ["kratail2tid@passkey"],
"tag:prod": ["kratail2tid@passkey"],
"tag:client": ["kratail2tid@passkey"],
"tag:router": ["kratail2tid@passkey"],
"tag:exit": ["kratail2tid@passkey"]
},
"hosts": {
"webserver": "100.108.74.26",
"prodbox": "100.103.8.15",
"internal": "10.0.0.0/8"
},
"autoApprovers": {
"routes": {
"10.33.0.0/16": ["tag:router"],
"0.0.0.0/0": ["tag:exit"],
"::/0": ["tag:exit"]
}
},
"grants": [
{
"src": ["autogroup:member"],
"dst": ["tag:server"],
"ip": ["*"],
"app": {
"example.com/cap/test": [
{
"role": "admin"
}
]
}
}
]
},
"grants_section": [
{
"src": ["autogroup:member"],
"dst": ["tag:server"],
"ip": ["*"],
"app": {
"example.com/cap/test": [
{
"role": "admin"
}
]
}
}
],
"api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl",
"api_method": "POST",
"api_response_code": 200
},
"topology": {
"nodes": {
"exit-node": {
"mts_name": "exit-node",
"socket": "/home/kradalby/.config/multi-tailscale-dev/exit-node/tailscaled.sock",
"hostname": "exit-node",
"user_id": 4041918547170221,
"tags": ["tag:exit"],
"ipv4": "100.85.66.106",
"ipv6": "fd7a:115c:a1e0::7c37:426a"
},
"subnet-router": {
"mts_name": "subnet-router",
"socket": "/home/kradalby/.config/multi-tailscale-dev/subnet-router/tailscaled.sock",
"hostname": "subnet-router",
"user_id": 7489538288452506,
"tags": ["tag:router"],
"ipv4": "100.92.142.61",
"ipv6": "fd7a:115c:a1e0::3e37:8e3d",
"routable_ips": ["10.33.0.0/16"],
"approved_routes": ["10.33.0.0/16"]
},
"tagged-client": {
"mts_name": "tagged-client",
"socket": "/home/kradalby/.config/multi-tailscale-dev/tagged-client/tailscaled.sock",
"hostname": "tagged-client",
"user_id": 4031348162889210,
"tags": ["tag:client"],
"ipv4": "100.83.200.69",
"ipv6": "fd7a:115c:a1e0::c537:c845"
},
"tagged-prod": {
"mts_name": "tagged-prod",
"socket": "/home/kradalby/.config/multi-tailscale-dev/tagged-prod/tailscaled.sock",
"hostname": "tagged-prod",
"user_id": 301794218943819,
"tags": ["tag:prod"],
"ipv4": "100.103.8.15",
"ipv6": "fd7a:115c:a1e0::5b37:80f"
},
"tagged-server": {
"mts_name": "tagged-server",
"socket": "/home/kradalby/.config/multi-tailscale-dev/tagged-server/tailscaled.sock",
"hostname": "tagged-server",
"user_id": 1440249486084758,
"tags": ["tag:server"],
"ipv4": "100.108.74.26",
"ipv6": "fd7a:115c:a1e0::b901:4a87"
},
"user-kris": {
"mts_name": "user-kris",
"socket": "/home/kradalby/.config/multi-tailscale-dev/user-kris/tailscaled.sock",
"hostname": "user-kris",
"user_id": 4538565228176803,
"tags": [],
"ipv4": "100.110.121.96",
"ipv6": "fd7a:115c:a1e0::1737:7960"
},
"user-mon": {
"mts_name": "user-mon",
"socket": "/home/kradalby/.config/multi-tailscale-dev/user-mon/tailscaled.sock",
"hostname": "user-mon",
"user_id": 3982058329734709,
"tags": [],
"ipv4": "100.103.90.82",
"ipv6": "fd7a:115c:a1e0::9e37:5a52"
},
"user1": {
"mts_name": "user1",
"socket": "/home/kradalby/.config/multi-tailscale-dev/user1/tailscaled.sock",
"hostname": "user1",
"user_id": 4156223528223174,
"tags": [],
"ipv4": "100.90.199.68",
"ipv6": "fd7a:115c:a1e0::2d01:c747"
}
}
},
"captures": {
"exit-node": {
"commands": {
"packet_filter_rules": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/exit-node/tailscaled.sock debug localapi POST debug-packet-filter-rules",
"packet_filter_matches": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/exit-node/tailscaled.sock debug localapi POST debug-packet-filter-matches"
},
"packet_filter_rules": null,
"packet_filter_matches": [],
"whois": {
"100.92.142.61": {
"peer_name": "subnet-router",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/exit-node/tailscaled.sock whois --json 100.92.142.61",
"response": null
},
"100.83.200.69": {
"peer_name": "tagged-client",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/exit-node/tailscaled.sock whois --json 100.83.200.69",
"response": null
},
"100.103.8.15": {
"peer_name": "tagged-prod",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/exit-node/tailscaled.sock whois --json 100.103.8.15",
"response": null
},
"100.108.74.26": {
"peer_name": "tagged-server",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/exit-node/tailscaled.sock whois --json 100.108.74.26",
"response": null
},
"100.110.121.96": {
"peer_name": "user-kris",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/exit-node/tailscaled.sock whois --json 100.110.121.96",
"response": null
},
"100.103.90.82": {
"peer_name": "user-mon",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/exit-node/tailscaled.sock whois --json 100.103.90.82",
"response": null
},
"100.90.199.68": {
"peer_name": "user1",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/exit-node/tailscaled.sock whois --json 100.90.199.68",
"response": null
}
}
},
"subnet-router": {
"commands": {
"packet_filter_rules": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/subnet-router/tailscaled.sock debug localapi POST debug-packet-filter-rules",
"packet_filter_matches": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/subnet-router/tailscaled.sock debug localapi POST debug-packet-filter-matches"
},
"packet_filter_rules": null,
"packet_filter_matches": [],
"whois": {
"100.85.66.106": {
"peer_name": "exit-node",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/subnet-router/tailscaled.sock whois --json 100.85.66.106",
"response": null
},
"100.83.200.69": {
"peer_name": "tagged-client",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/subnet-router/tailscaled.sock whois --json 100.83.200.69",
"response": null
},
"100.103.8.15": {
"peer_name": "tagged-prod",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/subnet-router/tailscaled.sock whois --json 100.103.8.15",
"response": null
},
"100.108.74.26": {
"peer_name": "tagged-server",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/subnet-router/tailscaled.sock whois --json 100.108.74.26",
"response": null
},
"100.110.121.96": {
"peer_name": "user-kris",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/subnet-router/tailscaled.sock whois --json 100.110.121.96",
"response": null
},
"100.103.90.82": {
"peer_name": "user-mon",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/subnet-router/tailscaled.sock whois --json 100.103.90.82",
"response": null
},
"100.90.199.68": {
"peer_name": "user1",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/subnet-router/tailscaled.sock whois --json 100.90.199.68",
"response": null
}
}
},
"tagged-client": {
"commands": {
"packet_filter_rules": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-client/tailscaled.sock debug localapi POST debug-packet-filter-rules",
"packet_filter_matches": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-client/tailscaled.sock debug localapi POST debug-packet-filter-matches"
},
"packet_filter_rules": null,
"packet_filter_matches": [],
"whois": {
"100.85.66.106": {
"peer_name": "exit-node",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-client/tailscaled.sock whois --json 100.85.66.106",
"response": null
},
"100.92.142.61": {
"peer_name": "subnet-router",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-client/tailscaled.sock whois --json 100.92.142.61",
"response": null
},
"100.103.8.15": {
"peer_name": "tagged-prod",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-client/tailscaled.sock whois --json 100.103.8.15",
"response": null
},
"100.108.74.26": {
"peer_name": "tagged-server",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-client/tailscaled.sock whois --json 100.108.74.26",
"response": null
},
"100.110.121.96": {
"peer_name": "user-kris",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-client/tailscaled.sock whois --json 100.110.121.96",
"response": null
},
"100.103.90.82": {
"peer_name": "user-mon",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-client/tailscaled.sock whois --json 100.103.90.82",
"response": null
},
"100.90.199.68": {
"peer_name": "user1",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-client/tailscaled.sock whois --json 100.90.199.68",
"response": null
}
}
},
"tagged-prod": {
"commands": {
"packet_filter_rules": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-prod/tailscaled.sock debug localapi POST debug-packet-filter-rules",
"packet_filter_matches": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-prod/tailscaled.sock debug localapi POST debug-packet-filter-matches"
},
"packet_filter_rules": null,
"packet_filter_matches": [],
"whois": {
"100.85.66.106": {
"peer_name": "exit-node",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-prod/tailscaled.sock whois --json 100.85.66.106",
"response": null
},
"100.92.142.61": {
"peer_name": "subnet-router",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-prod/tailscaled.sock whois --json 100.92.142.61",
"response": null
},
"100.83.200.69": {
"peer_name": "tagged-client",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-prod/tailscaled.sock whois --json 100.83.200.69",
"response": null
},
"100.108.74.26": {
"peer_name": "tagged-server",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-prod/tailscaled.sock whois --json 100.108.74.26",
"response": null
},
"100.110.121.96": {
"peer_name": "user-kris",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-prod/tailscaled.sock whois --json 100.110.121.96",
"response": null
},
"100.103.90.82": {
"peer_name": "user-mon",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-prod/tailscaled.sock whois --json 100.103.90.82",
"response": null
},
"100.90.199.68": {
"peer_name": "user1",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-prod/tailscaled.sock whois --json 100.90.199.68",
"response": null
}
}
},
"tagged-server": {
"commands": {
"packet_filter_rules": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-server/tailscaled.sock debug localapi POST debug-packet-filter-rules",
"packet_filter_matches": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-server/tailscaled.sock debug localapi POST debug-packet-filter-matches"
},
"packet_filter_rules": [
{
"SrcIPs": [
"100.103.90.82",
"100.110.121.96",
"100.90.199.68",
"fd7a:115c:a1e0::1737:7960",
"fd7a:115c:a1e0::2d01:c747",
"fd7a:115c:a1e0::9e37:5a52"
],
"DstPorts": [
{
"IP": "100.108.74.26",
"Ports": {
"First": 0,
"Last": 65535
}
},
{
"IP": "fd7a:115c:a1e0::b901:4a87",
"Ports": {
"First": 0,
"Last": 65535
}
}
]
},
{
"SrcIPs": [
"100.103.90.82",
"100.110.121.96",
"100.90.199.68",
"fd7a:115c:a1e0::1737:7960",
"fd7a:115c:a1e0::2d01:c747",
"fd7a:115c:a1e0::9e37:5a52"
],
"CapGrant": [
{
"Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"],
"CapMap": {
"example.com/cap/test": [
{
"role": "admin"
}
]
}
}
]
}
],
"packet_filter_matches": [
{
"IPProto": [6, 17, 1, 58],
"Srcs": [
"100.103.90.82/32",
"100.110.121.96/32",
"100.90.199.68/32",
"fd7a:115c:a1e0::1737:7960/128",
"fd7a:115c:a1e0::2d01:c747/128",
"fd7a:115c:a1e0::9e37:5a52/128"
],
"SrcCaps": null,
"Dsts": [
{
"Net": "100.108.74.26/32",
"Ports": {
"First": 0,
"Last": 65535
}
},
{
"Net": "fd7a:115c:a1e0::b901:4a87/128",
"Ports": {
"First": 0,
"Last": 65535
}
}
],
"Caps": []
},
{
"IPProto": [6, 17, 1, 58],
"Srcs": [
"100.103.90.82/32",
"100.110.121.96/32",
"100.90.199.68/32",
"fd7a:115c:a1e0::1737:7960/128",
"fd7a:115c:a1e0::2d01:c747/128",
"fd7a:115c:a1e0::9e37:5a52/128"
],
"SrcCaps": null,
"Dsts": [],
"Caps": [
{
"Dst": "100.108.74.26/32",
"Cap": "example.com/cap/test",
"Values": [
{
"role": "admin"
}
]
},
{
"Dst": "fd7a:115c:a1e0::b901:4a87/128",
"Cap": "example.com/cap/test",
"Values": [
{
"role": "admin"
}
]
}
]
}
],
"whois": {
"100.85.66.106": {
"peer_name": "exit-node",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-server/tailscaled.sock whois --json 100.85.66.106",
"response": null
},
"100.92.142.61": {
"peer_name": "subnet-router",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-server/tailscaled.sock whois --json 100.92.142.61",
"response": null
},
"100.83.200.69": {
"peer_name": "tagged-client",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-server/tailscaled.sock whois --json 100.83.200.69",
"response": null
},
"100.103.8.15": {
"peer_name": "tagged-prod",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-server/tailscaled.sock whois --json 100.103.8.15",
"response": null
},
"100.110.121.96": {
"peer_name": "user-kris",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-server/tailscaled.sock whois --json 100.110.121.96",
"response": {
"Node": {
"ID": 7728836216590060,
"StableID": "nf4dJTRQM321CNTRL",
"Name": "user-kris.tail78f774.ts.net.",
"User": 4538565228176803,
"Key": "nodekey:40d0f8f49fd519e4a4a2b7d278dcc8863254d4fb8b0219f1d1304cdd172e795f",
"KeyExpiry": "2026-08-19T14:09:34Z",
"DiscoKey": "discokey:ee276d29d944b727d1749cd3938f210d3c30f1e2d2644fed60632fc0a3c95066",
"Addresses": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"],
"AllowedIPs": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"],
"Endpoints": [
"77.164.248.136:36065",
"10.65.0.27:36065",
"172.17.0.1:36065",
"172.18.0.1:36065",
"172.19.0.1:36065"
],
"HomeDERP": 14,
"Hostinfo": {
"OS": "linux",
"Hostname": "user-kris",
"Services": [
{
"Proto": "peerapi4",
"Port": 40159
},
{
"Proto": "peerapi6",
"Port": 40159
}
]
},
"Created": "2026-02-20T14:09:34.803901523Z",
"Cap": 131,
"Online": true,
"ComputedName": "user-kris",
"ComputedNameWithHost": "user-kris"
},
"UserProfile": {
"ID": 4538565228176803,
"LoginName": "kristoffer@dalby.cc",
"DisplayName": "kristoffer"
},
"CapMap": {
"example.com/cap/test": [
{
"role": "admin"
}
]
}
}
},
"100.103.90.82": {
"peer_name": "user-mon",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-server/tailscaled.sock whois --json 100.103.90.82",
"response": {
"Node": {
"ID": 1840115676059256,
"StableID": "nFzZ7giPNF11CNTRL",
"Name": "user-mon.tail78f774.ts.net.",
"User": 3982058329734709,
"Key": "nodekey:1ca6cca66d2b3811ec290c2f7ac30125c3568e19e303a8e30f6b165c9ee75a51",
"KeyExpiry": "2026-08-19T14:09:00Z",
"DiscoKey": "discokey:0fe29575d3fe2b01154e0d8f5b8fa1d2500a55fd2aa79a416f014f4c1e217e7b",
"Addresses": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"],
"AllowedIPs": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"],
"Endpoints": [
"77.164.248.136:49306",
"10.65.0.27:49306",
"172.17.0.1:49306",
"172.18.0.1:49306",
"172.19.0.1:49306"
],
"HomeDERP": 14,
"Hostinfo": {
"OS": "linux",
"Hostname": "user-mon",
"Services": [
{
"Proto": "peerapi4",
"Port": 33201
},
{
"Proto": "peerapi6",
"Port": 33201
}
]
},
"Created": "2026-02-20T14:09:00.203639664Z",
"Cap": 131,
"Online": true,
"ComputedName": "user-mon",
"ComputedNameWithHost": "user-mon"
},
"UserProfile": {
"ID": 3982058329734709,
"LoginName": "monitorpasskeykradalby@passkey",
"DisplayName": "monitorpasskeykradalby"
},
"CapMap": {
"example.com/cap/test": [
{
"role": "admin"
}
]
}
}
},
"100.90.199.68": {
"peer_name": "user1",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/tagged-server/tailscaled.sock whois --json 100.90.199.68",
"response": {
"Node": {
"ID": 539541576444929,
"StableID": "nSq9YrqMD511CNTRL",
"Name": "user1.tail78f774.ts.net.",
"User": 4156223528223174,
"Key": "nodekey:96338a2cd2ea803c915ed8fdf882d66ca0c6a59d0fcf0bc4b3f928d22d1ac743",
"KeyExpiry": "2026-07-22T10:04:13Z",
"DiscoKey": "discokey:e9a76408333d29ad7c495ff79483f15d0bae079bfebc20cffa35af12fe848518",
"Addresses": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"],
"AllowedIPs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"],
"Endpoints": [
"77.164.248.136:59336",
"10.65.0.27:59336",
"172.17.0.1:59336",
"172.18.0.1:59336",
"172.19.0.1:59336"
],
"HomeDERP": 14,
"Hostinfo": {
"OS": "linux",
"Hostname": "user1",
"Services": [
{
"Proto": "peerapi4",
"Port": 46708
},
{
"Proto": "peerapi6",
"Port": 46708
}
]
},
"Created": "2026-01-23T10:04:13.531671894Z",
"Cap": 131,
"Online": true,
"ComputedName": "user1",
"ComputedNameWithHost": "user1"
},
"UserProfile": {
"ID": 4156223528223174,
"LoginName": "kratail2tid@passkey",
"DisplayName": "kratail2tid"
},
"CapMap": {
"example.com/cap/test": [
{
"role": "admin"
}
]
}
}
}
}
},
"user-kris": {
"commands": {
"packet_filter_rules": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user-kris/tailscaled.sock debug localapi POST debug-packet-filter-rules",
"packet_filter_matches": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user-kris/tailscaled.sock debug localapi POST debug-packet-filter-matches"
},
"packet_filter_rules": null,
"packet_filter_matches": [],
"whois": {
"100.85.66.106": {
"peer_name": "exit-node",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user-kris/tailscaled.sock whois --json 100.85.66.106",
"response": null
},
"100.92.142.61": {
"peer_name": "subnet-router",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user-kris/tailscaled.sock whois --json 100.92.142.61",
"response": null
},
"100.83.200.69": {
"peer_name": "tagged-client",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user-kris/tailscaled.sock whois --json 100.83.200.69",
"response": null
},
"100.103.8.15": {
"peer_name": "tagged-prod",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user-kris/tailscaled.sock whois --json 100.103.8.15",
"response": null
},
"100.108.74.26": {
"peer_name": "tagged-server",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user-kris/tailscaled.sock whois --json 100.108.74.26",
"response": {
"Node": {
"ID": 1440249486084758,
"StableID": "nXRbBtuHFC11CNTRL",
"Name": "tagged-server.tail78f774.ts.net.",
"User": 1260082990019555,
"Key": "nodekey:7d5c34b3e8082069d0a82838165c33f8e1b5eb32c6211c2d23d4fe8fb9ec4a19",
"DiscoKey": "discokey:372ff501f45d63e009ed97902f8b3acf6addd79e9c6ca7343d41c7adc4eb3e38",
"Addresses": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"],
"AllowedIPs": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"],
"Endpoints": [
"77.164.248.136:58686",
"10.65.0.27:58686",
"172.17.0.1:58686",
"172.18.0.1:58686",
"172.19.0.1:58686"
],
"HomeDERP": 14,
"Hostinfo": {
"OS": "linux",
"Hostname": "tagged-server",
"Services": [
{
"Proto": "peerapi4",
"Port": 46499
},
{
"Proto": "peerapi6",
"Port": 46499
}
]
},
"Created": "2026-01-23T10:10:26.365653609Z",
"Cap": 131,
"Tags": ["tag:server"],
"Online": true,
"ComputedName": "tagged-server",
"ComputedNameWithHost": "tagged-server"
},
"UserProfile": {
"ID": 1260082990019555,
"LoginName": "tagged-devices",
"DisplayName": "Tagged Devices"
},
"CapMap": null
}
},
"100.103.90.82": {
"peer_name": "user-mon",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user-kris/tailscaled.sock whois --json 100.103.90.82",
"response": null
},
"100.90.199.68": {
"peer_name": "user1",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user-kris/tailscaled.sock whois --json 100.90.199.68",
"response": null
}
}
},
"user-mon": {
"commands": {
"packet_filter_rules": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user-mon/tailscaled.sock debug localapi POST debug-packet-filter-rules",
"packet_filter_matches": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user-mon/tailscaled.sock debug localapi POST debug-packet-filter-matches"
},
"packet_filter_rules": null,
"packet_filter_matches": [],
"whois": {
"100.85.66.106": {
"peer_name": "exit-node",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user-mon/tailscaled.sock whois --json 100.85.66.106",
"response": null
},
"100.92.142.61": {
"peer_name": "subnet-router",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user-mon/tailscaled.sock whois --json 100.92.142.61",
"response": null
},
"100.83.200.69": {
"peer_name": "tagged-client",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user-mon/tailscaled.sock whois --json 100.83.200.69",
"response": null
},
"100.103.8.15": {
"peer_name": "tagged-prod",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user-mon/tailscaled.sock whois --json 100.103.8.15",
"response": null
},
"100.108.74.26": {
"peer_name": "tagged-server",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user-mon/tailscaled.sock whois --json 100.108.74.26",
"response": {
"Node": {
"ID": 1440249486084758,
"StableID": "nXRbBtuHFC11CNTRL",
"Name": "tagged-server.tail78f774.ts.net.",
"User": 1260082990019555,
"Key": "nodekey:7d5c34b3e8082069d0a82838165c33f8e1b5eb32c6211c2d23d4fe8fb9ec4a19",
"DiscoKey": "discokey:372ff501f45d63e009ed97902f8b3acf6addd79e9c6ca7343d41c7adc4eb3e38",
"Addresses": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"],
"AllowedIPs": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"],
"Endpoints": [
"77.164.248.136:58686",
"10.65.0.27:58686",
"172.17.0.1:58686",
"172.18.0.1:58686",
"172.19.0.1:58686"
],
"HomeDERP": 14,
"Hostinfo": {
"OS": "linux",
"Hostname": "tagged-server",
"Services": [
{
"Proto": "peerapi4",
"Port": 46499
},
{
"Proto": "peerapi6",
"Port": 46499
}
]
},
"Created": "2026-01-23T10:10:26.365653609Z",
"Cap": 131,
"Tags": ["tag:server"],
"Online": true,
"ComputedName": "tagged-server",
"ComputedNameWithHost": "tagged-server"
},
"UserProfile": {
"ID": 1260082990019555,
"LoginName": "tagged-devices",
"DisplayName": "Tagged Devices"
},
"CapMap": null
}
},
"100.110.121.96": {
"peer_name": "user-kris",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user-mon/tailscaled.sock whois --json 100.110.121.96",
"response": null
},
"100.90.199.68": {
"peer_name": "user1",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user-mon/tailscaled.sock whois --json 100.90.199.68",
"response": null
}
}
},
"user1": {
"commands": {
"packet_filter_rules": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user1/tailscaled.sock debug localapi POST debug-packet-filter-rules",
"packet_filter_matches": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user1/tailscaled.sock debug localapi POST debug-packet-filter-matches"
},
"packet_filter_rules": null,
"packet_filter_matches": [],
"whois": {
"100.85.66.106": {
"peer_name": "exit-node",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user1/tailscaled.sock whois --json 100.85.66.106",
"response": null
},
"100.92.142.61": {
"peer_name": "subnet-router",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user1/tailscaled.sock whois --json 100.92.142.61",
"response": null
},
"100.83.200.69": {
"peer_name": "tagged-client",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user1/tailscaled.sock whois --json 100.83.200.69",
"response": null
},
"100.103.8.15": {
"peer_name": "tagged-prod",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user1/tailscaled.sock whois --json 100.103.8.15",
"response": null
},
"100.108.74.26": {
"peer_name": "tagged-server",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user1/tailscaled.sock whois --json 100.108.74.26",
"response": {
"Node": {
"ID": 1440249486084758,
"StableID": "nXRbBtuHFC11CNTRL",
"Name": "tagged-server.tail78f774.ts.net.",
"User": 1260082990019555,
"Key": "nodekey:7d5c34b3e8082069d0a82838165c33f8e1b5eb32c6211c2d23d4fe8fb9ec4a19",
"DiscoKey": "discokey:372ff501f45d63e009ed97902f8b3acf6addd79e9c6ca7343d41c7adc4eb3e38",
"Addresses": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"],
"AllowedIPs": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"],
"Endpoints": [
"77.164.248.136:58686",
"10.65.0.27:58686",
"172.17.0.1:58686",
"172.18.0.1:58686",
"172.19.0.1:58686"
],
"HomeDERP": 14,
"Hostinfo": {
"OS": "linux",
"Hostname": "tagged-server",
"Services": [
{
"Proto": "peerapi4",
"Port": 46499
},
{
"Proto": "peerapi6",
"Port": 46499
}
]
},
"Created": "2026-01-23T10:10:26.365653609Z",
"Cap": 131,
"Tags": ["tag:server"],
"Online": true,
"ComputedName": "tagged-server",
"ComputedNameWithHost": "tagged-server"
},
"UserProfile": {
"ID": 1260082990019555,
"LoginName": "tagged-devices",
"DisplayName": "Tagged Devices"
},
"CapMap": null
}
},
"100.110.121.96": {
"peer_name": "user-kris",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user1/tailscaled.sock whois --json 100.110.121.96",
"response": null
},
"100.103.90.82": {
"peer_name": "user-mon",
"command": "/home/kradalby/go/bin/tailscale --socket=/home/kradalby/.config/multi-tailscale-dev/user1/tailscaled.sock whois --json 100.103.90.82",
"response": null
}
}
}
}
}