diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-A01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-A01.json index adfab5b5..4aafe57f 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-A01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-A01.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-A02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-A02.json index ace18c56..3a1cfe57 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-A02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-A02.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-A03.json b/hscontrol/policy/v2/testdata/acl_results/ACL-A03.json index bf4c52bb..d8a96700 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-A03.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-A03.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-A04.json b/hscontrol/policy/v2/testdata/acl_results/ACL-A04.json index a0df000c..93da9c05 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-A04.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-A04.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-A05.json b/hscontrol/policy/v2/testdata/acl_results/ACL-A05.json index 339e98c1..13b8b048 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-A05.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-A05.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-A06.json b/hscontrol/policy/v2/testdata/acl_results/ACL-A06.json index c57dd1cf..86d0c113 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-A06.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-A06.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-A07.json b/hscontrol/policy/v2/testdata/acl_results/ACL-A07.json index 44222cd5..f1821a5a 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-A07.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-A07.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-A08.json b/hscontrol/policy/v2/testdata/acl_results/ACL-A08.json index 6e1cd16d..ff4e4140 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-A08.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-A08.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-A09.json b/hscontrol/policy/v2/testdata/acl_results/ACL-A09.json index 0387fb85..d8b6e62d 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-A09.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-A09.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-A10.json b/hscontrol/policy/v2/testdata/acl_results/ACL-A10.json index b0e730e3..d5eb861c 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-A10.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-A10.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-A11.json b/hscontrol/policy/v2/testdata/acl_results/ACL-A11.json index d09858c3..dbb580c1 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-A11.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-A11.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-A12.json b/hscontrol/policy/v2/testdata/acl_results/ACL-A12.json index cb1971df..4c20a617 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-A12.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-A12.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-A13.json b/hscontrol/policy/v2/testdata/acl_results/ACL-A13.json index 67d3f820..5f3b8468 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-A13.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-A13.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-A14.json b/hscontrol/policy/v2/testdata/acl_results/ACL-A14.json index 260728e2..25e90b4e 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-A14.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-A14.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-A15.json b/hscontrol/policy/v2/testdata/acl_results/ACL-A15.json index d1f3426b..709d1d4e 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-A15.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-A15.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-A16.json b/hscontrol/policy/v2/testdata/acl_results/ACL-A16.json index 39f5dd4f..3fac6fa3 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-A16.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-A16.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-A17.json b/hscontrol/policy/v2/testdata/acl_results/ACL-A17.json index 829eabfc..ee94df33 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-A17.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-A17.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AH01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AH01.json index bff0dd40..8ccb1a00 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AH01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AH01.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AH02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AH02.json index bcc05bf1..6acdad4a 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AH02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AH02.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AH03.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AH03.json index 8ed87a0e..86941b6e 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AH03.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AH03.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AH04.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AH04.json index 06a744b6..c21eeb6e 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AH04.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AH04.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AH05.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AH05.json index 19009f65..b58cc483 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AH05.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AH05.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AH06.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AH06.json index 1cbd99cb..6f07797e 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AH06.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AH06.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AR01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AR01.json index 9bc376c0..66928505 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AR01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AR01.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AR02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AR02.json index 333e9899..3aae4a2d 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AR02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AR02.json @@ -65,7 +65,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AR03.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AR03.json index 0c84ef98..7a913a60 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AR03.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AR03.json @@ -64,7 +64,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AR04.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AR04.json index 42953d8a..381dacb5 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AR04.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AR04.json @@ -64,7 +64,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AR05.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AR05.json index 0ffaa3c1..8f46b6b5 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AR05.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AR05.json @@ -69,7 +69,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AR06.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AR06.json index 97fd9f08..c24e37c2 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AR06.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AR06.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AT01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AT01.json index 2c972e7e..77be1c17 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AT01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AT01.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AT02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AT02.json index bdc599df..05f7efe9 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AT02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AT02.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AT03.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AT03.json index 92c2ef71..454521ac 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AT03.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AT03.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AT04.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AT04.json index 5a0894b6..bc50ab9a 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AT04.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AT04.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AT05.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AT05.json index 9f606358..ac083035 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AT05.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AT05.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AT06.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AT06.json index db101e99..f04eb600 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AT06.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AT06.json @@ -69,7 +69,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AU01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AU01.json index ad696e82..7c35a1e7 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AU01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AU01.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AU02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AU02.json index 7f021094..bc354805 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AU02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AU02.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AU03.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AU03.json index eb0b26fb..71e87c8b 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AU03.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AU03.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AU04.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AU04.json index 61bb5ddd..29df0930 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AU04.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AU04.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AU05.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AU05.json index 63cc6805..715fef25 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AU05.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AU05.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-AU06.json b/hscontrol/policy/v2/testdata/acl_results/ACL-AU06.json index 6bbeed3b..9a1394f3 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-AU06.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-AU06.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-C01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-C01.json index 633be674..c5c679ba 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-C01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-C01.json @@ -64,7 +64,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-C02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-C02.json index cdba652c..756fe3a7 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-C02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-C02.json @@ -64,7 +64,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-C03.json b/hscontrol/policy/v2/testdata/acl_results/ACL-C03.json index 71d12741..837043f0 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-C03.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-C03.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-C04.json b/hscontrol/policy/v2/testdata/acl_results/ACL-C04.json index 0b611ea0..c8197e5e 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-C04.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-C04.json @@ -69,7 +69,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-C05.json b/hscontrol/policy/v2/testdata/acl_results/ACL-C05.json index c5374597..cccdb09b 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-C05.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-C05.json @@ -62,7 +62,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-C06.json b/hscontrol/policy/v2/testdata/acl_results/ACL-C06.json index cd12e982..9978a238 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-C06.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-C06.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-C07.json b/hscontrol/policy/v2/testdata/acl_results/ACL-C07.json index a80d3eab..83205b4b 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-C07.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-C07.json @@ -69,7 +69,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-C08.json b/hscontrol/policy/v2/testdata/acl_results/ACL-C08.json index c3cbe486..4c8c996d 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-C08.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-C08.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-C09.json b/hscontrol/policy/v2/testdata/acl_results/ACL-C09.json index d7f5a557..9a3e239f 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-C09.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-C09.json @@ -79,7 +79,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-C10.json b/hscontrol/policy/v2/testdata/acl_results/ACL-C10.json index f2e7b7bc..99e40d90 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-C10.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-C10.json @@ -64,7 +64,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-D01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-D01.json index c88b22a4..b59a900f 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-D01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-D01.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-D02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-D02.json index a399570e..8ed62f0b 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-D02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-D02.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-D03.json b/hscontrol/policy/v2/testdata/acl_results/ACL-D03.json index 5afeee24..489b703c 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-D03.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-D03.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-D04.json b/hscontrol/policy/v2/testdata/acl_results/ACL-D04.json index fcf31f23..1a706e02 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-D04.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-D04.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-D05.json b/hscontrol/policy/v2/testdata/acl_results/ACL-D05.json index 7814df0e..77e504d3 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-D05.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-D05.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-D06.json b/hscontrol/policy/v2/testdata/acl_results/ACL-D06.json index aabbfa10..28add351 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-D06.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-D06.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-D07.json b/hscontrol/policy/v2/testdata/acl_results/ACL-D07.json index 028fe39d..964d2052 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-D07.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-D07.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-D08.json b/hscontrol/policy/v2/testdata/acl_results/ACL-D08.json index 0e4e0fbc..876e842e 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-D08.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-D08.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-E01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-E01.json index 138f9d56..3be67491 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-E01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-E01.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-E02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-E02.json index 1dcabc3d..e3e72163 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-E02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-E02.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-E03.json b/hscontrol/policy/v2/testdata/acl_results/ACL-E03.json index bffcf22b..09b18ac1 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-E03.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-E03.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-E04.json b/hscontrol/policy/v2/testdata/acl_results/ACL-E04.json index 47976c18..93629c30 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-E04.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-E04.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-E05.json b/hscontrol/policy/v2/testdata/acl_results/ACL-E05.json index 2195029c..60527fd9 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-E05.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-E05.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-E06.json b/hscontrol/policy/v2/testdata/acl_results/ACL-E06.json index 557b2279..0566c82e 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-E06.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-E06.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-E07.json b/hscontrol/policy/v2/testdata/acl_results/ACL-E07.json index 9ce58537..e7a37f9f 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-E07.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-E07.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-E08.json b/hscontrol/policy/v2/testdata/acl_results/ACL-E08.json index 407badcc..f9d12dc6 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-E08.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-E08.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-E09.json b/hscontrol/policy/v2/testdata/acl_results/ACL-E09.json index 755ca138..0dab66ea 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-E09.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-E09.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-H01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-H01.json index 73dabb10..c2456430 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-H01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-H01.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-H02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-H02.json index 57a1f5f3..5bfc732f 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-H02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-H02.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-H03.json b/hscontrol/policy/v2/testdata/acl_results/ACL-H03.json index db4af458..bbb79e43 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-H03.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-H03.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-H04.json b/hscontrol/policy/v2/testdata/acl_results/ACL-H04.json index da7ee2b0..357829f0 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-H04.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-H04.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-H05.json b/hscontrol/policy/v2/testdata/acl_results/ACL-H05.json index 36a9b30f..0c29d0c9 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-H05.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-H05.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-H06.json b/hscontrol/policy/v2/testdata/acl_results/ACL-H06.json index 1529a1dd..5ecca2e2 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-H06.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-H06.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-H07.json b/hscontrol/policy/v2/testdata/acl_results/ACL-H07.json index c8c0fd84..99b7d1c0 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-H07.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-H07.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-H08.json b/hscontrol/policy/v2/testdata/acl_results/ACL-H08.json index a635f7c7..9ba835f9 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-H08.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-H08.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-K01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-K01.json index cfc17a34..15509cab 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-K01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-K01.json @@ -62,7 +62,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-K02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-K02.json index b9e10966..f72a6e71 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-K02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-K02.json @@ -62,7 +62,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-K03.json b/hscontrol/policy/v2/testdata/acl_results/ACL-K03.json index d431edf3..49185560 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-K03.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-K03.json @@ -65,7 +65,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-K04.json b/hscontrol/policy/v2/testdata/acl_results/ACL-K04.json index e58a7e0b..fbfbfa63 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-K04.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-K04.json @@ -64,7 +64,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-K05.json b/hscontrol/policy/v2/testdata/acl_results/ACL-K05.json index 3aaa7f39..898a7e93 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-K05.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-K05.json @@ -62,7 +62,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-M01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-M01.json index 7380851c..02e69ca2 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-M01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-M01.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-M02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-M02.json index 0dbced2d..146cc4e1 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-M02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-M02.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-M03.json b/hscontrol/policy/v2/testdata/acl_results/ACL-M03.json index 0632438a..ed8ae756 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-M03.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-M03.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-M04.json b/hscontrol/policy/v2/testdata/acl_results/ACL-M04.json index b2f290d3..9de7e33e 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-M04.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-M04.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-M05.json b/hscontrol/policy/v2/testdata/acl_results/ACL-M05.json index ee51c3a6..7edd5f17 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-M05.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-M05.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-M06.json b/hscontrol/policy/v2/testdata/acl_results/ACL-M06.json index 892f019b..575d223b 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-M06.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-M06.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-M07.json b/hscontrol/policy/v2/testdata/acl_results/ACL-M07.json index 25766123..729f7ee5 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-M07.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-M07.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-M08.json b/hscontrol/policy/v2/testdata/acl_results/ACL-M08.json index d78dcf3c..95cc712b 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-M08.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-M08.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-M09.json b/hscontrol/policy/v2/testdata/acl_results/ACL-M09.json index 4cfc286b..de815a4a 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-M09.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-M09.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-M10.json b/hscontrol/policy/v2/testdata/acl_results/ACL-M10.json index 1f5dcae2..a7ffac09 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-M10.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-M10.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR01.json index f62a23c9..59901463 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR01.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR02.json index c305ac4f..4b93ef1a 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR02.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR03.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR03.json index ea687121..a020aeb2 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR03.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR03.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR04.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR04.json index 5a7d1127..832e6ba9 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR04.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR04.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR05.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR05.json index 7196cd13..2cd0ab53 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR05.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR05.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR06.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR06.json index 07fc9759..121a8a89 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR06.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR06.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR07.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR07.json index 03180abe..4f59d484 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR07.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR07.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR08.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR08.json index 2c6c0ca7..4b875236 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR08.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR08.json @@ -64,7 +64,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR09.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR09.json index b92f3a43..bf1590a4 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR09.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR09.json @@ -64,7 +64,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR10.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR10.json index 185463eb..fe014369 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR10.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR10.json @@ -64,7 +64,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR11.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR11.json index 958cd1dd..48f02f02 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR11.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR11.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR12.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR12.json index 242b3c8e..83a362ba 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR12.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR12.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR13.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR13.json index 00d77deb..01d9e394 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR13.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR13.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR14.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR14.json index d3008297..b39c5dc0 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR14.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR14.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR15.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR15.json index b615ead7..77de1a33 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR15.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR15.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR16.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR16.json index 502aed9e..972f27e4 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR16.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR16.json @@ -64,7 +64,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR17.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR17.json index 185d6d4e..e852c8ee 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR17.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR17.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR18.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR18.json index 15b46c88..64ca6f2c 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR18.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR18.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR19.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR19.json index 0b8dce19..3f58da83 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR19.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR19.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR20.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR20.json index 3b7550fe..47e195f7 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR20.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR20.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR21.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR21.json index 0656ffb7..c4688962 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR21.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR21.json @@ -69,7 +69,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR22.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR22.json index 6c5306bb..04db0fde 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR22.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR22.json @@ -74,7 +74,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MR23.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MR23.json index e83b49ff..9081e618 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MR23.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MR23.json @@ -79,7 +79,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MU01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MU01.json index 274b48ff..10c204cd 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MU01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MU01.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MU02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MU02.json index a630277e..731a5d58 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MU02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MU02.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MU03.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MU03.json index 9598bdfb..4bc0ac5d 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MU03.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MU03.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MU04.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MU04.json index fca1aeda..cfac0a9e 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MU04.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MU04.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MU05.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MU05.json index 420d204b..cec835b5 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MU05.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MU05.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MU06.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MU06.json index 355a542d..537366ec 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MU06.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MU06.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MU07.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MU07.json index 1edcde76..278d2b07 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MU07.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MU07.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-MU08.json b/hscontrol/policy/v2/testdata/acl_results/ACL-MU08.json index fad93668..2da2cc7b 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-MU08.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-MU08.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-O01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-O01.json index 90b8de0b..55eb57d8 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-O01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-O01.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-O02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-O02.json index 7ea0f912..2603e5cf 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-O02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-O02.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-O03.json b/hscontrol/policy/v2/testdata/acl_results/ACL-O03.json index ab71d000..df39290a 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-O03.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-O03.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-O04.json b/hscontrol/policy/v2/testdata/acl_results/ACL-O04.json index 262bea57..98f6e880 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-O04.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-O04.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-P01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-P01.json index c6bec53e..33eee487 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-P01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-P01.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-P02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-P02.json index d3ebd0c2..ec4fd311 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-P02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-P02.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-P03.json b/hscontrol/policy/v2/testdata/acl_results/ACL-P03.json index 595084be..cb4ae118 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-P03.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-P03.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-P04.json b/hscontrol/policy/v2/testdata/acl_results/ACL-P04.json index 0b91c36a..8cdf8b34 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-P04.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-P04.json @@ -55,7 +55,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-P05.json b/hscontrol/policy/v2/testdata/acl_results/ACL-P05.json index 57d7bbc2..482e780d 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-P05.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-P05.json @@ -55,7 +55,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-P06.json b/hscontrol/policy/v2/testdata/acl_results/ACL-P06.json index 88baebe2..18612fb3 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-P06.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-P06.json @@ -55,7 +55,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-PF01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-PF01.json index 390cf539..08756bf2 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-PF01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-PF01.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-PF02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-PF02.json index 29d83e0f..322dfad6 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-PF02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-PF02.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-PF03.json b/hscontrol/policy/v2/testdata/acl_results/ACL-PF03.json index dbba01ea..7eac6b80 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-PF03.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-PF03.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-PF04.json b/hscontrol/policy/v2/testdata/acl_results/ACL-PF04.json index 5bc9f695..3d439dbd 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-PF04.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-PF04.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-PF05.json b/hscontrol/policy/v2/testdata/acl_results/ACL-PF05.json index af688736..9e328901 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-PF05.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-PF05.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-R01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-R01.json index c799d2e9..20619f80 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-R01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-R01.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-R02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-R02.json index 3b530492..f5e1adc7 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-R02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-R02.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-R03.json b/hscontrol/policy/v2/testdata/acl_results/ACL-R03.json index 6f5639b3..a78bef8c 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-R03.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-R03.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-R04.json b/hscontrol/policy/v2/testdata/acl_results/ACL-R04.json index 4b5edc4a..c8c822e6 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-R04.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-R04.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-R05.json b/hscontrol/policy/v2/testdata/acl_results/ACL-R05.json index 68f61569..8d56abbb 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-R05.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-R05.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-R06.json b/hscontrol/policy/v2/testdata/acl_results/ACL-R06.json index dc6756dc..4ca1a774 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-R06.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-R06.json @@ -64,7 +64,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-R07.json b/hscontrol/policy/v2/testdata/acl_results/ACL-R07.json index 248f2577..03aaae95 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-R07.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-R07.json @@ -64,7 +64,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-R08.json b/hscontrol/policy/v2/testdata/acl_results/ACL-R08.json index feef997c..dcdfb2aa 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-R08.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-R08.json @@ -64,7 +64,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-R09.json b/hscontrol/policy/v2/testdata/acl_results/ACL-R09.json index 7241e609..ebdaaa45 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-R09.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-R09.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-R10.json b/hscontrol/policy/v2/testdata/acl_results/ACL-R10.json index a9427763..d1d309ee 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-R10.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-R10.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-RS01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-RS01.json index edae2b34..2d65dfd6 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-RS01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-RS01.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-RS02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-RS02.json index fdf25bbc..f30290fd 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-RS02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-RS02.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-RS03.json b/hscontrol/policy/v2/testdata/acl_results/ACL-RS03.json index 81334e8a..cb66384a 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-RS03.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-RS03.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-RS04.json b/hscontrol/policy/v2/testdata/acl_results/ACL-RS04.json index 837fcf09..8508e476 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-RS04.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-RS04.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-RS05.json b/hscontrol/policy/v2/testdata/acl_results/ACL-RS05.json index f41cf10e..07d4a5cd 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-RS05.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-RS05.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-RS06.json b/hscontrol/policy/v2/testdata/acl_results/ACL-RS06.json index fd1cd5cb..e68f5dda 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-RS06.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-RS06.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-RS07.json b/hscontrol/policy/v2/testdata/acl_results/ACL-RS07.json index 3566c741..8d1ecdbe 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-RS07.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-RS07.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-S01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-S01.json index 48150bec..4692b91e 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-S01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-S01.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-S02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-S02.json index 91a1343a..ea03aecb 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-S02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-S02.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-S03.json b/hscontrol/policy/v2/testdata/acl_results/ACL-S03.json index 08ca1bfe..63cb0c0c 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-S03.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-S03.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-S07.json b/hscontrol/policy/v2/testdata/acl_results/ACL-S07.json index fcb5b657..c3141b7e 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-S07.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-S07.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-S08.json b/hscontrol/policy/v2/testdata/acl_results/ACL-S08.json index c54f589d..886cd493 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-S08.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-S08.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-S09.json b/hscontrol/policy/v2/testdata/acl_results/ACL-S09.json index 4a0df20c..e35526bd 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-S09.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-S09.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-S10.json b/hscontrol/policy/v2/testdata/acl_results/ACL-S10.json index 2d560805..a85bede3 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-S10.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-S10.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-SF01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-SF01.json index cadc25b9..7d1e770d 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-SF01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-SF01.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-SF02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-SF02.json index 6c741acd..035a20db 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-SF02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-SF02.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-SF06.json b/hscontrol/policy/v2/testdata/acl_results/ACL-SF06.json index 4d153360..6a804012 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-SF06.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-SF06.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-SF07.json b/hscontrol/policy/v2/testdata/acl_results/ACL-SF07.json index fbdef2bb..d6808433 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-SF07.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-SF07.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-SF09.json b/hscontrol/policy/v2/testdata/acl_results/ACL-SF09.json index 3604b3f6..f794e3ce 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-SF09.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-SF09.json @@ -59,7 +59,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-SF10.json b/hscontrol/policy/v2/testdata/acl_results/ACL-SF10.json index 9f6a7ffc..77833398 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-SF10.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-SF10.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-SF11.json b/hscontrol/policy/v2/testdata/acl_results/ACL-SF11.json index 0562494b..cc974ad2 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-SF11.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-SF11.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-SF12.json b/hscontrol/policy/v2/testdata/acl_results/ACL-SF12.json index 235a791f..f8af20fd 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-SF12.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-SF12.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-SF13.json b/hscontrol/policy/v2/testdata/acl_results/ACL-SF13.json index 2dfbe83e..79c1c8b0 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-SF13.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-SF13.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-T01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-T01.json index 7290ab3c..149a9198 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-T01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-T01.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-T02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-T02.json index fef73138..9c5e196b 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-T02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-T02.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-T03.json b/hscontrol/policy/v2/testdata/acl_results/ACL-T03.json index c3e1e872..4dc6b1f8 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-T03.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-T03.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-T04.json b/hscontrol/policy/v2/testdata/acl_results/ACL-T04.json index 36751d45..93b3cc1d 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-T04.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-T04.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-T05.json b/hscontrol/policy/v2/testdata/acl_results/ACL-T05.json index b2998a0a..703a34db 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-T05.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-T05.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-T06.json b/hscontrol/policy/v2/testdata/acl_results/ACL-T06.json index e68913a6..42c17aa5 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-T06.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-T06.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-T07.json b/hscontrol/policy/v2/testdata/acl_results/ACL-T07.json index 8c453671..6c571700 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-T07.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-T07.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-T08.json b/hscontrol/policy/v2/testdata/acl_results/ACL-T08.json index 3ad4cf0f..0254f34c 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-T08.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-T08.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-T09.json b/hscontrol/policy/v2/testdata/acl_results/ACL-T09.json index e61ed893..f4cd54a1 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-T09.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-T09.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-T10.json b/hscontrol/policy/v2/testdata/acl_results/ACL-T10.json index 4089db74..f76b5f99 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-T10.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-T10.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-U01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-U01.json index bb3b29e2..02f879ad 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-U01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-U01.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-U02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-U02.json index 52412106..7583c176 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-U02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-U02.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-U03.json b/hscontrol/policy/v2/testdata/acl_results/ACL-U03.json index 61f67569..dc3eec6a 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-U03.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-U03.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-U04.json b/hscontrol/policy/v2/testdata/acl_results/ACL-U04.json index 096ca91d..2b1e93d4 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-U04.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-U04.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-U05.json b/hscontrol/policy/v2/testdata/acl_results/ACL-U05.json index cb44017e..c2aa7fef 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-U05.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-U05.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-U06.json b/hscontrol/policy/v2/testdata/acl_results/ACL-U06.json index 98aa256d..9a3712ca 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-U06.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-U06.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-U07.json b/hscontrol/policy/v2/testdata/acl_results/ACL-U07.json index d3fbe05f..72182012 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-U07.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-U07.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-U08.json b/hscontrol/policy/v2/testdata/acl_results/ACL-U08.json index 39022a55..9fc3d8c3 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-U08.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-U08.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-U09.json b/hscontrol/policy/v2/testdata/acl_results/ACL-U09.json index 4a0e1828..f6da277e 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-U09.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-U09.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-U10.json b/hscontrol/policy/v2/testdata/acl_results/ACL-U10.json index 9f35a5dc..7bd1f2a9 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-U10.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-U10.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-U11.json b/hscontrol/policy/v2/testdata/acl_results/ACL-U11.json index cd170e27..27d0b511 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-U11.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-U11.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-U12.json b/hscontrol/policy/v2/testdata/acl_results/ACL-U12.json index f61bc2b8..c7e34cc9 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-U12.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-U12.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-W01.json b/hscontrol/policy/v2/testdata/acl_results/ACL-W01.json index d4a5bb63..095e1def 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-W01.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-W01.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-W02.json b/hscontrol/policy/v2/testdata/acl_results/ACL-W02.json index 35242597..6e8fa5da 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-W02.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-W02.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-W03.json b/hscontrol/policy/v2/testdata/acl_results/ACL-W03.json index 6c1cc135..1dbf0242 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-W03.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-W03.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-W04.json b/hscontrol/policy/v2/testdata/acl_results/ACL-W04.json index 686eb622..be6a784e 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-W04.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-W04.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-W05.json b/hscontrol/policy/v2/testdata/acl_results/ACL-W05.json index dbd4ba67..5e2beeb2 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-W05.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-W05.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-W06.json b/hscontrol/policy/v2/testdata/acl_results/ACL-W06.json index 6980de0a..1b0d4275 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-W06.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-W06.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/acl_results/ACL-W07.json b/hscontrol/policy/v2/testdata/acl_results/ACL-W07.json index 6650ca3a..33aa72df 100644 --- a/hscontrol/policy/v2/testdata/acl_results/ACL-W07.json +++ b/hscontrol/policy/v2/testdata/acl_results/ACL-W07.json @@ -54,7 +54,9 @@ "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-A1.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-A1.json index 89fe1c64..f6d8e417 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-A1.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-A1.json @@ -40,7 +40,15 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["*"], "app": { "example.com/cap/basic": [{}] } }], + "grants_section": [ + { + "src": ["*"], + "dst": ["*"], + "app": { + "example.com/cap/basic": [{}] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -63,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -138,7 +148,9 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "example.com/cap/basic": [{}] } + "CapMap": { + "example.com/cap/basic": [{}] + } } ] } @@ -166,8 +178,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "example.com/cap/basic", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "example.com/cap/basic", "Values": [{}] } + { + "Dst": "100.85.66.106/32", + "Cap": "example.com/cap/basic", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "example.com/cap/basic", + "Values": [{}] + } ] } ], @@ -197,8 +217,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -209,8 +235,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.83.200.69": { @@ -238,8 +270,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -249,8 +287,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.103.8.15": { @@ -278,8 +322,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -290,8 +340,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.108.74.26": { @@ -319,8 +375,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -330,8 +392,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.110.121.96": { @@ -360,8 +428,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -370,8 +444,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.103.90.82": { @@ -400,8 +480,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -415,7 +501,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/basic": [{}] } + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.90.199.68": { @@ -444,8 +532,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -454,8 +548,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } } } @@ -476,7 +576,9 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "example.com/cap/basic": [{}] } + "CapMap": { + "example.com/cap/basic": [{}] + } } ] } @@ -504,8 +606,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "example.com/cap/basic", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "example.com/cap/basic", "Values": [{}] } + { + "Dst": "100.92.142.61/32", + "Cap": "example.com/cap/basic", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "example.com/cap/basic", + "Values": [{}] + } ] } ], @@ -535,8 +645,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -546,8 +662,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.83.200.69": { @@ -575,8 +697,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -586,8 +714,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.103.8.15": { @@ -615,8 +749,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -627,8 +767,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.108.74.26": { @@ -656,8 +802,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -667,8 +819,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.110.121.96": { @@ -697,8 +855,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -707,8 +871,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.103.90.82": { @@ -737,8 +907,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -752,7 +928,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/basic": [{}] } + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.90.199.68": { @@ -781,8 +959,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -791,8 +975,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } } } @@ -813,7 +1003,9 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "example.com/cap/basic": [{}] } + "CapMap": { + "example.com/cap/basic": [{}] + } } ] } @@ -841,8 +1033,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "example.com/cap/basic", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "example.com/cap/basic", "Values": [{}] } + { + "Dst": "100.83.200.69/32", + "Cap": "example.com/cap/basic", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "example.com/cap/basic", + "Values": [{}] + } ] } ], @@ -872,8 +1072,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -883,8 +1089,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.92.142.61": { @@ -912,8 +1124,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -924,8 +1142,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.103.8.15": { @@ -953,8 +1177,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -965,8 +1195,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.108.74.26": { @@ -994,8 +1230,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1005,8 +1247,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.110.121.96": { @@ -1035,8 +1283,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1045,8 +1299,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.103.90.82": { @@ -1075,8 +1335,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1090,7 +1356,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/basic": [{}] } + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.90.199.68": { @@ -1119,8 +1387,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1129,8 +1403,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } } } @@ -1196,7 +1476,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/basic": [{}] } + "CapMap": { + "example.com/cap/basic": [{}] + } } ] } @@ -1224,8 +1506,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/basic", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/basic", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/basic", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/basic", + "Values": [{}] + } ] } ], @@ -1255,8 +1545,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1266,8 +1562,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.92.142.61": { @@ -1295,8 +1597,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1307,8 +1615,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.83.200.69": { @@ -1336,8 +1650,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1347,8 +1667,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.103.8.15": { @@ -1376,8 +1702,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1388,8 +1720,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.110.121.96": { @@ -1418,8 +1756,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1428,8 +1772,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.103.90.82": { @@ -1458,8 +1808,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1473,7 +1829,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/basic": [{}] } + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.90.199.68": { @@ -1502,8 +1860,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1513,8 +1877,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } } } @@ -1535,7 +1905,9 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "example.com/cap/basic": [{}] } + "CapMap": { + "example.com/cap/basic": [{}] + } } ] } @@ -1563,8 +1935,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "example.com/cap/basic", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "example.com/cap/basic", "Values": [{}] } + { + "Dst": "100.110.121.96/32", + "Cap": "example.com/cap/basic", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "example.com/cap/basic", + "Values": [{}] + } ] } ], @@ -1594,8 +1974,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1605,8 +1991,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.92.142.61": { @@ -1634,8 +2026,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1646,8 +2044,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.83.200.69": { @@ -1675,8 +2079,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1686,8 +2096,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.103.8.15": { @@ -1715,8 +2131,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1727,8 +2149,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.108.74.26": { @@ -1756,8 +2184,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1768,8 +2202,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.103.90.82": { @@ -1798,8 +2238,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1814,7 +2260,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/basic": [{}] } + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.90.199.68": { @@ -1843,8 +2291,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1854,8 +2308,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } } } @@ -1876,7 +2336,9 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "example.com/cap/basic": [{}] } + "CapMap": { + "example.com/cap/basic": [{}] + } } ] } @@ -1904,8 +2366,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "example.com/cap/basic", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "example.com/cap/basic", "Values": [{}] } + { + "Dst": "100.103.90.82/32", + "Cap": "example.com/cap/basic", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "example.com/cap/basic", + "Values": [{}] + } ] } ], @@ -1935,8 +2405,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1946,8 +2422,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.92.142.61": { @@ -1975,8 +2457,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1987,8 +2475,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.83.200.69": { @@ -2016,8 +2510,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2027,8 +2527,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.103.8.15": { @@ -2056,8 +2562,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2068,8 +2580,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.108.74.26": { @@ -2097,8 +2615,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2109,8 +2633,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.110.121.96": { @@ -2139,8 +2669,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2149,8 +2685,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.90.199.68": { @@ -2179,8 +2721,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2190,8 +2738,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } } } @@ -2212,7 +2766,9 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "example.com/cap/basic": [{}] } + "CapMap": { + "example.com/cap/basic": [{}] + } } ] } @@ -2240,8 +2796,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "example.com/cap/basic", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "example.com/cap/basic", "Values": [{}] } + { + "Dst": "100.90.199.68/32", + "Cap": "example.com/cap/basic", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "example.com/cap/basic", + "Values": [{}] + } ] } ], @@ -2271,8 +2835,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2282,8 +2852,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.92.142.61": { @@ -2311,8 +2887,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2323,8 +2905,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.83.200.69": { @@ -2352,8 +2940,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2363,8 +2957,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.103.8.15": { @@ -2392,8 +2992,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2404,8 +3010,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.108.74.26": { @@ -2433,8 +3045,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2444,8 +3062,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.110.121.96": { @@ -2474,8 +3098,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2484,8 +3114,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/basic": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/basic": [{}] + } } }, "100.103.90.82": { @@ -2514,8 +3150,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2529,7 +3171,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/basic": [{}] } + "CapMap": { + "example.com/cap/basic": [{}] + } } } } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-A3.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-A3.json index 9d8152a0..7be253ab 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-A3.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-A3.json @@ -40,7 +40,15 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["*"], "app": { "tailscale.com/cap/webui": [{}] } }], + "grants_section": [ + { + "src": ["*"], + "dst": ["*"], + "app": { + "tailscale.com/cap/webui": [{}] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -63,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -138,7 +148,9 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "tailscale.com/cap/webui": [{}] } + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } ] } @@ -166,8 +178,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "tailscale.com/cap/webui", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "tailscale.com/cap/webui", "Values": [{}] } + { + "Dst": "100.85.66.106/32", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + } ] } ], @@ -197,8 +217,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -209,8 +235,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.83.200.69": { @@ -238,8 +270,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -249,8 +287,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "unknown": { @@ -283,8 +327,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -294,8 +344,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.110.121.96": { @@ -324,8 +380,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -334,8 +396,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.103.90.82": { @@ -364,8 +432,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -379,7 +453,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.90.199.68": { @@ -408,8 +484,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -418,8 +500,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } } } @@ -440,7 +528,9 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "tailscale.com/cap/webui": [{}] } + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } ] } @@ -468,8 +558,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "tailscale.com/cap/webui", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "tailscale.com/cap/webui", "Values": [{}] } + { + "Dst": "100.92.142.61/32", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + } ] } ], @@ -499,8 +597,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -510,8 +614,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.83.200.69": { @@ -539,8 +649,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -550,8 +666,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "unknown": { @@ -584,8 +706,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -595,8 +723,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.110.121.96": { @@ -625,8 +759,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -635,8 +775,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.103.90.82": { @@ -665,8 +811,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -680,7 +832,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.90.199.68": { @@ -709,8 +863,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -719,8 +879,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } } } @@ -741,7 +907,9 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "tailscale.com/cap/webui": [{}] } + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } ] } @@ -769,8 +937,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "tailscale.com/cap/webui", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "tailscale.com/cap/webui", "Values": [{}] } + { + "Dst": "100.83.200.69/32", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + } ] } ], @@ -800,8 +976,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -811,8 +993,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.92.142.61": { @@ -840,8 +1028,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -852,8 +1046,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "unknown": { @@ -886,8 +1086,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -897,8 +1103,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.110.121.96": { @@ -927,8 +1139,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -937,8 +1155,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.103.90.82": { @@ -967,8 +1191,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -982,7 +1212,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.90.199.68": { @@ -1011,8 +1243,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1021,8 +1259,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } } } @@ -1088,7 +1332,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "tailscale.com/cap/webui": [{}] } + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } ] } @@ -1116,8 +1362,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "tailscale.com/cap/webui", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "tailscale.com/cap/webui", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + } ] } ], @@ -1147,8 +1401,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1158,8 +1418,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.92.142.61": { @@ -1187,8 +1453,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1199,8 +1471,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.83.200.69": { @@ -1228,8 +1506,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1239,8 +1523,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "unknown": { @@ -1274,8 +1564,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1284,8 +1580,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.103.90.82": { @@ -1314,8 +1616,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1329,7 +1637,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.90.199.68": { @@ -1358,8 +1668,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1369,8 +1685,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } } } @@ -1391,7 +1713,9 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "tailscale.com/cap/webui": [{}] } + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } ] } @@ -1419,8 +1743,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "tailscale.com/cap/webui", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "tailscale.com/cap/webui", "Values": [{}] } + { + "Dst": "100.110.121.96/32", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + } ] } ], @@ -1450,8 +1782,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1461,8 +1799,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.92.142.61": { @@ -1490,8 +1834,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1502,8 +1852,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.83.200.69": { @@ -1531,8 +1887,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1542,8 +1904,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "unknown": { @@ -1576,8 +1944,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1588,8 +1962,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.103.90.82": { @@ -1618,8 +1998,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1634,7 +2020,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.90.199.68": { @@ -1663,8 +2051,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1674,8 +2068,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } } } @@ -1696,7 +2096,9 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "tailscale.com/cap/webui": [{}] } + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } ] } @@ -1724,8 +2126,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "tailscale.com/cap/webui", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "tailscale.com/cap/webui", "Values": [{}] } + { + "Dst": "100.103.90.82/32", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + } ] } ], @@ -1755,8 +2165,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1766,8 +2182,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.92.142.61": { @@ -1795,8 +2217,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1807,8 +2235,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.83.200.69": { @@ -1836,8 +2270,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1847,8 +2287,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "unknown": { @@ -1881,8 +2327,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1893,8 +2345,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.110.121.96": { @@ -1923,8 +2381,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1933,8 +2397,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.90.199.68": { @@ -1963,8 +2433,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1974,8 +2450,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } } } @@ -1996,7 +2478,9 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "tailscale.com/cap/webui": [{}] } + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } ] } @@ -2024,8 +2508,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "tailscale.com/cap/webui", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "tailscale.com/cap/webui", "Values": [{}] } + { + "Dst": "100.90.199.68/32", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + } ] } ], @@ -2055,8 +2547,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2066,8 +2564,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.92.142.61": { @@ -2095,8 +2599,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2107,8 +2617,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.83.200.69": { @@ -2136,8 +2652,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2147,8 +2669,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "unknown": { @@ -2181,8 +2709,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2192,8 +2726,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.110.121.96": { @@ -2222,8 +2762,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2232,8 +2778,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } }, "100.103.90.82": { @@ -2262,8 +2814,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2277,7 +2835,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "tailscale.com/cap/webui": [{}] } + "CapMap": { + "tailscale.com/cap/webui": [{}] + } } } } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-A4.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-A4.json index 13e16aad..09cc6dd1 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-A4.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-A4.json @@ -40,7 +40,15 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["*"], "app": { "tailscale.com/cap/relay": [{}] } }], + "grants_section": [ + { + "src": ["*"], + "dst": ["*"], + "app": { + "tailscale.com/cap/relay": [{}] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -63,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -138,7 +148,9 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "tailscale.com/cap/relay": [{}] } + "CapMap": { + "tailscale.com/cap/relay": [{}] + } } ] }, @@ -152,7 +164,9 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "tailscale.com/cap/relay-target": null } + "CapMap": { + "tailscale.com/cap/relay-target": null + } } ] } @@ -180,8 +194,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "tailscale.com/cap/relay", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "tailscale.com/cap/relay", "Values": [{}] } + { + "Dst": "100.85.66.106/32", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + } ] }, { @@ -206,8 +228,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "tailscale.com/cap/relay-target", "Values": null }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "tailscale.com/cap/relay-target", "Values": null } + { + "Dst": "100.85.66.106/32", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + } ] } ], @@ -237,8 +267,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -249,8 +285,15 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.83.200.69": { @@ -278,8 +321,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -289,8 +338,15 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "unknown": { @@ -323,8 +379,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -334,8 +396,15 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.110.121.96": { @@ -364,8 +433,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -374,8 +449,15 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.103.90.82": { @@ -404,8 +486,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -419,7 +507,10 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.90.199.68": { @@ -448,8 +539,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -458,8 +555,15 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } } } @@ -480,7 +584,9 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "tailscale.com/cap/relay": [{}] } + "CapMap": { + "tailscale.com/cap/relay": [{}] + } } ] }, @@ -494,7 +600,9 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "tailscale.com/cap/relay-target": null } + "CapMap": { + "tailscale.com/cap/relay-target": null + } } ] } @@ -522,8 +630,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "tailscale.com/cap/relay", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "tailscale.com/cap/relay", "Values": [{}] } + { + "Dst": "100.92.142.61/32", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + } ] }, { @@ -548,8 +664,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "tailscale.com/cap/relay-target", "Values": null }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "tailscale.com/cap/relay-target", "Values": null } + { + "Dst": "100.92.142.61/32", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + } ] } ], @@ -579,8 +703,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -590,8 +720,15 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.83.200.69": { @@ -619,8 +756,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -630,8 +773,15 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "unknown": { @@ -664,8 +814,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -675,8 +831,15 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.110.121.96": { @@ -705,8 +868,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -715,8 +884,15 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.103.90.82": { @@ -745,8 +921,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -760,7 +942,10 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.90.199.68": { @@ -789,8 +974,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -799,8 +990,15 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } } } @@ -821,7 +1019,9 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "tailscale.com/cap/relay": [{}] } + "CapMap": { + "tailscale.com/cap/relay": [{}] + } } ] }, @@ -835,7 +1035,9 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "tailscale.com/cap/relay-target": null } + "CapMap": { + "tailscale.com/cap/relay-target": null + } } ] } @@ -863,8 +1065,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "tailscale.com/cap/relay", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "tailscale.com/cap/relay", "Values": [{}] } + { + "Dst": "100.83.200.69/32", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + } ] }, { @@ -889,8 +1099,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "tailscale.com/cap/relay-target", "Values": null }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "tailscale.com/cap/relay-target", "Values": null } + { + "Dst": "100.83.200.69/32", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + } ] } ], @@ -920,8 +1138,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -931,8 +1155,15 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.92.142.61": { @@ -960,8 +1191,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -972,8 +1209,15 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "unknown": { @@ -1006,8 +1250,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1017,8 +1267,15 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.110.121.96": { @@ -1047,8 +1304,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1057,8 +1320,15 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.103.90.82": { @@ -1087,8 +1357,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1102,7 +1378,10 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.90.199.68": { @@ -1131,8 +1410,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1141,8 +1426,15 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } } } @@ -1208,7 +1500,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "tailscale.com/cap/relay": [{}] } + "CapMap": { + "tailscale.com/cap/relay": [{}] + } } ] }, @@ -1222,7 +1516,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "tailscale.com/cap/relay-target": null } + "CapMap": { + "tailscale.com/cap/relay-target": null + } } ] } @@ -1250,8 +1546,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "tailscale.com/cap/relay", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "tailscale.com/cap/relay", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + } ] }, { @@ -1276,8 +1580,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "tailscale.com/cap/relay-target", "Values": null }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "tailscale.com/cap/relay-target", "Values": null } + { + "Dst": "100.108.74.26/32", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + } ] } ], @@ -1307,8 +1619,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1318,8 +1636,15 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.92.142.61": { @@ -1347,8 +1672,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1359,8 +1690,15 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.83.200.69": { @@ -1388,8 +1726,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1399,8 +1743,15 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "unknown": { @@ -1434,8 +1785,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1444,8 +1801,15 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.103.90.82": { @@ -1474,8 +1838,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1489,7 +1859,10 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.90.199.68": { @@ -1518,8 +1891,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1529,8 +1908,15 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } } } @@ -1551,7 +1937,9 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "tailscale.com/cap/relay": [{}] } + "CapMap": { + "tailscale.com/cap/relay": [{}] + } } ] }, @@ -1565,7 +1953,9 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "tailscale.com/cap/relay-target": null } + "CapMap": { + "tailscale.com/cap/relay-target": null + } } ] } @@ -1593,8 +1983,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "tailscale.com/cap/relay", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "tailscale.com/cap/relay", "Values": [{}] } + { + "Dst": "100.110.121.96/32", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + } ] }, { @@ -1619,8 +2017,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "tailscale.com/cap/relay-target", "Values": null }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "tailscale.com/cap/relay-target", "Values": null } + { + "Dst": "100.110.121.96/32", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + } ] } ], @@ -1650,8 +2056,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1661,8 +2073,15 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.92.142.61": { @@ -1690,8 +2109,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1702,8 +2127,15 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.83.200.69": { @@ -1731,8 +2163,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1742,8 +2180,15 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "unknown": { @@ -1776,8 +2221,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1788,8 +2239,15 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.103.90.82": { @@ -1818,8 +2276,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1834,7 +2298,10 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.90.199.68": { @@ -1863,8 +2330,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1874,8 +2347,15 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } } } @@ -1896,7 +2376,9 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "tailscale.com/cap/relay": [{}] } + "CapMap": { + "tailscale.com/cap/relay": [{}] + } } ] }, @@ -1910,7 +2392,9 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "tailscale.com/cap/relay-target": null } + "CapMap": { + "tailscale.com/cap/relay-target": null + } } ] } @@ -1938,8 +2422,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "tailscale.com/cap/relay", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "tailscale.com/cap/relay", "Values": [{}] } + { + "Dst": "100.103.90.82/32", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + } ] }, { @@ -1964,8 +2456,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "tailscale.com/cap/relay-target", "Values": null }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "tailscale.com/cap/relay-target", "Values": null } + { + "Dst": "100.103.90.82/32", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + } ] } ], @@ -1995,8 +2495,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2006,8 +2512,15 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.92.142.61": { @@ -2035,8 +2548,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2047,8 +2566,15 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.83.200.69": { @@ -2076,8 +2602,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2087,8 +2619,15 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "unknown": { @@ -2121,8 +2660,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2133,8 +2678,15 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.110.121.96": { @@ -2163,8 +2715,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2173,8 +2731,15 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.90.199.68": { @@ -2203,8 +2768,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2214,8 +2785,15 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } } } @@ -2236,7 +2814,9 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "tailscale.com/cap/relay": [{}] } + "CapMap": { + "tailscale.com/cap/relay": [{}] + } } ] }, @@ -2250,7 +2830,9 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "tailscale.com/cap/relay-target": null } + "CapMap": { + "tailscale.com/cap/relay-target": null + } } ] } @@ -2278,8 +2860,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "tailscale.com/cap/relay", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "tailscale.com/cap/relay", "Values": [{}] } + { + "Dst": "100.90.199.68/32", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + } ] }, { @@ -2304,8 +2894,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "tailscale.com/cap/relay-target", "Values": null }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "tailscale.com/cap/relay-target", "Values": null } + { + "Dst": "100.90.199.68/32", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + } ] } ], @@ -2335,8 +2933,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2346,8 +2950,15 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.92.142.61": { @@ -2375,8 +2986,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2387,8 +3004,15 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.83.200.69": { @@ -2416,8 +3040,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2427,8 +3057,15 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "unknown": { @@ -2461,8 +3098,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2472,8 +3115,15 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.110.121.96": { @@ -2502,8 +3152,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2512,8 +3168,15 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } }, "100.103.90.82": { @@ -2542,8 +3205,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2557,7 +3226,10 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null } + "CapMap": { + "tailscale.com/cap/relay": [{}], + "tailscale.com/cap/relay-target": null + } } } } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-A6.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-A6.json index 4964a600..6a5cfc2d 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-A6.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-A6.json @@ -49,7 +49,14 @@ { "src": ["autogroup:member"], "dst": ["autogroup:self"], - "app": { "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] } + "app": { + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] + } } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", @@ -74,7 +81,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -369,7 +378,14 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] } + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] + } } ] }, @@ -378,7 +394,9 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -393,12 +411,22 @@ { "Dst": "100.110.121.96/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] } ] }, @@ -408,8 +436,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.110.121.96/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -462,7 +498,14 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] } + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] + } } ] }, @@ -471,7 +514,9 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -486,12 +531,22 @@ { "Dst": "100.103.90.82/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] } ] }, @@ -501,8 +556,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.103.90.82/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -555,7 +618,14 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] } + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] + } } ] }, @@ -564,7 +634,9 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -579,12 +651,22 @@ { "Dst": "100.90.199.68/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] } ] }, @@ -594,8 +676,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.90.199.68/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-B1.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-B1.json index c54ec78c..16c470ea 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-B1.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-B1.json @@ -50,7 +50,15 @@ { "src": ["*"], "dst": ["tag:server"], - "app": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "app": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", @@ -75,7 +83,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -182,8 +192,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -193,7 +209,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -262,8 +282,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -273,7 +299,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -342,8 +372,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -353,7 +389,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -435,7 +475,15 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } ] } @@ -466,12 +514,24 @@ { "Dst": "100.108.74.26/32", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] }, { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] } ] } @@ -502,8 +562,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -513,8 +579,20 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } }, "100.92.142.61": { @@ -542,8 +620,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -554,8 +638,20 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } }, "100.83.200.69": { @@ -583,8 +679,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -594,8 +696,20 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } }, "unknown": { @@ -629,8 +743,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -639,8 +759,20 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } }, "100.103.90.82": { @@ -669,8 +801,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -684,7 +822,15 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } }, "100.90.199.68": { @@ -713,8 +859,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -723,8 +875,20 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } } } @@ -782,8 +946,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -793,7 +963,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -862,8 +1036,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -873,7 +1053,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -942,8 +1126,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -953,7 +1143,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-B2.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-B2.json index d4206412..8637ad97 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-B2.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-B2.json @@ -57,8 +57,16 @@ "dst": ["tag:server"], "app": { "tailscale.com/cap/kubernetes": [ - { "impersonate": { "groups": ["readers"] } }, - { "impersonate": { "groups": ["writers"] } } + { + "impersonate": { + "groups": ["readers"] + } + }, + { + "impersonate": { + "groups": ["writers"] + } + } ] } } @@ -85,7 +93,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -192,8 +202,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -203,7 +219,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -272,8 +292,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -283,7 +309,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -352,8 +382,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -363,7 +399,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -447,8 +487,16 @@ "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], "CapMap": { "tailscale.com/cap/kubernetes": [ - { "impersonate": { "groups": ["readers"] } }, - { "impersonate": { "groups": ["writers"] } } + { + "impersonate": { + "groups": ["readers"] + } + }, + { + "impersonate": { + "groups": ["writers"] + } + } ] } } @@ -481,12 +529,34 @@ { "Dst": "100.108.74.26/32", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["readers"] } }, { "impersonate": { "groups": ["writers"] } }] + "Values": [ + { + "impersonate": { + "groups": ["readers"] + } + }, + { + "impersonate": { + "groups": ["writers"] + } + } + ] }, { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["readers"] } }, { "impersonate": { "groups": ["writers"] } }] + "Values": [ + { + "impersonate": { + "groups": ["readers"] + } + }, + { + "impersonate": { + "groups": ["writers"] + } + } + ] } ] } @@ -517,8 +587,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -528,11 +604,23 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/kubernetes": [ - { "impersonate": { "groups": ["readers"] } }, - { "impersonate": { "groups": ["writers"] } } + { + "impersonate": { + "groups": ["readers"] + } + }, + { + "impersonate": { + "groups": ["writers"] + } + } ] } } @@ -562,8 +650,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -574,11 +668,23 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/kubernetes": [ - { "impersonate": { "groups": ["readers"] } }, - { "impersonate": { "groups": ["writers"] } } + { + "impersonate": { + "groups": ["readers"] + } + }, + { + "impersonate": { + "groups": ["writers"] + } + } ] } } @@ -608,8 +714,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -619,11 +731,23 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/kubernetes": [ - { "impersonate": { "groups": ["readers"] } }, - { "impersonate": { "groups": ["writers"] } } + { + "impersonate": { + "groups": ["readers"] + } + }, + { + "impersonate": { + "groups": ["writers"] + } + } ] } } @@ -659,8 +783,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -669,11 +799,23 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { "tailscale.com/cap/kubernetes": [ - { "impersonate": { "groups": ["readers"] } }, - { "impersonate": { "groups": ["writers"] } } + { + "impersonate": { + "groups": ["readers"] + } + }, + { + "impersonate": { + "groups": ["writers"] + } + } ] } } @@ -704,8 +846,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -721,8 +869,16 @@ }, "CapMap": { "tailscale.com/cap/kubernetes": [ - { "impersonate": { "groups": ["readers"] } }, - { "impersonate": { "groups": ["writers"] } } + { + "impersonate": { + "groups": ["readers"] + } + }, + { + "impersonate": { + "groups": ["writers"] + } + } ] } } @@ -753,8 +909,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -763,11 +925,23 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { "tailscale.com/cap/kubernetes": [ - { "impersonate": { "groups": ["readers"] } }, - { "impersonate": { "groups": ["writers"] } } + { + "impersonate": { + "groups": ["readers"] + } + }, + { + "impersonate": { + "groups": ["writers"] + } + } ] } } @@ -827,8 +1001,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -838,7 +1018,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -907,8 +1091,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -918,7 +1108,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -987,8 +1181,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -998,7 +1198,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-B3.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-B3.json index 4edd7544..f6a139ad 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-B3.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-B3.json @@ -46,7 +46,18 @@ ] }, "grants_section": [ - { "src": ["*"], "dst": ["*"], "app": { "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }] } } + { + "src": ["*"], + "dst": ["*"], + "app": { + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ] + } + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -70,7 +81,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -145,7 +158,14 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }] } + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ] + } } ] }, @@ -159,7 +179,9 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -190,12 +212,22 @@ { "Dst": "100.85.66.106/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["docs"], "access": "ro" }] + "Values": [ + { + "shares": ["docs"], + "access": "ro" + } + ] }, { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["docs"], "access": "ro" }] + "Values": [ + { + "shares": ["docs"], + "access": "ro" + } + ] } ] }, @@ -221,8 +253,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.85.66.106/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -252,8 +292,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -264,9 +310,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -296,8 +351,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -307,9 +368,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -344,8 +414,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -355,9 +431,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -388,8 +473,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -398,9 +489,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -431,8 +531,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -447,7 +553,12 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -478,8 +589,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -488,9 +605,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -513,7 +639,14 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }] } + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ] + } } ] }, @@ -527,7 +660,9 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -558,12 +693,22 @@ { "Dst": "100.92.142.61/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["docs"], "access": "ro" }] + "Values": [ + { + "shares": ["docs"], + "access": "ro" + } + ] }, { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["docs"], "access": "ro" }] + "Values": [ + { + "shares": ["docs"], + "access": "ro" + } + ] } ] }, @@ -589,8 +734,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.92.142.61/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -620,8 +773,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -631,9 +790,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -663,8 +831,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -674,9 +848,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -711,8 +894,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -722,9 +911,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -755,8 +953,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -765,9 +969,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -798,8 +1011,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -814,7 +1033,12 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -845,8 +1069,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -855,9 +1085,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -880,7 +1119,14 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }] } + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ] + } } ] }, @@ -894,7 +1140,9 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -925,12 +1173,22 @@ { "Dst": "100.83.200.69/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["docs"], "access": "ro" }] + "Values": [ + { + "shares": ["docs"], + "access": "ro" + } + ] }, { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["docs"], "access": "ro" }] + "Values": [ + { + "shares": ["docs"], + "access": "ro" + } + ] } ] }, @@ -956,8 +1214,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.83.200.69/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -987,8 +1253,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -998,9 +1270,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1030,8 +1311,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1042,9 +1329,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1079,8 +1375,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1090,9 +1392,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1123,8 +1434,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1133,9 +1450,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1166,8 +1492,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1182,7 +1514,12 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1213,8 +1550,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1223,9 +1566,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1293,7 +1645,14 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }] } + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ] + } } ] }, @@ -1307,7 +1666,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -1338,12 +1699,22 @@ { "Dst": "100.108.74.26/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["docs"], "access": "ro" }] + "Values": [ + { + "shares": ["docs"], + "access": "ro" + } + ] }, { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["docs"], "access": "ro" }] + "Values": [ + { + "shares": ["docs"], + "access": "ro" + } + ] } ] }, @@ -1369,8 +1740,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.108.74.26/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -1400,8 +1779,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1411,9 +1796,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1443,8 +1837,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1455,9 +1855,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1487,8 +1896,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1498,9 +1913,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1536,8 +1960,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1546,9 +1976,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1579,8 +2018,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1595,7 +2040,12 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1626,8 +2076,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1636,9 +2092,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1661,7 +2126,14 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }] } + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ] + } } ] }, @@ -1675,7 +2147,9 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -1706,12 +2180,22 @@ { "Dst": "100.110.121.96/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["docs"], "access": "ro" }] + "Values": [ + { + "shares": ["docs"], + "access": "ro" + } + ] }, { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["docs"], "access": "ro" }] + "Values": [ + { + "shares": ["docs"], + "access": "ro" + } + ] } ] }, @@ -1737,8 +2221,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.110.121.96/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -1768,8 +2260,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1779,9 +2277,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1811,8 +2318,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1823,9 +2336,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1855,8 +2377,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1866,9 +2394,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1903,8 +2440,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1914,9 +2457,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1947,8 +2499,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1963,7 +2521,12 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1994,8 +2557,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2004,9 +2573,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2029,7 +2607,14 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }] } + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ] + } } ] }, @@ -2043,7 +2628,9 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -2074,12 +2661,22 @@ { "Dst": "100.103.90.82/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["docs"], "access": "ro" }] + "Values": [ + { + "shares": ["docs"], + "access": "ro" + } + ] }, { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["docs"], "access": "ro" }] + "Values": [ + { + "shares": ["docs"], + "access": "ro" + } + ] } ] }, @@ -2105,8 +2702,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.103.90.82/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -2136,8 +2741,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2147,9 +2758,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2179,8 +2799,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2191,9 +2817,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2223,8 +2858,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2234,9 +2875,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2271,8 +2921,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2282,9 +2938,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2315,8 +2980,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2325,9 +2996,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2358,8 +3038,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2368,9 +3054,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2393,7 +3088,14 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }] } + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ] + } } ] }, @@ -2407,7 +3109,9 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -2438,12 +3142,22 @@ { "Dst": "100.90.199.68/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["docs"], "access": "ro" }] + "Values": [ + { + "shares": ["docs"], + "access": "ro" + } + ] }, { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["docs"], "access": "ro" }] + "Values": [ + { + "shares": ["docs"], + "access": "ro" + } + ] } ] }, @@ -2469,8 +3183,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.90.199.68/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -2500,8 +3222,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2511,9 +3239,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2543,8 +3280,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2555,9 +3298,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2587,8 +3339,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2598,9 +3356,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2635,8 +3402,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2646,9 +3419,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2679,8 +3461,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2689,9 +3477,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2722,8 +3519,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2738,7 +3541,12 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["docs"], "access": "ro" }], + "tailscale.com/cap/drive": [ + { + "shares": ["docs"], + "access": "ro" + } + ], "tailscale.com/cap/drive-sharer": null } } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-B4.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-B4.json index 08e2c99a..0d969cba 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-B4.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-B4.json @@ -55,8 +55,14 @@ "dst": ["*"], "app": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ] } } @@ -83,7 +89,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -160,8 +168,14 @@ "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ] } } @@ -177,7 +191,9 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -209,16 +225,28 @@ "Dst": "100.85.66.106/32", "Cap": "tailscale.com/cap/drive", "Values": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ] }, { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "tailscale.com/cap/drive", "Values": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ] } ] @@ -245,8 +273,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.85.66.106/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -276,8 +312,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -288,11 +330,21 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -323,8 +375,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -334,11 +392,21 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -374,8 +442,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -385,11 +459,21 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -421,8 +505,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -431,11 +521,21 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -467,8 +567,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -484,8 +590,14 @@ }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -517,8 +629,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -527,11 +645,21 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -557,8 +685,14 @@ "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ] } } @@ -574,7 +708,9 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -606,16 +742,28 @@ "Dst": "100.92.142.61/32", "Cap": "tailscale.com/cap/drive", "Values": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ] }, { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "tailscale.com/cap/drive", "Values": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ] } ] @@ -642,8 +790,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.92.142.61/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -673,8 +829,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -684,11 +846,21 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -719,8 +891,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -730,11 +908,21 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -770,8 +958,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -781,11 +975,21 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -817,8 +1021,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -827,11 +1037,21 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -863,8 +1083,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -880,8 +1106,14 @@ }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -913,8 +1145,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -923,11 +1161,21 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -953,8 +1201,14 @@ "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ] } } @@ -970,7 +1224,9 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -1002,16 +1258,28 @@ "Dst": "100.83.200.69/32", "Cap": "tailscale.com/cap/drive", "Values": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ] }, { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "tailscale.com/cap/drive", "Values": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ] } ] @@ -1038,8 +1306,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.83.200.69/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -1069,8 +1345,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1080,11 +1362,21 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -1115,8 +1407,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1127,11 +1425,21 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -1167,8 +1475,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1178,11 +1492,21 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -1214,8 +1538,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1224,11 +1554,21 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -1260,8 +1600,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1277,8 +1623,14 @@ }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -1310,8 +1662,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1320,11 +1678,21 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -1395,8 +1763,14 @@ "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ] } } @@ -1412,7 +1786,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -1444,16 +1820,28 @@ "Dst": "100.108.74.26/32", "Cap": "tailscale.com/cap/drive", "Values": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ] }, { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "tailscale.com/cap/drive", "Values": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ] } ] @@ -1480,8 +1868,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.108.74.26/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -1511,8 +1907,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1522,11 +1924,21 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -1557,8 +1969,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1569,11 +1987,21 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -1604,8 +2032,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1615,11 +2049,21 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -1656,8 +2100,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1666,11 +2116,21 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -1702,8 +2162,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1719,8 +2185,14 @@ }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -1752,8 +2224,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1762,11 +2240,21 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -1792,8 +2280,14 @@ "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ] } } @@ -1809,7 +2303,9 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -1841,16 +2337,28 @@ "Dst": "100.110.121.96/32", "Cap": "tailscale.com/cap/drive", "Values": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ] }, { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "tailscale.com/cap/drive", "Values": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ] } ] @@ -1877,8 +2385,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.110.121.96/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -1908,8 +2424,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1919,11 +2441,21 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -1954,8 +2486,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1966,11 +2504,21 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -2001,8 +2549,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2012,11 +2566,21 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -2052,8 +2616,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2063,11 +2633,21 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -2099,8 +2679,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2116,8 +2702,14 @@ }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -2149,8 +2741,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2159,11 +2757,21 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -2189,8 +2797,14 @@ "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ] } } @@ -2206,7 +2820,9 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -2238,16 +2854,28 @@ "Dst": "100.103.90.82/32", "Cap": "tailscale.com/cap/drive", "Values": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ] }, { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "tailscale.com/cap/drive", "Values": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ] } ] @@ -2274,8 +2902,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.103.90.82/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -2305,8 +2941,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2316,11 +2958,21 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -2351,8 +3003,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2363,11 +3021,21 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -2398,8 +3066,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2409,11 +3083,21 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -2449,8 +3133,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2460,11 +3150,21 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -2496,8 +3196,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2506,11 +3212,21 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -2542,8 +3258,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2552,11 +3274,21 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -2582,8 +3314,14 @@ "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ] } } @@ -2599,7 +3337,9 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -2631,16 +3371,28 @@ "Dst": "100.90.199.68/32", "Cap": "tailscale.com/cap/drive", "Values": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ] }, { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "tailscale.com/cap/drive", "Values": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ] } ] @@ -2667,8 +3419,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.90.199.68/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -2698,8 +3458,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2709,11 +3475,21 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -2744,8 +3520,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2756,11 +3538,21 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -2791,8 +3583,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2802,11 +3600,21 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -2842,8 +3650,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2853,11 +3667,21 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -2889,8 +3713,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2899,11 +3729,21 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } @@ -2935,8 +3775,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2952,8 +3798,14 @@ }, "CapMap": { "tailscale.com/cap/drive": [ - { "shares": ["docs"], "access": "ro" }, - { "shares": ["photos"], "access": "rw" } + { + "shares": ["docs"], + "access": "ro" + }, + { + "shares": ["photos"], + "access": "rw" + } ], "tailscale.com/cap/drive-sharer": null } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-B5.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-B5.json index c8b89348..c016e89b 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-B5.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-B5.json @@ -46,7 +46,18 @@ ] }, "grants_section": [ - { "src": ["*"], "dst": ["*"], "app": { "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] } } + { + "src": ["*"], + "dst": ["*"], + "app": { + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] + } + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -70,7 +81,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -145,7 +158,14 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] } + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] + } } ] }, @@ -159,7 +179,9 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -190,12 +212,22 @@ { "Dst": "100.85.66.106/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] } ] }, @@ -221,8 +253,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.85.66.106/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -252,8 +292,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -264,9 +310,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -296,8 +351,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -307,9 +368,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -344,8 +414,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -355,9 +431,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -388,8 +473,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -398,9 +489,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -431,8 +531,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -447,7 +553,12 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -478,8 +589,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -488,9 +605,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -513,7 +639,14 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] } + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] + } } ] }, @@ -527,7 +660,9 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -558,12 +693,22 @@ { "Dst": "100.92.142.61/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] } ] }, @@ -589,8 +734,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.92.142.61/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -620,8 +773,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -631,9 +790,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -663,8 +831,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -674,9 +848,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -711,8 +894,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -722,9 +911,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -755,8 +953,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -765,9 +969,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -798,8 +1011,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -814,7 +1033,12 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -845,8 +1069,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -855,9 +1085,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -880,7 +1119,14 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] } + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] + } } ] }, @@ -894,7 +1140,9 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -925,12 +1173,22 @@ { "Dst": "100.83.200.69/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] } ] }, @@ -956,8 +1214,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.83.200.69/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -987,8 +1253,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -998,9 +1270,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1030,8 +1311,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1042,9 +1329,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1079,8 +1375,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1090,9 +1392,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1123,8 +1434,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1133,9 +1450,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1166,8 +1492,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1182,7 +1514,12 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1213,8 +1550,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1223,9 +1566,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1293,7 +1645,14 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] } + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] + } } ] }, @@ -1307,7 +1666,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -1338,12 +1699,22 @@ { "Dst": "100.108.74.26/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] } ] }, @@ -1369,8 +1740,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.108.74.26/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -1400,8 +1779,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1411,9 +1796,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1443,8 +1837,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1455,9 +1855,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1487,8 +1896,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1498,9 +1913,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1536,8 +1960,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1546,9 +1976,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1579,8 +2018,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1595,7 +2040,12 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1626,8 +2076,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1636,9 +2092,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1661,7 +2126,14 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] } + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] + } } ] }, @@ -1675,7 +2147,9 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -1706,12 +2180,22 @@ { "Dst": "100.110.121.96/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] } ] }, @@ -1737,8 +2221,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.110.121.96/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -1768,8 +2260,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1779,9 +2277,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1811,8 +2318,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1823,9 +2336,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1855,8 +2377,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1866,9 +2394,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1903,8 +2440,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1914,9 +2457,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1947,8 +2499,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1963,7 +2521,12 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1994,8 +2557,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2004,9 +2573,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2029,7 +2607,14 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] } + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] + } } ] }, @@ -2043,7 +2628,9 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -2074,12 +2661,22 @@ { "Dst": "100.103.90.82/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] } ] }, @@ -2105,8 +2702,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.103.90.82/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -2136,8 +2741,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2147,9 +2758,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2179,8 +2799,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2191,9 +2817,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2223,8 +2858,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2234,9 +2875,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2271,8 +2921,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2282,9 +2938,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2315,8 +2980,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2325,9 +2996,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2358,8 +3038,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2368,9 +3054,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2393,7 +3088,14 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] } + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] + } } ] }, @@ -2407,7 +3109,9 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -2438,12 +3142,22 @@ { "Dst": "100.90.199.68/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] } ] }, @@ -2469,8 +3183,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.90.199.68/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -2500,8 +3222,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2511,9 +3239,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2543,8 +3280,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2555,9 +3298,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2587,8 +3339,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2598,9 +3356,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2635,8 +3402,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2646,9 +3419,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2679,8 +3461,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2689,9 +3477,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2722,8 +3519,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2738,7 +3541,12 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-C1.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-C1.json index 7b4272ef..0ad0302d 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-C1.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-C1.json @@ -40,7 +40,15 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["*"], "app": { "example.com/cap/test": [{}] } }], + "grants_section": [ + { + "src": ["*"], + "dst": ["*"], + "app": { + "example.com/cap/test": [{}] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -63,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -138,7 +148,9 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -166,8 +178,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.85.66.106/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -197,8 +217,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -209,8 +235,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -238,8 +270,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -249,8 +287,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -278,8 +322,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -289,8 +339,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -318,8 +374,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -329,8 +391,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -359,8 +427,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -369,8 +443,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -399,8 +479,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -414,7 +500,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -443,8 +531,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -453,8 +547,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -475,7 +575,9 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -503,8 +605,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.92.142.61/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -534,8 +644,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -545,8 +661,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -574,8 +696,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -585,8 +713,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -614,8 +748,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -625,8 +765,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -654,8 +800,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -665,8 +817,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -695,8 +853,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -705,8 +869,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -735,8 +905,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -750,7 +926,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -779,8 +957,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -789,8 +973,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -811,7 +1001,9 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -839,8 +1031,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.83.200.69/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -870,8 +1070,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -881,8 +1087,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -910,8 +1122,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -922,8 +1140,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -951,8 +1175,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -962,8 +1192,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -991,8 +1227,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1002,8 +1244,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -1032,8 +1280,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1042,8 +1296,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -1072,8 +1332,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1087,7 +1353,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -1116,8 +1384,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1126,8 +1400,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -1146,7 +1426,12 @@ "fd7a:115c:a1e0::/48" ], "CapGrant": [ - { "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], "CapMap": { "example.com/cap/test": [{}] } } + { + "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], + "CapMap": { + "example.com/cap/test": [{}] + } + } ] } ], @@ -1173,8 +1458,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.8.15/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.103.8.15/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::5b37:80f/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -1204,8 +1497,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1215,8 +1514,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -1244,8 +1549,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1256,8 +1567,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -1285,8 +1602,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1296,8 +1619,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -1325,8 +1654,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1336,8 +1671,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -1366,8 +1707,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1376,8 +1723,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -1406,8 +1759,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1421,7 +1780,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -1450,8 +1811,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1460,8 +1827,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -1482,7 +1855,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -1510,8 +1885,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -1541,8 +1924,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1552,8 +1941,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -1581,8 +1976,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1593,8 +1994,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -1622,8 +2029,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1633,8 +2046,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -1662,8 +2081,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1673,8 +2098,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -1703,8 +2134,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1713,8 +2150,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -1743,8 +2186,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1758,7 +2207,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -1787,8 +2238,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1797,8 +2254,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -1819,7 +2282,9 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -1847,8 +2312,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.110.121.96/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -1878,8 +2351,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1889,8 +2368,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -1918,8 +2403,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1930,8 +2421,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -1959,8 +2456,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1970,8 +2473,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -1999,8 +2508,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2010,8 +2525,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -2039,8 +2560,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2050,8 +2577,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -2080,8 +2613,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2095,7 +2634,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -2124,8 +2665,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2134,8 +2681,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -2156,7 +2709,9 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -2184,8 +2739,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.103.90.82/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -2215,8 +2778,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2226,8 +2795,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -2255,8 +2830,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2267,8 +2848,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -2296,8 +2883,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2307,8 +2900,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -2336,8 +2935,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2347,8 +2952,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -2376,8 +2987,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2387,8 +3004,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -2417,8 +3040,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2427,8 +3056,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -2457,8 +3092,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2467,8 +3108,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -2489,7 +3136,9 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -2517,8 +3166,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.90.199.68/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -2548,8 +3205,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2559,8 +3222,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -2588,8 +3257,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2600,8 +3275,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -2629,8 +3310,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2640,8 +3327,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -2669,8 +3362,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2680,8 +3379,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -2709,8 +3414,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2720,8 +3431,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -2750,8 +3467,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2760,8 +3483,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -2790,8 +3519,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2805,7 +3540,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } } } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-C2.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-C2.json index d752211f..f89a7da9 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-C2.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-C2.json @@ -44,7 +44,19 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["*"], "app": { "example.com/cap/test": [{ "role": "admin" }] } }], + "grants_section": [ + { + "src": ["*"], + "dst": ["*"], + "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 @@ -67,7 +79,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -142,7 +156,13 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } ] } @@ -170,8 +190,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "example.com/cap/test", "Values": [{ "role": "admin" }] }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "example.com/cap/test", "Values": [{ "role": "admin" }] } + { + "Dst": "100.85.66.106/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "role": "admin" + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "role": "admin" + } + ] + } ] } ], @@ -201,8 +237,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -213,8 +255,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.83.200.69": { @@ -242,8 +294,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -253,8 +311,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.103.8.15": { @@ -282,8 +350,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -293,8 +367,18 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.108.74.26": { @@ -322,8 +406,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -333,8 +423,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.110.121.96": { @@ -363,8 +463,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -373,8 +479,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.103.90.82": { @@ -403,8 +519,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -418,7 +540,13 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.90.199.68": { @@ -447,8 +575,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -457,8 +591,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } } } @@ -479,7 +623,13 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } ] } @@ -507,8 +657,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "example.com/cap/test", "Values": [{ "role": "admin" }] }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "example.com/cap/test", "Values": [{ "role": "admin" }] } + { + "Dst": "100.92.142.61/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "role": "admin" + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "role": "admin" + } + ] + } ] } ], @@ -538,8 +704,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -549,8 +721,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.83.200.69": { @@ -578,8 +760,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -589,8 +777,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.103.8.15": { @@ -618,8 +816,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -629,8 +833,18 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.108.74.26": { @@ -658,8 +872,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -669,8 +889,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.110.121.96": { @@ -699,8 +929,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -709,8 +945,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.103.90.82": { @@ -739,8 +985,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -754,7 +1006,13 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.90.199.68": { @@ -783,8 +1041,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -793,8 +1057,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } } } @@ -815,7 +1089,13 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } ] } @@ -843,8 +1123,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "example.com/cap/test", "Values": [{ "role": "admin" }] }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "example.com/cap/test", "Values": [{ "role": "admin" }] } + { + "Dst": "100.83.200.69/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "role": "admin" + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "role": "admin" + } + ] + } ] } ], @@ -874,8 +1170,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -885,8 +1187,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.92.142.61": { @@ -914,8 +1226,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -926,8 +1244,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.103.8.15": { @@ -955,8 +1283,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -966,8 +1300,18 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.108.74.26": { @@ -995,8 +1339,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1006,8 +1356,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.110.121.96": { @@ -1036,8 +1396,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1046,8 +1412,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.103.90.82": { @@ -1076,8 +1452,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1091,7 +1473,13 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.90.199.68": { @@ -1120,8 +1508,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1130,8 +1524,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } } } @@ -1152,7 +1556,13 @@ "CapGrant": [ { "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } ] } @@ -1180,8 +1590,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.8.15/32", "Cap": "example.com/cap/test", "Values": [{ "role": "admin" }] }, - { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "example.com/cap/test", "Values": [{ "role": "admin" }] } + { + "Dst": "100.103.8.15/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "role": "admin" + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::5b37:80f/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "role": "admin" + } + ] + } ] } ], @@ -1211,8 +1637,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1222,8 +1654,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.92.142.61": { @@ -1251,8 +1693,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1263,8 +1711,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.83.200.69": { @@ -1292,8 +1750,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1303,8 +1767,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.108.74.26": { @@ -1332,8 +1806,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1343,8 +1823,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.110.121.96": { @@ -1373,8 +1863,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1383,8 +1879,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.103.90.82": { @@ -1413,8 +1919,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1428,7 +1940,13 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.90.199.68": { @@ -1457,8 +1975,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1467,8 +1991,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } } } @@ -1489,7 +2023,13 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } ] } @@ -1517,8 +2057,24 @@ "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" }] } + { + "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" + } + ] + } ] } ], @@ -1548,8 +2104,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1559,8 +2121,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.92.142.61": { @@ -1588,8 +2160,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1600,8 +2178,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.83.200.69": { @@ -1629,8 +2217,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1640,8 +2234,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.103.8.15": { @@ -1669,8 +2273,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1680,8 +2290,18 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.110.121.96": { @@ -1710,8 +2330,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1720,8 +2346,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.103.90.82": { @@ -1750,8 +2386,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1765,7 +2407,13 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.90.199.68": { @@ -1794,8 +2442,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1804,8 +2458,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } } } @@ -1826,7 +2490,13 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } ] } @@ -1854,8 +2524,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "example.com/cap/test", "Values": [{ "role": "admin" }] }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "example.com/cap/test", "Values": [{ "role": "admin" }] } + { + "Dst": "100.110.121.96/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "role": "admin" + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "role": "admin" + } + ] + } ] } ], @@ -1885,8 +2571,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1896,8 +2588,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.92.142.61": { @@ -1925,8 +2627,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1937,8 +2645,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.83.200.69": { @@ -1966,8 +2684,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1977,8 +2701,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.103.8.15": { @@ -2006,8 +2740,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2017,8 +2757,18 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.108.74.26": { @@ -2046,8 +2796,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2057,8 +2813,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.103.90.82": { @@ -2087,8 +2853,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2102,7 +2874,13 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.90.199.68": { @@ -2131,8 +2909,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2141,8 +2925,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } } } @@ -2163,7 +2957,13 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } ] } @@ -2191,8 +2991,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "example.com/cap/test", "Values": [{ "role": "admin" }] }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "example.com/cap/test", "Values": [{ "role": "admin" }] } + { + "Dst": "100.103.90.82/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "role": "admin" + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "role": "admin" + } + ] + } ] } ], @@ -2222,8 +3038,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2233,8 +3055,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.92.142.61": { @@ -2262,8 +3094,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2274,8 +3112,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.83.200.69": { @@ -2303,8 +3151,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2314,8 +3168,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.103.8.15": { @@ -2343,8 +3207,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2354,8 +3224,18 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.108.74.26": { @@ -2383,8 +3263,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2394,8 +3280,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.110.121.96": { @@ -2424,8 +3320,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2434,8 +3336,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.90.199.68": { @@ -2464,8 +3376,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2474,8 +3392,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } } } @@ -2496,7 +3424,13 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } ] } @@ -2524,8 +3458,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "example.com/cap/test", "Values": [{ "role": "admin" }] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "example.com/cap/test", "Values": [{ "role": "admin" }] } + { + "Dst": "100.90.199.68/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "role": "admin" + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "role": "admin" + } + ] + } ] } ], @@ -2555,8 +3505,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2566,8 +3522,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.92.142.61": { @@ -2595,8 +3561,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2607,8 +3579,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.83.200.69": { @@ -2636,8 +3618,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2647,8 +3635,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.103.8.15": { @@ -2676,8 +3674,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2687,8 +3691,18 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.108.74.26": { @@ -2716,8 +3730,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2727,8 +3747,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.110.121.96": { @@ -2757,8 +3787,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2767,8 +3803,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.103.90.82": { @@ -2797,8 +3843,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2812,7 +3864,13 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } } } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-C3.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-C3.json index 40b56246..cb413f4c 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-C3.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-C3.json @@ -48,7 +48,20 @@ ] }, "grants_section": [ - { "src": ["*"], "dst": ["*"], "app": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } } + { + "src": ["*"], + "dst": ["*"], + "app": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -72,7 +85,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -147,7 +162,16 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } ] } @@ -178,12 +202,26 @@ { "Dst": "100.85.66.106/32", "Cap": "example.com/cap/test", - "Values": [{ "role": "admin" }, { "role": "viewer" }] + "Values": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] }, { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "example.com/cap/test", - "Values": [{ "role": "admin" }, { "role": "viewer" }] + "Values": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] } ] } @@ -214,8 +252,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -226,8 +270,21 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.83.200.69": { @@ -255,8 +312,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -266,8 +329,21 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.103.8.15": { @@ -295,8 +371,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -306,8 +388,21 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.108.74.26": { @@ -335,8 +430,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -346,8 +447,21 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.110.121.96": { @@ -376,8 +490,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -386,8 +506,21 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.103.90.82": { @@ -416,8 +549,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -431,7 +570,16 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.90.199.68": { @@ -460,8 +608,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -470,8 +624,21 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } } } @@ -492,7 +659,16 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } ] } @@ -523,12 +699,26 @@ { "Dst": "100.92.142.61/32", "Cap": "example.com/cap/test", - "Values": [{ "role": "admin" }, { "role": "viewer" }] + "Values": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] }, { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "example.com/cap/test", - "Values": [{ "role": "admin" }, { "role": "viewer" }] + "Values": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] } ] } @@ -559,8 +749,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -570,8 +766,21 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.83.200.69": { @@ -599,8 +808,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -610,8 +825,21 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.103.8.15": { @@ -639,8 +867,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -650,8 +884,21 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.108.74.26": { @@ -679,8 +926,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -690,8 +943,21 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.110.121.96": { @@ -720,8 +986,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -730,8 +1002,21 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.103.90.82": { @@ -760,8 +1045,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -775,7 +1066,16 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.90.199.68": { @@ -804,8 +1104,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -814,8 +1120,21 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } } } @@ -836,7 +1155,16 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } ] } @@ -867,12 +1195,26 @@ { "Dst": "100.83.200.69/32", "Cap": "example.com/cap/test", - "Values": [{ "role": "admin" }, { "role": "viewer" }] + "Values": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] }, { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "example.com/cap/test", - "Values": [{ "role": "admin" }, { "role": "viewer" }] + "Values": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] } ] } @@ -903,8 +1245,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -914,8 +1262,21 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.92.142.61": { @@ -943,8 +1304,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -955,8 +1322,21 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.103.8.15": { @@ -984,8 +1364,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -995,8 +1381,21 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.108.74.26": { @@ -1024,8 +1423,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1035,8 +1440,21 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.110.121.96": { @@ -1065,8 +1483,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1075,8 +1499,21 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.103.90.82": { @@ -1105,8 +1542,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1120,7 +1563,16 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.90.199.68": { @@ -1149,8 +1601,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1159,8 +1617,21 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } } } @@ -1181,7 +1652,16 @@ "CapGrant": [ { "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } ] } @@ -1212,12 +1692,26 @@ { "Dst": "100.103.8.15/32", "Cap": "example.com/cap/test", - "Values": [{ "role": "admin" }, { "role": "viewer" }] + "Values": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] }, { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "example.com/cap/test", - "Values": [{ "role": "admin" }, { "role": "viewer" }] + "Values": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] } ] } @@ -1248,8 +1742,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1259,8 +1759,21 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.92.142.61": { @@ -1288,8 +1801,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1300,8 +1819,21 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.83.200.69": { @@ -1329,8 +1861,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1340,8 +1878,21 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.108.74.26": { @@ -1369,8 +1920,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1380,8 +1937,21 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.110.121.96": { @@ -1410,8 +1980,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1420,8 +1996,21 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.103.90.82": { @@ -1450,8 +2039,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1465,7 +2060,16 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.90.199.68": { @@ -1494,8 +2098,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1504,8 +2114,21 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } } } @@ -1526,7 +2149,16 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } ] } @@ -1557,12 +2189,26 @@ { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", - "Values": [{ "role": "admin" }, { "role": "viewer" }] + "Values": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] }, { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", - "Values": [{ "role": "admin" }, { "role": "viewer" }] + "Values": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] } ] } @@ -1593,8 +2239,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1604,8 +2256,21 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.92.142.61": { @@ -1633,8 +2298,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1645,8 +2316,21 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.83.200.69": { @@ -1674,8 +2358,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1685,8 +2375,21 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.103.8.15": { @@ -1714,8 +2417,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1725,8 +2434,21 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.110.121.96": { @@ -1755,8 +2477,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1765,8 +2493,21 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.103.90.82": { @@ -1795,8 +2536,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1810,7 +2557,16 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.90.199.68": { @@ -1839,8 +2595,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1849,8 +2611,21 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } } } @@ -1871,7 +2646,16 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } ] } @@ -1902,12 +2686,26 @@ { "Dst": "100.110.121.96/32", "Cap": "example.com/cap/test", - "Values": [{ "role": "admin" }, { "role": "viewer" }] + "Values": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] }, { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "example.com/cap/test", - "Values": [{ "role": "admin" }, { "role": "viewer" }] + "Values": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] } ] } @@ -1938,8 +2736,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1949,8 +2753,21 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.92.142.61": { @@ -1978,8 +2795,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1990,8 +2813,21 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.83.200.69": { @@ -2019,8 +2855,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2030,8 +2872,21 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.103.8.15": { @@ -2059,8 +2914,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2070,8 +2931,21 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.108.74.26": { @@ -2099,8 +2973,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2110,8 +2990,21 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.103.90.82": { @@ -2140,8 +3033,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2155,7 +3054,16 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.90.199.68": { @@ -2184,8 +3092,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2194,8 +3108,21 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } } } @@ -2216,7 +3143,16 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } ] } @@ -2247,12 +3183,26 @@ { "Dst": "100.103.90.82/32", "Cap": "example.com/cap/test", - "Values": [{ "role": "admin" }, { "role": "viewer" }] + "Values": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] }, { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "example.com/cap/test", - "Values": [{ "role": "admin" }, { "role": "viewer" }] + "Values": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] } ] } @@ -2283,8 +3233,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2294,8 +3250,21 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.92.142.61": { @@ -2323,8 +3292,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2335,8 +3310,21 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.83.200.69": { @@ -2364,8 +3352,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2375,8 +3369,21 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.103.8.15": { @@ -2404,8 +3411,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2415,8 +3428,21 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.108.74.26": { @@ -2444,8 +3470,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2455,8 +3487,21 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.110.121.96": { @@ -2485,8 +3530,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2495,8 +3546,21 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.90.199.68": { @@ -2525,8 +3589,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2535,8 +3605,21 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } } } @@ -2557,7 +3640,16 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } ] } @@ -2588,12 +3680,26 @@ { "Dst": "100.90.199.68/32", "Cap": "example.com/cap/test", - "Values": [{ "role": "admin" }, { "role": "viewer" }] + "Values": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] }, { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "example.com/cap/test", - "Values": [{ "role": "admin" }, { "role": "viewer" }] + "Values": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] } ] } @@ -2624,8 +3730,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2635,8 +3747,21 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.92.142.61": { @@ -2664,8 +3789,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2676,8 +3807,21 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.83.200.69": { @@ -2705,8 +3849,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2716,8 +3866,21 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.103.8.15": { @@ -2745,8 +3908,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2756,8 +3925,21 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.108.74.26": { @@ -2785,8 +3967,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2796,8 +3984,21 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.110.121.96": { @@ -2826,8 +4027,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2836,8 +4043,21 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } }, "100.103.90.82": { @@ -2866,8 +4086,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2881,7 +4107,16 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }, { "role": "viewer" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + }, + { + "role": "viewer" + } + ] + } } } } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-C4.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-C4.json index 8543e419..ae549c4f 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-C4.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-C4.json @@ -49,7 +49,14 @@ { "src": ["*"], "dst": ["*"], - "app": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "app": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", @@ -74,7 +81,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -149,7 +158,14 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } ] } @@ -177,10 +193,34 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "100.85.66.106/32", "Cap": "example.com/cap/two", "Values": [{ "level": "high" }] }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "example.com/cap/two", "Values": [{ "level": "high" }] } + { + "Dst": "100.85.66.106/32", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "100.85.66.106/32", + "Cap": "example.com/cap/two", + "Values": [ + { + "level": "high" + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "example.com/cap/two", + "Values": [ + { + "level": "high" + } + ] + } ] } ], @@ -210,8 +250,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -222,8 +268,19 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.83.200.69": { @@ -251,8 +308,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -262,8 +325,19 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.103.8.15": { @@ -291,8 +365,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -302,8 +382,19 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.108.74.26": { @@ -331,8 +422,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -342,8 +439,19 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.110.121.96": { @@ -372,8 +480,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -382,8 +496,19 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.103.90.82": { @@ -412,8 +537,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -427,7 +558,14 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.90.199.68": { @@ -456,8 +594,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -466,8 +610,19 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } } } @@ -488,7 +643,14 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } ] } @@ -516,10 +678,34 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "100.92.142.61/32", "Cap": "example.com/cap/two", "Values": [{ "level": "high" }] }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "example.com/cap/two", "Values": [{ "level": "high" }] } + { + "Dst": "100.92.142.61/32", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "100.92.142.61/32", + "Cap": "example.com/cap/two", + "Values": [ + { + "level": "high" + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "example.com/cap/two", + "Values": [ + { + "level": "high" + } + ] + } ] } ], @@ -549,8 +735,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -560,8 +752,19 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.83.200.69": { @@ -589,8 +792,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -600,8 +809,19 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.103.8.15": { @@ -629,8 +849,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -640,8 +866,19 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.108.74.26": { @@ -669,8 +906,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -680,8 +923,19 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.110.121.96": { @@ -710,8 +964,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -720,8 +980,19 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.103.90.82": { @@ -750,8 +1021,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -765,7 +1042,14 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.90.199.68": { @@ -794,8 +1078,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -804,8 +1094,19 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } } } @@ -826,7 +1127,14 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } ] } @@ -854,10 +1162,34 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "100.83.200.69/32", "Cap": "example.com/cap/two", "Values": [{ "level": "high" }] }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "example.com/cap/two", "Values": [{ "level": "high" }] } + { + "Dst": "100.83.200.69/32", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "100.83.200.69/32", + "Cap": "example.com/cap/two", + "Values": [ + { + "level": "high" + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "example.com/cap/two", + "Values": [ + { + "level": "high" + } + ] + } ] } ], @@ -887,8 +1219,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -898,8 +1236,19 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.92.142.61": { @@ -927,8 +1276,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -939,8 +1294,19 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.103.8.15": { @@ -968,8 +1334,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -979,8 +1351,19 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.108.74.26": { @@ -1008,8 +1391,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1019,8 +1408,19 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.110.121.96": { @@ -1049,8 +1449,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1059,8 +1465,19 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.103.90.82": { @@ -1089,8 +1506,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1104,7 +1527,14 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.90.199.68": { @@ -1133,8 +1563,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1143,8 +1579,19 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } } } @@ -1165,7 +1612,14 @@ "CapGrant": [ { "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } ] } @@ -1193,10 +1647,34 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.8.15/32", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "100.103.8.15/32", "Cap": "example.com/cap/two", "Values": [{ "level": "high" }] }, - { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "example.com/cap/two", "Values": [{ "level": "high" }] } + { + "Dst": "100.103.8.15/32", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "100.103.8.15/32", + "Cap": "example.com/cap/two", + "Values": [ + { + "level": "high" + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::5b37:80f/128", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::5b37:80f/128", + "Cap": "example.com/cap/two", + "Values": [ + { + "level": "high" + } + ] + } ] } ], @@ -1226,8 +1704,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1237,8 +1721,19 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.92.142.61": { @@ -1266,8 +1761,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1278,8 +1779,19 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.83.200.69": { @@ -1307,8 +1819,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1318,8 +1836,19 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.108.74.26": { @@ -1347,8 +1876,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1358,8 +1893,19 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.110.121.96": { @@ -1388,8 +1934,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1398,8 +1950,19 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.103.90.82": { @@ -1428,8 +1991,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1443,7 +2012,14 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.90.199.68": { @@ -1472,8 +2048,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1482,8 +2064,19 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } } } @@ -1504,7 +2097,14 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } ] } @@ -1532,10 +2132,34 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/two", "Values": [{ "level": "high" }] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/two", "Values": [{ "level": "high" }] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/two", + "Values": [ + { + "level": "high" + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/two", + "Values": [ + { + "level": "high" + } + ] + } ] } ], @@ -1565,8 +2189,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1576,8 +2206,19 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.92.142.61": { @@ -1605,8 +2246,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1617,8 +2264,19 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.83.200.69": { @@ -1646,8 +2304,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1657,8 +2321,19 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.103.8.15": { @@ -1686,8 +2361,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1697,8 +2378,19 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.110.121.96": { @@ -1727,8 +2419,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1737,8 +2435,19 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.103.90.82": { @@ -1767,8 +2476,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1782,7 +2497,14 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.90.199.68": { @@ -1811,8 +2533,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1821,8 +2549,19 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } } } @@ -1843,7 +2582,14 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } ] } @@ -1871,10 +2617,34 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "example.com/cap/two", "Values": [{ "level": "high" }] }, - { "Dst": "100.110.121.96/32", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "example.com/cap/two", "Values": [{ "level": "high" }] } + { + "Dst": "100.110.121.96/32", + "Cap": "example.com/cap/two", + "Values": [ + { + "level": "high" + } + ] + }, + { + "Dst": "100.110.121.96/32", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "example.com/cap/two", + "Values": [ + { + "level": "high" + } + ] + } ] } ], @@ -1904,8 +2674,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1915,8 +2691,19 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.92.142.61": { @@ -1944,8 +2731,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1956,8 +2749,19 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.83.200.69": { @@ -1985,8 +2789,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1996,8 +2806,19 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.103.8.15": { @@ -2025,8 +2846,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2036,8 +2863,19 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.108.74.26": { @@ -2065,8 +2903,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2076,8 +2920,19 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.103.90.82": { @@ -2106,8 +2961,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2121,7 +2982,14 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.90.199.68": { @@ -2150,8 +3018,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2160,8 +3034,19 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } } } @@ -2182,7 +3067,14 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } ] } @@ -2210,10 +3102,34 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "100.103.90.82/32", "Cap": "example.com/cap/two", "Values": [{ "level": "high" }] }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "example.com/cap/two", "Values": [{ "level": "high" }] }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "example.com/cap/one", "Values": [{}] } + { + "Dst": "100.103.90.82/32", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "100.103.90.82/32", + "Cap": "example.com/cap/two", + "Values": [ + { + "level": "high" + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "example.com/cap/two", + "Values": [ + { + "level": "high" + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "example.com/cap/one", + "Values": [{}] + } ] } ], @@ -2243,8 +3159,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2254,8 +3176,19 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.92.142.61": { @@ -2283,8 +3216,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2295,8 +3234,19 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.83.200.69": { @@ -2324,8 +3274,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2335,8 +3291,19 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.103.8.15": { @@ -2364,8 +3331,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2375,8 +3348,19 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.108.74.26": { @@ -2404,8 +3388,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2415,8 +3405,19 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.110.121.96": { @@ -2445,8 +3446,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2455,8 +3462,19 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.90.199.68": { @@ -2485,8 +3503,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2495,8 +3519,19 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } } } @@ -2517,7 +3552,14 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } ] } @@ -2545,10 +3587,34 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "100.90.199.68/32", "Cap": "example.com/cap/two", "Values": [{ "level": "high" }] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "example.com/cap/two", "Values": [{ "level": "high" }] } + { + "Dst": "100.90.199.68/32", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "100.90.199.68/32", + "Cap": "example.com/cap/two", + "Values": [ + { + "level": "high" + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "example.com/cap/two", + "Values": [ + { + "level": "high" + } + ] + } ] } ], @@ -2578,8 +3644,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2589,8 +3661,19 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.92.142.61": { @@ -2618,8 +3701,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2630,8 +3719,19 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.83.200.69": { @@ -2659,8 +3759,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2670,8 +3776,19 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.103.8.15": { @@ -2699,8 +3816,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2710,8 +3833,19 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.108.74.26": { @@ -2739,8 +3873,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2750,8 +3890,19 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.110.121.96": { @@ -2780,8 +3931,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2790,8 +3947,19 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } }, "100.103.90.82": { @@ -2820,8 +3988,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2835,7 +4009,14 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "level": "high" }] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "level": "high" + } + ] + } } } } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-C5.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-C5.json index 6440ab92..4218e377 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-C5.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-C5.json @@ -49,7 +49,21 @@ ] }, "grants_section": [ - { "src": ["*"], "dst": ["*"], "app": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } } + { + "src": ["*"], + "dst": ["*"], + "app": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -73,7 +87,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -148,7 +164,17 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } ] } @@ -179,12 +205,28 @@ { "Dst": "100.85.66.106/32", "Cap": "example.com/cap/complex", - "Values": [{ "nested": { "deep": { "value": 42 } } }] + "Values": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] }, { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "example.com/cap/complex", - "Values": [{ "nested": { "deep": { "value": 42 } } }] + "Values": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] } ] } @@ -215,8 +257,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -227,8 +275,22 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.83.200.69": { @@ -256,8 +318,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -267,8 +335,22 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.103.8.15": { @@ -296,8 +378,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -307,8 +395,22 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.108.74.26": { @@ -336,8 +438,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -347,8 +455,22 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.110.121.96": { @@ -377,8 +499,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -387,8 +515,22 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.103.90.82": { @@ -417,8 +559,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -432,7 +580,17 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.90.199.68": { @@ -461,8 +619,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -471,8 +635,22 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } } } @@ -493,7 +671,17 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } ] } @@ -524,12 +712,28 @@ { "Dst": "100.92.142.61/32", "Cap": "example.com/cap/complex", - "Values": [{ "nested": { "deep": { "value": 42 } } }] + "Values": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] }, { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "example.com/cap/complex", - "Values": [{ "nested": { "deep": { "value": 42 } } }] + "Values": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] } ] } @@ -560,8 +764,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -571,8 +781,22 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.83.200.69": { @@ -600,8 +824,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -611,8 +841,22 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.103.8.15": { @@ -640,8 +884,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -651,8 +901,22 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.108.74.26": { @@ -680,8 +944,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -691,8 +961,22 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.110.121.96": { @@ -721,8 +1005,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -731,8 +1021,22 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.103.90.82": { @@ -761,8 +1065,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -776,7 +1086,17 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.90.199.68": { @@ -805,8 +1125,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -815,8 +1141,22 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } } } @@ -837,7 +1177,17 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } ] } @@ -868,12 +1218,28 @@ { "Dst": "100.83.200.69/32", "Cap": "example.com/cap/complex", - "Values": [{ "nested": { "deep": { "value": 42 } } }] + "Values": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] }, { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "example.com/cap/complex", - "Values": [{ "nested": { "deep": { "value": 42 } } }] + "Values": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] } ] } @@ -904,8 +1270,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -915,8 +1287,22 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.92.142.61": { @@ -944,8 +1330,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -956,8 +1348,22 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.103.8.15": { @@ -985,8 +1391,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -996,8 +1408,22 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.108.74.26": { @@ -1025,8 +1451,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1036,8 +1468,22 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.110.121.96": { @@ -1066,8 +1512,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1076,8 +1528,22 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.103.90.82": { @@ -1106,8 +1572,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1121,7 +1593,17 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.90.199.68": { @@ -1150,8 +1632,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1160,8 +1648,22 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } } } @@ -1182,7 +1684,17 @@ "CapGrant": [ { "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } ] } @@ -1213,12 +1725,28 @@ { "Dst": "100.103.8.15/32", "Cap": "example.com/cap/complex", - "Values": [{ "nested": { "deep": { "value": 42 } } }] + "Values": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] }, { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "example.com/cap/complex", - "Values": [{ "nested": { "deep": { "value": 42 } } }] + "Values": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] } ] } @@ -1249,8 +1777,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1260,8 +1794,22 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.92.142.61": { @@ -1289,8 +1837,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1301,8 +1855,22 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.83.200.69": { @@ -1330,8 +1898,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1341,8 +1915,22 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.108.74.26": { @@ -1370,8 +1958,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1381,8 +1975,22 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.110.121.96": { @@ -1411,8 +2019,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1421,8 +2035,22 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.103.90.82": { @@ -1451,8 +2079,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1466,7 +2100,17 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.90.199.68": { @@ -1495,8 +2139,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1505,8 +2155,22 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } } } @@ -1527,7 +2191,17 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } ] } @@ -1558,12 +2232,28 @@ { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/complex", - "Values": [{ "nested": { "deep": { "value": 42 } } }] + "Values": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] }, { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/complex", - "Values": [{ "nested": { "deep": { "value": 42 } } }] + "Values": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] } ] } @@ -1594,8 +2284,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1605,8 +2301,22 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.92.142.61": { @@ -1634,8 +2344,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1646,8 +2362,22 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.83.200.69": { @@ -1675,8 +2405,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1686,8 +2422,22 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.103.8.15": { @@ -1715,8 +2465,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1726,8 +2482,22 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.110.121.96": { @@ -1756,8 +2526,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1766,8 +2542,22 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.103.90.82": { @@ -1796,8 +2586,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1811,7 +2607,17 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.90.199.68": { @@ -1840,8 +2646,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1850,8 +2662,22 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } } } @@ -1872,7 +2698,17 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } ] } @@ -1903,12 +2739,28 @@ { "Dst": "100.110.121.96/32", "Cap": "example.com/cap/complex", - "Values": [{ "nested": { "deep": { "value": 42 } } }] + "Values": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] }, { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "example.com/cap/complex", - "Values": [{ "nested": { "deep": { "value": 42 } } }] + "Values": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] } ] } @@ -1939,8 +2791,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1950,8 +2808,22 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.92.142.61": { @@ -1979,8 +2851,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1991,8 +2869,22 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.83.200.69": { @@ -2020,8 +2912,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2031,8 +2929,22 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.103.8.15": { @@ -2060,8 +2972,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2071,8 +2989,22 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.108.74.26": { @@ -2100,8 +3032,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2111,8 +3049,22 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.103.90.82": { @@ -2141,8 +3093,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2156,7 +3114,17 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.90.199.68": { @@ -2185,8 +3153,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2195,8 +3169,22 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } } } @@ -2217,7 +3205,17 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } ] } @@ -2248,12 +3246,28 @@ { "Dst": "100.103.90.82/32", "Cap": "example.com/cap/complex", - "Values": [{ "nested": { "deep": { "value": 42 } } }] + "Values": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] }, { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "example.com/cap/complex", - "Values": [{ "nested": { "deep": { "value": 42 } } }] + "Values": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] } ] } @@ -2284,8 +3298,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2295,8 +3315,22 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.92.142.61": { @@ -2324,8 +3358,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2336,8 +3376,22 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.83.200.69": { @@ -2365,8 +3419,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2376,8 +3436,22 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.103.8.15": { @@ -2405,8 +3479,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2416,8 +3496,22 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.108.74.26": { @@ -2445,8 +3539,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2456,8 +3556,22 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.110.121.96": { @@ -2486,8 +3600,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2496,8 +3616,22 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.90.199.68": { @@ -2526,8 +3660,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2536,8 +3676,22 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } } } @@ -2558,7 +3712,17 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } ] } @@ -2589,12 +3753,28 @@ { "Dst": "100.90.199.68/32", "Cap": "example.com/cap/complex", - "Values": [{ "nested": { "deep": { "value": 42 } } }] + "Values": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] }, { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "example.com/cap/complex", - "Values": [{ "nested": { "deep": { "value": 42 } } }] + "Values": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] } ] } @@ -2625,8 +3805,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2636,8 +3822,22 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.92.142.61": { @@ -2665,8 +3865,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2677,8 +3883,22 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.83.200.69": { @@ -2706,8 +3926,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2717,8 +3943,22 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.103.8.15": { @@ -2746,8 +3986,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2757,8 +4003,22 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.108.74.26": { @@ -2786,8 +4046,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2797,8 +4063,22 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.110.121.96": { @@ -2827,8 +4107,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2837,8 +4123,22 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } }, "100.103.90.82": { @@ -2867,8 +4167,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2882,7 +4188,17 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/complex": [{ "nested": { "deep": { "value": 42 } } }] } + "CapMap": { + "example.com/cap/complex": [ + { + "nested": { + "deep": { + "value": 42 + } + } + } + ] + } } } } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-C6.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-C6.json index 3b8ae4f5..0624b4ed 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-C6.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-C6.json @@ -44,7 +44,19 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["*"], "app": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } }], + "grants_section": [ + { + "src": ["*"], + "dst": ["*"], + "app": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -67,7 +79,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -142,7 +156,13 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } ] } @@ -170,11 +190,23 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "example.com/cap/array", "Values": [{ "items": [1, 2, 3] }] }, + { + "Dst": "100.85.66.106/32", + "Cap": "example.com/cap/array", + "Values": [ + { + "items": [1, 2, 3] + } + ] + }, { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "example.com/cap/array", - "Values": [{ "items": [1, 2, 3] }] + "Values": [ + { + "items": [1, 2, 3] + } + ] } ] } @@ -205,8 +237,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -217,8 +255,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.83.200.69": { @@ -246,8 +294,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -257,8 +311,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.103.8.15": { @@ -286,8 +350,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -297,8 +367,18 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.108.74.26": { @@ -326,8 +406,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -337,8 +423,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.110.121.96": { @@ -367,8 +463,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -377,8 +479,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.103.90.82": { @@ -407,8 +519,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -422,7 +540,13 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.90.199.68": { @@ -451,8 +575,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -461,8 +591,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } } } @@ -483,7 +623,13 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } ] } @@ -511,11 +657,23 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "example.com/cap/array", "Values": [{ "items": [1, 2, 3] }] }, + { + "Dst": "100.92.142.61/32", + "Cap": "example.com/cap/array", + "Values": [ + { + "items": [1, 2, 3] + } + ] + }, { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "example.com/cap/array", - "Values": [{ "items": [1, 2, 3] }] + "Values": [ + { + "items": [1, 2, 3] + } + ] } ] } @@ -546,8 +704,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -557,8 +721,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.83.200.69": { @@ -586,8 +760,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -597,8 +777,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.103.8.15": { @@ -626,8 +816,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -637,8 +833,18 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.108.74.26": { @@ -666,8 +872,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -677,8 +889,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.110.121.96": { @@ -707,8 +929,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -717,8 +945,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.103.90.82": { @@ -747,8 +985,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -762,7 +1006,13 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.90.199.68": { @@ -791,8 +1041,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -801,8 +1057,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } } } @@ -823,7 +1089,13 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } ] } @@ -851,11 +1123,23 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "example.com/cap/array", "Values": [{ "items": [1, 2, 3] }] }, + { + "Dst": "100.83.200.69/32", + "Cap": "example.com/cap/array", + "Values": [ + { + "items": [1, 2, 3] + } + ] + }, { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "example.com/cap/array", - "Values": [{ "items": [1, 2, 3] }] + "Values": [ + { + "items": [1, 2, 3] + } + ] } ] } @@ -886,8 +1170,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -897,8 +1187,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.92.142.61": { @@ -926,8 +1226,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -938,8 +1244,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.103.8.15": { @@ -967,8 +1283,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -978,8 +1300,18 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.108.74.26": { @@ -1007,8 +1339,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1018,8 +1356,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.110.121.96": { @@ -1048,8 +1396,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1058,8 +1412,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.103.90.82": { @@ -1088,8 +1452,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1103,7 +1473,13 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.90.199.68": { @@ -1132,8 +1508,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1142,8 +1524,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } } } @@ -1164,7 +1556,13 @@ "CapGrant": [ { "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } ] } @@ -1192,11 +1590,23 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.8.15/32", "Cap": "example.com/cap/array", "Values": [{ "items": [1, 2, 3] }] }, + { + "Dst": "100.103.8.15/32", + "Cap": "example.com/cap/array", + "Values": [ + { + "items": [1, 2, 3] + } + ] + }, { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "example.com/cap/array", - "Values": [{ "items": [1, 2, 3] }] + "Values": [ + { + "items": [1, 2, 3] + } + ] } ] } @@ -1227,8 +1637,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1238,8 +1654,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.92.142.61": { @@ -1267,8 +1693,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1279,8 +1711,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.83.200.69": { @@ -1308,8 +1750,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1319,8 +1767,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.108.74.26": { @@ -1348,8 +1806,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1359,8 +1823,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.110.121.96": { @@ -1389,8 +1863,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1399,8 +1879,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.103.90.82": { @@ -1429,8 +1919,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1444,7 +1940,13 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.90.199.68": { @@ -1473,8 +1975,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1483,8 +1991,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } } } @@ -1505,7 +2023,13 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } ] } @@ -1533,11 +2057,23 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/array", "Values": [{ "items": [1, 2, 3] }] }, + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/array", + "Values": [ + { + "items": [1, 2, 3] + } + ] + }, { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/array", - "Values": [{ "items": [1, 2, 3] }] + "Values": [ + { + "items": [1, 2, 3] + } + ] } ] } @@ -1568,8 +2104,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1579,8 +2121,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.92.142.61": { @@ -1608,8 +2160,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1620,8 +2178,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.83.200.69": { @@ -1649,8 +2217,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1660,8 +2234,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.103.8.15": { @@ -1689,8 +2273,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1700,8 +2290,18 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.110.121.96": { @@ -1730,8 +2330,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1740,8 +2346,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.103.90.82": { @@ -1770,8 +2386,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1785,7 +2407,13 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.90.199.68": { @@ -1814,8 +2442,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1824,8 +2458,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } } } @@ -1846,7 +2490,13 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } ] } @@ -1874,11 +2524,23 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "example.com/cap/array", "Values": [{ "items": [1, 2, 3] }] }, + { + "Dst": "100.110.121.96/32", + "Cap": "example.com/cap/array", + "Values": [ + { + "items": [1, 2, 3] + } + ] + }, { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "example.com/cap/array", - "Values": [{ "items": [1, 2, 3] }] + "Values": [ + { + "items": [1, 2, 3] + } + ] } ] } @@ -1909,8 +2571,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1920,8 +2588,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.92.142.61": { @@ -1949,8 +2627,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1961,8 +2645,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.83.200.69": { @@ -1990,8 +2684,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2001,8 +2701,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.103.8.15": { @@ -2030,8 +2740,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2041,8 +2757,18 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.108.74.26": { @@ -2070,8 +2796,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2081,8 +2813,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.103.90.82": { @@ -2111,8 +2853,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2126,7 +2874,13 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.90.199.68": { @@ -2155,8 +2909,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2165,8 +2925,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } } } @@ -2187,7 +2957,13 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } ] } @@ -2215,11 +2991,23 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "example.com/cap/array", "Values": [{ "items": [1, 2, 3] }] }, + { + "Dst": "100.103.90.82/32", + "Cap": "example.com/cap/array", + "Values": [ + { + "items": [1, 2, 3] + } + ] + }, { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "example.com/cap/array", - "Values": [{ "items": [1, 2, 3] }] + "Values": [ + { + "items": [1, 2, 3] + } + ] } ] } @@ -2250,8 +3038,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2261,8 +3055,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.92.142.61": { @@ -2290,8 +3094,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2302,8 +3112,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.83.200.69": { @@ -2331,8 +3151,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2342,8 +3168,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.103.8.15": { @@ -2371,8 +3207,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2382,8 +3224,18 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.108.74.26": { @@ -2411,8 +3263,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2422,8 +3280,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.110.121.96": { @@ -2452,8 +3320,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2462,8 +3336,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.90.199.68": { @@ -2492,8 +3376,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2502,8 +3392,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } } } @@ -2524,7 +3424,13 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } ] } @@ -2552,11 +3458,23 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "example.com/cap/array", "Values": [{ "items": [1, 2, 3] }] }, + { + "Dst": "100.90.199.68/32", + "Cap": "example.com/cap/array", + "Values": [ + { + "items": [1, 2, 3] + } + ] + }, { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "example.com/cap/array", - "Values": [{ "items": [1, 2, 3] }] + "Values": [ + { + "items": [1, 2, 3] + } + ] } ] } @@ -2587,8 +3505,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2598,8 +3522,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.92.142.61": { @@ -2627,8 +3561,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2639,8 +3579,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.83.200.69": { @@ -2668,8 +3618,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2679,8 +3635,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.103.8.15": { @@ -2708,8 +3674,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2719,8 +3691,18 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.108.74.26": { @@ -2748,8 +3730,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2759,8 +3747,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.110.121.96": { @@ -2789,8 +3787,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2799,8 +3803,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } }, "100.103.90.82": { @@ -2829,8 +3843,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2844,7 +3864,13 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/array": [{ "items": [1, 2, 3] }] } + "CapMap": { + "example.com/cap/array": [ + { + "items": [1, 2, 3] + } + ] + } } } } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-D1.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-D1.json index 548e552a..a67ae96f 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-D1.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-D1.json @@ -40,7 +40,15 @@ } ] }, - "grants_section": [{ "src": ["autogroup:member"], "dst": ["tag:server"], "app": { "example.com/cap/test": [{}] } }], + "grants_section": [ + { + "src": ["autogroup:member"], + "dst": ["tag:server"], + "app": { + "example.com/cap/test": [{}] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -63,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -320,7 +330,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -339,8 +351,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -391,8 +411,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -401,8 +427,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -431,8 +463,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -446,7 +484,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -475,8 +515,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -485,8 +531,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -544,8 +596,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -555,7 +613,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -624,8 +686,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -635,7 +703,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -704,8 +776,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -715,7 +793,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-D2.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-D2.json index c6913a69..17b5087f 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-D2.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-D2.json @@ -40,7 +40,15 @@ } ] }, - "grants_section": [{ "src": ["autogroup:tagged"], "dst": ["tag:server"], "app": { "example.com/cap/test": [{}] } }], + "grants_section": [ + { + "src": ["autogroup:tagged"], + "dst": ["tag:server"], + "app": { + "example.com/cap/test": [{}] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -63,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -170,8 +180,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -181,7 +197,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -250,8 +270,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -261,7 +287,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -330,8 +360,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -341,7 +377,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -410,8 +450,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -421,7 +467,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -464,7 +514,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -487,8 +539,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -518,8 +578,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -529,8 +595,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -558,8 +630,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -569,8 +647,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -598,8 +682,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -609,8 +699,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -638,8 +734,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -649,8 +751,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-D3.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-D3.json index 1c3bb20b..75340779 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-D3.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-D3.json @@ -40,7 +40,15 @@ } ] }, - "grants_section": [{ "src": ["group:admins"], "dst": ["tag:server"], "app": { "example.com/cap/test": [{}] } }], + "grants_section": [ + { + "src": ["group:admins"], + "dst": ["tag:server"], + "app": { + "example.com/cap/test": [{}] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -63,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -313,7 +323,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -325,8 +337,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -387,8 +407,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -397,8 +423,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -546,8 +578,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -557,7 +595,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-D4.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-D4.json index 0a3c3193..b88fae20 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-D4.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-D4.json @@ -41,7 +41,13 @@ ] }, "grants_section": [ - { "src": ["kratail2tid@passkey"], "dst": ["tag:server"], "app": { "example.com/cap/test": [{}] } } + { + "src": ["kratail2tid@passkey"], + "dst": ["tag:server"], + "app": { + "example.com/cap/test": [{}] + } + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -65,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -315,7 +323,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -327,8 +337,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -389,8 +407,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -399,8 +423,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -548,8 +578,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -559,7 +595,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-D5.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-D5.json index 1b3950a7..ee185b4c 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-D5.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-D5.json @@ -40,7 +40,15 @@ } ] }, - "grants_section": [{ "src": ["tag:prod"], "dst": ["tag:server"], "app": { "example.com/cap/test": [{}] } }], + "grants_section": [ + { + "src": ["tag:prod"], + "dst": ["tag:server"], + "app": { + "example.com/cap/test": [{}] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -63,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -305,8 +315,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -316,7 +332,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -348,7 +368,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -360,8 +382,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -406,8 +436,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -417,8 +453,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-D6.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-D6.json index e849398a..98d092ae 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-D6.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-D6.json @@ -40,7 +40,15 @@ } ] }, - "grants_section": [{ "src": ["100.90.199.68"], "dst": ["tag:server"], "app": { "example.com/cap/test": [{}] } }], + "grants_section": [ + { + "src": ["100.90.199.68"], + "dst": ["tag:server"], + "app": { + "example.com/cap/test": [{}] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -63,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -313,7 +323,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -325,8 +337,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -387,8 +407,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -397,8 +423,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -546,8 +578,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -557,7 +595,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-D7.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-D7.json index 1b1c585d..5c749dec 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-D7.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-D7.json @@ -41,7 +41,13 @@ ] }, "grants_section": [ - { "src": ["autogroup:member", "tag:prod"], "dst": ["tag:server"], "app": { "example.com/cap/test": [{}] } } + { + "src": ["autogroup:member", "tag:prod"], + "dst": ["tag:server"], + "app": { + "example.com/cap/test": [{}] + } + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -65,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -307,8 +315,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -318,7 +332,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -359,7 +377,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -380,8 +400,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -426,8 +454,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -437,8 +471,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -467,8 +507,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -477,8 +523,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -507,8 +559,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -522,7 +580,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -551,8 +611,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -561,8 +627,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -620,8 +692,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -631,7 +709,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -700,8 +782,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -711,7 +799,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -780,8 +872,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -791,7 +889,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-E1.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-E1.json index b7ce8fd4..f5b82396 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-E1.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-E1.json @@ -40,7 +40,15 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["tag:server"], "app": { "example.com/cap/test": [{}] } }], + "grants_section": [ + { + "src": ["*"], + "dst": ["tag:server"], + "app": { + "example.com/cap/test": [{}] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -63,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -170,8 +180,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -181,7 +197,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -250,8 +270,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -261,7 +287,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -330,8 +360,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -341,7 +377,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -410,8 +450,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -421,7 +467,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -458,7 +508,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -486,8 +538,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -517,8 +577,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -528,8 +594,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -557,8 +629,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -569,8 +647,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -598,8 +682,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -609,8 +699,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -638,8 +734,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -649,8 +751,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -679,8 +787,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -689,8 +803,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -719,8 +839,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -734,7 +860,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -763,8 +891,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -773,8 +907,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -832,8 +972,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -843,7 +989,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -912,8 +1062,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -923,7 +1079,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -992,8 +1152,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1003,7 +1169,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-E2.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-E2.json index b6fc6cb3..e67ddbf1 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-E2.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-E2.json @@ -40,7 +40,15 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["tag:server", "tag:prod"], "app": { "example.com/cap/test": [{}] } }], + "grants_section": [ + { + "src": ["*"], + "dst": ["tag:server", "tag:prod"], + "app": { + "example.com/cap/test": [{}] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -63,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -165,8 +175,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -176,7 +192,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -205,8 +225,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -216,7 +242,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -280,8 +310,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -291,7 +327,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -320,8 +360,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -331,7 +377,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -395,8 +445,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -406,7 +462,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -435,8 +495,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -446,7 +512,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -481,7 +551,12 @@ "fd7a:115c:a1e0::/48" ], "CapGrant": [ - { "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], "CapMap": { "example.com/cap/test": [{}] } } + { + "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], + "CapMap": { + "example.com/cap/test": [{}] + } + } ] } ], @@ -508,8 +583,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.8.15/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.103.8.15/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::5b37:80f/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -539,8 +622,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -550,8 +639,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -579,8 +674,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -591,8 +692,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -620,8 +727,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -631,8 +744,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -660,8 +779,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -671,8 +796,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -701,8 +832,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -711,8 +848,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -741,8 +884,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -756,7 +905,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -785,8 +936,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -795,8 +952,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -817,7 +980,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -845,8 +1010,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -876,8 +1049,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -887,8 +1066,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -916,8 +1101,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -928,8 +1119,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -957,8 +1154,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -968,8 +1171,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -997,8 +1206,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1008,8 +1223,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -1038,8 +1259,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1048,8 +1275,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -1078,8 +1311,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1093,7 +1332,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -1122,8 +1363,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1132,8 +1379,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -1186,8 +1439,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1197,7 +1456,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1226,8 +1489,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1237,7 +1506,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1301,8 +1574,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1312,7 +1591,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1341,8 +1624,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1352,7 +1641,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1416,8 +1709,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1427,7 +1726,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1456,8 +1759,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1467,7 +1776,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-E4.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-E4.json index a4c42d66..89bef1bc 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-E4.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-E4.json @@ -40,7 +40,15 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["autogroup:member"], "app": { "example.com/cap/test": [{}] } }], + "grants_section": [ + { + "src": ["*"], + "dst": ["autogroup:member"], + "app": { + "example.com/cap/test": [{}] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -63,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -176,8 +186,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -186,7 +202,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -216,8 +236,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -260,8 +286,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -270,7 +302,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -330,8 +366,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -340,7 +382,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -370,8 +416,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -414,8 +466,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -424,7 +482,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -484,8 +546,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -494,7 +562,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -524,8 +596,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -568,8 +646,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -578,7 +662,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -638,8 +726,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -648,7 +742,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -678,8 +776,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -722,8 +826,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -732,7 +842,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -792,8 +906,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -802,7 +922,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -832,8 +956,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -876,8 +1006,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -886,7 +1022,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -908,7 +1048,9 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -936,8 +1078,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.110.121.96/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -967,8 +1117,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -978,8 +1134,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -1007,8 +1169,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1019,8 +1187,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -1048,8 +1222,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1059,8 +1239,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -1088,8 +1274,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1099,8 +1291,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -1128,8 +1326,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1139,8 +1343,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -1169,8 +1379,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1184,7 +1400,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -1213,8 +1431,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1223,8 +1447,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -1245,7 +1475,9 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -1273,8 +1505,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.103.90.82/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -1304,8 +1544,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1315,8 +1561,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -1344,8 +1596,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1356,8 +1614,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -1385,8 +1649,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1396,8 +1666,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -1425,8 +1701,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1436,8 +1718,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -1465,8 +1753,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1476,8 +1770,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -1506,8 +1806,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1516,8 +1822,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -1546,8 +1858,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1556,8 +1874,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -1578,7 +1902,9 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -1606,8 +1932,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.90.199.68/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -1637,8 +1971,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1648,8 +1988,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -1677,8 +2023,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1689,8 +2041,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -1718,8 +2076,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1729,8 +2093,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -1758,8 +2128,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1769,8 +2145,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -1798,8 +2180,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1809,8 +2197,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -1839,8 +2233,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1849,8 +2249,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -1879,8 +2285,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1894,7 +2306,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } } } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-E5.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-E5.json index fb8bd4d6..ad3ef279 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-E5.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-E5.json @@ -40,7 +40,15 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["autogroup:tagged"], "app": { "example.com/cap/test": [{}] } }], + "grants_section": [ + { + "src": ["*"], + "dst": ["autogroup:tagged"], + "app": { + "example.com/cap/test": [{}] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -63,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -138,7 +148,9 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -166,8 +178,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.85.66.106/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -197,8 +217,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -209,8 +235,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -238,8 +270,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -249,8 +287,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -278,8 +322,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -289,8 +339,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -318,8 +374,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -329,8 +391,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -359,8 +427,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -369,8 +443,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -399,8 +479,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -414,7 +500,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -443,8 +531,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -453,8 +547,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -475,7 +575,9 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -503,8 +605,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.92.142.61/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -534,8 +644,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -545,8 +661,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -574,8 +696,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -585,8 +713,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -614,8 +748,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -625,8 +765,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -654,8 +800,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -665,8 +817,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -695,8 +853,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -705,8 +869,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -735,8 +905,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -750,7 +926,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -779,8 +957,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -789,8 +973,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -811,7 +1001,9 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -839,8 +1031,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.83.200.69/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -870,8 +1070,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -881,8 +1087,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -910,8 +1122,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -922,8 +1140,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -951,8 +1175,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -962,8 +1192,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -991,8 +1227,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1002,8 +1244,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -1032,8 +1280,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1042,8 +1296,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -1072,8 +1332,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1087,7 +1353,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -1116,8 +1384,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1126,8 +1400,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -1146,7 +1426,12 @@ "fd7a:115c:a1e0::/48" ], "CapGrant": [ - { "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], "CapMap": { "example.com/cap/test": [{}] } } + { + "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], + "CapMap": { + "example.com/cap/test": [{}] + } + } ] } ], @@ -1173,8 +1458,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.8.15/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.103.8.15/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::5b37:80f/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -1204,8 +1497,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1215,8 +1514,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -1244,8 +1549,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1256,8 +1567,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -1285,8 +1602,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1296,8 +1619,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -1325,8 +1654,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1336,8 +1671,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -1366,8 +1707,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1376,8 +1723,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -1406,8 +1759,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1421,7 +1780,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -1450,8 +1811,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1460,8 +1827,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -1482,7 +1855,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -1510,8 +1885,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -1541,8 +1924,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1552,8 +1941,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -1581,8 +1976,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1593,8 +1994,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -1622,8 +2029,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1633,8 +2046,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -1662,8 +2081,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1673,8 +2098,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -1703,8 +2134,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1713,8 +2150,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -1743,8 +2186,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1758,7 +2207,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -1787,8 +2238,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1797,8 +2254,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -1836,8 +2299,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1847,7 +2316,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1876,8 +2349,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1887,7 +2366,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1916,8 +2399,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1927,7 +2416,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1956,8 +2449,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1967,7 +2466,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1996,8 +2499,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2007,7 +2516,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2056,8 +2569,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2067,7 +2586,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2096,8 +2619,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2107,7 +2636,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2136,8 +2669,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2147,7 +2686,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2176,8 +2719,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2187,7 +2736,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2216,8 +2769,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2227,7 +2786,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2276,8 +2839,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2287,7 +2856,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2316,8 +2889,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2327,7 +2906,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2356,8 +2939,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2367,7 +2956,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2396,8 +2989,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2407,7 +3006,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2436,8 +3039,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2447,7 +3056,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-E6.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-E6.json index ebfc4648..b2f28b19 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-E6.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-E6.json @@ -40,7 +40,15 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["group:admins"], "app": { "example.com/cap/test": [{}] } }], + "grants_section": [ + { + "src": ["*"], + "dst": ["group:admins"], + "app": { + "example.com/cap/test": [{}] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -63,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -186,8 +196,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -196,7 +212,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -266,8 +286,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -276,7 +302,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -346,8 +376,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -356,7 +392,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -426,8 +466,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -436,7 +482,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -506,8 +556,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -516,7 +572,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -586,8 +646,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -596,7 +662,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -666,8 +736,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -676,7 +752,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -698,7 +778,9 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -726,8 +808,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.90.199.68/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -757,8 +847,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -768,8 +864,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -797,8 +899,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -809,8 +917,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -838,8 +952,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -849,8 +969,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -878,8 +1004,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -889,8 +1021,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -918,8 +1056,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -929,8 +1073,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -959,8 +1109,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -969,8 +1125,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -999,8 +1161,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1014,7 +1182,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } } } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-E7.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-E7.json index 82d9a08d..a092c24a 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-E7.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-E7.json @@ -40,7 +40,15 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["kratail2tid@passkey"], "app": { "example.com/cap/test": [{}] } }], + "grants_section": [ + { + "src": ["*"], + "dst": ["kratail2tid@passkey"], + "app": { + "example.com/cap/test": [{}] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -63,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -186,8 +196,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -196,7 +212,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -266,8 +286,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -276,7 +302,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -346,8 +376,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -356,7 +392,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -426,8 +466,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -436,7 +482,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -506,8 +556,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -516,7 +572,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -586,8 +646,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -596,7 +662,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -666,8 +736,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -676,7 +752,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -698,7 +778,9 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -726,8 +808,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.90.199.68/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -757,8 +847,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -768,8 +864,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -797,8 +899,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -809,8 +917,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -838,8 +952,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -849,8 +969,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -878,8 +1004,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -889,8 +1021,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -918,8 +1056,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -929,8 +1073,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -959,8 +1109,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -969,8 +1125,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -999,8 +1161,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1014,7 +1182,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } } } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-E8.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-E8.json index 4978cb68..1f9676a7 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-E8.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-E8.json @@ -40,7 +40,15 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["100.108.74.26"], "app": { "example.com/cap/test": [{}] } }], + "grants_section": [ + { + "src": ["*"], + "dst": ["100.108.74.26"], + "app": { + "example.com/cap/test": [{}] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -63,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -170,8 +180,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -181,7 +197,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -250,8 +270,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -261,7 +287,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -330,8 +360,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -341,7 +377,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -410,8 +450,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -421,7 +467,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -455,7 +505,14 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "CapGrant": [{ "Dsts": ["100.108.74.26/32"], "CapMap": { "example.com/cap/test": [{}] } }] + "CapGrant": [ + { + "Dsts": ["100.108.74.26/32"], + "CapMap": { + "example.com/cap/test": [{}] + } + } + ] } ], "packet_filter_matches": [ @@ -480,7 +537,13 @@ ], "SrcCaps": null, "Dsts": [], - "Caps": [{ "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{}] }] + "Caps": [ + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [{}] + } + ] } ], "whois": { @@ -509,8 +572,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -520,8 +589,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -549,8 +624,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -561,8 +642,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -590,8 +677,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -601,8 +694,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -630,8 +729,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -641,8 +746,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -671,8 +782,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -681,8 +798,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -711,8 +834,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -726,7 +855,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -755,8 +886,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -765,8 +902,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -824,8 +967,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -835,7 +984,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -904,8 +1057,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -915,7 +1074,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -984,8 +1147,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -995,7 +1164,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-F1.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-F1.json index d6e437d7..95385f54 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-F1.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-F1.json @@ -52,7 +52,15 @@ "src": ["*"], "dst": ["tag:server"], "ip": ["tcp:80", "tcp:443"], - "app": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "app": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", @@ -77,7 +85,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -184,8 +194,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -195,7 +211,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -264,8 +284,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -275,7 +301,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -344,8 +374,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -355,7 +391,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -424,8 +464,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -435,7 +481,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -470,10 +520,34 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.108.74.26", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 443, "Last": 443 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "IPProto": [6] }, @@ -487,7 +561,15 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } ] } @@ -514,10 +596,34 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] }, @@ -546,12 +652,24 @@ { "Dst": "100.108.74.26/32", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] }, { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] } ] } @@ -582,8 +700,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -593,8 +717,20 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } }, "100.92.142.61": { @@ -622,8 +758,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -634,8 +776,20 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } }, "100.83.200.69": { @@ -663,8 +817,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -674,8 +834,20 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } }, "100.103.8.15": { @@ -703,8 +875,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -714,8 +892,20 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } }, "100.110.121.96": { @@ -744,8 +934,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -754,8 +950,20 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } }, "100.103.90.82": { @@ -784,8 +992,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -799,7 +1013,15 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } }, "100.90.199.68": { @@ -828,8 +1050,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -838,8 +1066,20 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } } } @@ -897,8 +1137,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -908,7 +1154,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -977,8 +1227,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -988,7 +1244,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1057,8 +1317,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1068,7 +1334,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-F2.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-F2.json index a15ba3d5..318c6340 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-F2.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-F2.json @@ -50,7 +50,13 @@ "src": ["autogroup:member"], "dst": ["tag:server"], "ip": ["*"], - "app": { "example.com/cap/test": [{ "role": "admin" }] } + "app": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", @@ -75,7 +81,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -330,8 +338,20 @@ "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 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] }, { @@ -346,7 +366,13 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } ] } @@ -364,8 +390,20 @@ ], "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 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -382,8 +420,24 @@ "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" }] } + { + "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" + } + ] + } ] } ], @@ -434,8 +488,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -444,8 +504,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.103.90.82": { @@ -474,8 +544,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -489,7 +565,13 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } }, "100.90.199.68": { @@ -518,8 +600,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -528,8 +616,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "role": "admin" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "role": "admin" + } + ] + } } } } @@ -587,8 +685,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -598,7 +702,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -667,8 +775,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -678,7 +792,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -747,8 +865,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -758,7 +882,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-F3.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-F3.json index 0eaae38b..ee28ec06 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-F3.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-F3.json @@ -52,11 +52,23 @@ ] }, "grants_section": [ - { "src": ["*"], "dst": ["tag:server"], "ip": ["tcp:80", "tcp:443"] }, { "src": ["*"], "dst": ["tag:server"], - "app": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "ip": ["tcp:80", "tcp:443"] + }, + { + "src": ["*"], + "dst": ["tag:server"], + "app": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", @@ -81,7 +93,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -188,8 +202,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -199,7 +219,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -268,8 +292,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -279,7 +309,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -348,8 +382,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -359,7 +399,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -428,8 +472,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -439,7 +489,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -474,10 +528,34 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.108.74.26", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 443, "Last": 443 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "IPProto": [6] }, @@ -491,7 +569,15 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } ] } @@ -518,10 +604,34 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] }, @@ -550,12 +660,24 @@ { "Dst": "100.108.74.26/32", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] }, { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] } ] } @@ -586,8 +708,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -597,8 +725,20 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } }, "100.92.142.61": { @@ -626,8 +766,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -638,8 +784,20 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } }, "100.83.200.69": { @@ -667,8 +825,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -678,8 +842,20 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } }, "100.103.8.15": { @@ -707,8 +883,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -718,8 +900,20 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } }, "100.110.121.96": { @@ -748,8 +942,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -758,8 +958,20 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } }, "100.103.90.82": { @@ -788,8 +1000,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -803,7 +1021,15 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } }, "100.90.199.68": { @@ -832,8 +1058,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -842,8 +1074,20 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } } } @@ -901,8 +1145,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -912,7 +1162,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -981,8 +1235,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -992,7 +1252,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1061,8 +1325,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1072,7 +1342,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-F4.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-F4.json index e20256a9..e8600c6d 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-F4.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-F4.json @@ -57,8 +57,17 @@ "dst": ["*"], "ip": ["tcp:443"], "app": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], - "example.com/cap/extra": [{ "mode": "full" }] + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], + "example.com/cap/extra": [ + { + "mode": "full" + } + ] } } ], @@ -84,7 +93,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -156,7 +167,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 443, "Last": 443 } }], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 443, + "Last": 443 + } + } + ], "IPProto": [6] }, { @@ -170,8 +189,17 @@ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] } } ] @@ -186,7 +214,9 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -213,8 +243,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "::/0", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] }, @@ -240,17 +282,43 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "example.com/cap/extra", "Values": [{ "mode": "full" }] }, + { + "Dst": "100.85.66.106/32", + "Cap": "example.com/cap/extra", + "Values": [ + { + "mode": "full" + } + ] + }, { "Dst": "100.85.66.106/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "example.com/cap/extra", + "Values": [ + { + "mode": "full" + } + ] }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "example.com/cap/extra", "Values": [{ "mode": "full" }] }, { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] } ] }, @@ -276,8 +344,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.85.66.106/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -307,8 +383,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -319,10 +401,23 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -352,8 +447,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -363,10 +464,23 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -396,8 +510,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -407,10 +527,23 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -440,8 +573,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -451,10 +590,23 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -485,8 +637,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -495,10 +653,23 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -529,8 +700,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -545,8 +722,17 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -577,8 +763,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -587,10 +779,23 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -610,7 +815,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 443, "Last": 443 } }], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 443, + "Last": 443 + } + } + ], "IPProto": [6] }, { @@ -624,8 +837,17 @@ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] } } ] @@ -640,7 +862,9 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -667,8 +891,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "::/0", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] }, @@ -694,17 +930,43 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "example.com/cap/extra", "Values": [{ "mode": "full" }] }, + { + "Dst": "100.92.142.61/32", + "Cap": "example.com/cap/extra", + "Values": [ + { + "mode": "full" + } + ] + }, { "Dst": "100.92.142.61/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "example.com/cap/extra", + "Values": [ + { + "mode": "full" + } + ] }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "example.com/cap/extra", "Values": [{ "mode": "full" }] }, { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] } ] }, @@ -730,8 +992,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.92.142.61/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -761,8 +1031,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -772,10 +1048,23 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -805,8 +1094,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -816,10 +1111,23 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -849,8 +1157,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -860,10 +1174,23 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -893,8 +1220,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -904,10 +1237,23 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -938,8 +1284,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -948,10 +1300,23 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -982,8 +1347,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -998,8 +1369,17 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1030,8 +1410,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1040,10 +1426,23 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1063,7 +1462,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 443, "Last": 443 } }], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 443, + "Last": 443 + } + } + ], "IPProto": [6] }, { @@ -1077,8 +1484,17 @@ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] } } ] @@ -1093,7 +1509,9 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -1120,8 +1538,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "::/0", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] }, @@ -1147,17 +1577,43 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "example.com/cap/extra", "Values": [{ "mode": "full" }] }, + { + "Dst": "100.83.200.69/32", + "Cap": "example.com/cap/extra", + "Values": [ + { + "mode": "full" + } + ] + }, { "Dst": "100.83.200.69/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "example.com/cap/extra", + "Values": [ + { + "mode": "full" + } + ] }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "example.com/cap/extra", "Values": [{ "mode": "full" }] }, { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] } ] }, @@ -1183,8 +1639,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.83.200.69/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -1214,8 +1678,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1225,10 +1695,23 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1258,8 +1741,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1270,10 +1759,23 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1303,8 +1805,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1314,10 +1822,23 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1347,8 +1868,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1358,10 +1885,23 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1392,8 +1932,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1402,10 +1948,23 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1436,8 +1995,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1452,8 +2017,17 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1484,8 +2058,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1494,10 +2074,23 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1517,7 +2110,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 443, "Last": 443 } }], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 443, + "Last": 443 + } + } + ], "IPProto": [6] }, { @@ -1531,8 +2132,17 @@ { "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] } } ] @@ -1547,7 +2157,9 @@ "CapGrant": [ { "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -1574,8 +2186,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "::/0", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] }, @@ -1601,17 +2225,43 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.8.15/32", "Cap": "example.com/cap/extra", "Values": [{ "mode": "full" }] }, + { + "Dst": "100.103.8.15/32", + "Cap": "example.com/cap/extra", + "Values": [ + { + "mode": "full" + } + ] + }, { "Dst": "100.103.8.15/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::5b37:80f/128", + "Cap": "example.com/cap/extra", + "Values": [ + { + "mode": "full" + } + ] }, - { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "example.com/cap/extra", "Values": [{ "mode": "full" }] }, { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] } ] }, @@ -1637,8 +2287,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.8.15/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.103.8.15/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::5b37:80f/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -1668,8 +2326,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1679,10 +2343,23 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1712,8 +2389,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1724,10 +2407,23 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1757,8 +2453,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1768,10 +2470,23 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1801,8 +2516,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1812,10 +2533,23 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1846,8 +2580,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1856,10 +2596,23 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1890,8 +2643,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1906,8 +2665,17 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1938,8 +2706,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1948,10 +2722,23 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -1971,7 +2758,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 443, "Last": 443 } }], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 443, + "Last": 443 + } + } + ], "IPProto": [6] }, { @@ -1985,8 +2780,17 @@ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] } } ] @@ -2001,7 +2805,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -2028,8 +2834,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "::/0", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] }, @@ -2058,15 +2876,41 @@ { "Dst": "100.108.74.26/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] + }, + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/extra", + "Values": [ + { + "mode": "full" + } + ] }, - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/extra", "Values": [{ "mode": "full" }] }, { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/extra", "Values": [{ "mode": "full" }] } + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/extra", + "Values": [ + { + "mode": "full" + } + ] + } ] }, { @@ -2091,8 +2935,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.108.74.26/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -2122,8 +2974,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2133,10 +2991,23 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2166,8 +3037,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2178,10 +3055,23 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2211,8 +3101,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2222,10 +3118,23 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2255,8 +3164,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2266,10 +3181,23 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2300,8 +3228,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2310,10 +3244,23 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2344,8 +3291,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2360,8 +3313,17 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2392,8 +3354,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2402,10 +3370,23 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2425,7 +3406,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 443, "Last": 443 } }], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 443, + "Last": 443 + } + } + ], "IPProto": [6] }, { @@ -2439,8 +3428,17 @@ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] } } ] @@ -2455,7 +3453,9 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -2482,8 +3482,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "::/0", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] }, @@ -2509,17 +3521,43 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "example.com/cap/extra", "Values": [{ "mode": "full" }] }, + { + "Dst": "100.110.121.96/32", + "Cap": "example.com/cap/extra", + "Values": [ + { + "mode": "full" + } + ] + }, { "Dst": "100.110.121.96/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "example.com/cap/extra", + "Values": [ + { + "mode": "full" + } + ] }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "example.com/cap/extra", "Values": [{ "mode": "full" }] }, { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] } ] }, @@ -2545,8 +3583,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.110.121.96/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -2576,8 +3622,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2587,10 +3639,23 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2620,8 +3685,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2632,10 +3703,23 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2665,8 +3749,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2676,10 +3766,23 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2709,8 +3812,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2720,10 +3829,23 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2753,8 +3875,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2764,10 +3892,23 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2798,8 +3939,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2814,8 +3961,17 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2846,8 +4002,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2856,10 +4018,23 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -2879,7 +4054,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 443, "Last": 443 } }], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 443, + "Last": 443 + } + } + ], "IPProto": [6] }, { @@ -2893,8 +4076,17 @@ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] } } ] @@ -2909,7 +4101,9 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -2936,8 +4130,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "::/0", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] }, @@ -2963,17 +4169,43 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "example.com/cap/extra", "Values": [{ "mode": "full" }] }, + { + "Dst": "100.103.90.82/32", + "Cap": "example.com/cap/extra", + "Values": [ + { + "mode": "full" + } + ] + }, { "Dst": "100.103.90.82/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "example.com/cap/extra", + "Values": [ + { + "mode": "full" + } + ] }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "example.com/cap/extra", "Values": [{ "mode": "full" }] }, { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] } ] }, @@ -2999,8 +4231,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.103.90.82/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -3030,8 +4270,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -3041,10 +4287,23 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -3074,8 +4333,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -3086,10 +4351,23 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -3119,8 +4397,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -3130,10 +4414,23 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -3163,8 +4460,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -3174,10 +4477,23 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -3207,8 +4523,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -3218,10 +4540,23 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -3252,8 +4587,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -3262,10 +4603,23 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -3296,8 +4650,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -3306,10 +4666,23 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -3329,7 +4702,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 443, "Last": 443 } }], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 443, + "Last": 443 + } + } + ], "IPProto": [6] }, { @@ -3343,8 +4724,17 @@ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] } } ] @@ -3359,7 +4749,9 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -3386,8 +4778,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "::/0", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] }, @@ -3413,18 +4817,44 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "example.com/cap/extra", "Values": [{ "mode": "full" }] }, + { + "Dst": "100.90.199.68/32", + "Cap": "example.com/cap/extra", + "Values": [ + { + "mode": "full" + } + ] + }, { "Dst": "100.90.199.68/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "example.com/cap/extra", "Values": [{ "mode": "full" }] } + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "example.com/cap/extra", + "Values": [ + { + "mode": "full" + } + ] + } ] }, { @@ -3449,8 +4879,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.90.199.68/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -3480,8 +4918,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -3491,10 +4935,23 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -3524,8 +4981,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -3536,10 +4999,23 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -3569,8 +5045,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -3580,10 +5062,23 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -3613,8 +5108,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -3624,10 +5125,23 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -3657,8 +5171,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -3668,10 +5188,23 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -3702,8 +5235,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -3712,10 +5251,23 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } @@ -3746,8 +5298,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -3762,8 +5320,17 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "example.com/cap/extra": [{ "mode": "full" }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "example.com/cap/extra": [ + { + "mode": "full" + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null } } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-G1.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-G1.json index 1268b199..ebdf0da0 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-G1.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-G1.json @@ -48,8 +48,20 @@ ] }, "grants_section": [ - { "src": ["*"], "dst": ["tag:server"], "app": { "example.com/cap/one": [{}] } }, - { "src": ["*"], "dst": ["tag:server"], "app": { "example.com/cap/two": [{}] } } + { + "src": ["*"], + "dst": ["tag:server"], + "app": { + "example.com/cap/one": [{}] + } + }, + { + "src": ["*"], + "dst": ["tag:server"], + "app": { + "example.com/cap/two": [{}] + } + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -73,7 +85,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -180,8 +194,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -191,7 +211,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -260,8 +284,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -271,7 +301,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -340,8 +374,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -351,7 +391,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -420,8 +464,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -431,7 +481,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -466,7 +520,12 @@ "fd7a:115c:a1e0::/48" ], "CapGrant": [ - { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], "CapMap": { "example.com/cap/one": [{}] } } + { + "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], + "CapMap": { + "example.com/cap/one": [{}] + } + } ] }, { @@ -477,7 +536,12 @@ "fd7a:115c:a1e0::/48" ], "CapGrant": [ - { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], "CapMap": { "example.com/cap/two": [{}] } } + { + "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], + "CapMap": { + "example.com/cap/two": [{}] + } + } ] } ], @@ -504,8 +568,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/one", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/one", + "Values": [{}] + } ] }, { @@ -530,8 +602,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/two", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/two", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/two", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/two", + "Values": [{}] + } ] } ], @@ -561,8 +641,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -572,8 +658,15 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [{}] + } } }, "100.92.142.61": { @@ -601,8 +694,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -613,8 +712,15 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [{}] + } } }, "100.83.200.69": { @@ -642,8 +748,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -653,8 +765,15 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [{}] + } } }, "100.103.8.15": { @@ -682,8 +801,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -693,8 +818,15 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [{}] + } } }, "100.110.121.96": { @@ -723,8 +855,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -733,8 +871,15 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [{}] + } } }, "100.103.90.82": { @@ -763,8 +908,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -778,7 +929,10 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{}] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [{}] + } } }, "100.90.199.68": { @@ -807,8 +961,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -817,8 +977,15 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [{}] + } } } } @@ -876,8 +1043,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -887,7 +1060,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -956,8 +1133,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -967,7 +1150,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1036,8 +1223,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1047,7 +1240,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-G2.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-G2.json index abd3d112..4e9d2b13 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-G2.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-G2.json @@ -56,8 +56,28 @@ ] }, "grants_section": [ - { "src": ["*"], "dst": ["tag:server"], "app": { "example.com/cap/test": [{ "v": 1 }] } }, - { "src": ["*"], "dst": ["tag:server"], "app": { "example.com/cap/test": [{ "v": 2 }] } } + { + "src": ["*"], + "dst": ["tag:server"], + "app": { + "example.com/cap/test": [ + { + "v": 1 + } + ] + } + }, + { + "src": ["*"], + "dst": ["tag:server"], + "app": { + "example.com/cap/test": [ + { + "v": 2 + } + ] + } + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -81,7 +101,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -188,8 +210,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -199,7 +227,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -268,8 +300,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -279,7 +317,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -348,8 +390,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -359,7 +407,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -428,8 +480,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -439,7 +497,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -476,7 +538,13 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{ "v": 1 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + } + ] + } } ] }, @@ -490,7 +558,13 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{ "v": 2 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 2 + } + ] + } } ] } @@ -518,8 +592,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{ "v": 1 }] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{ "v": 1 }] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 1 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 1 + } + ] + } ] }, { @@ -544,8 +634,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{ "v": 2 }] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{ "v": 2 }] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 2 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 2 + } + ] + } ] } ], @@ -575,8 +681,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -586,8 +698,21 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.92.142.61": { @@ -615,8 +740,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -627,8 +758,21 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.83.200.69": { @@ -656,8 +800,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -667,8 +817,21 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.103.8.15": { @@ -696,8 +859,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -707,8 +876,21 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.110.121.96": { @@ -737,8 +919,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -747,8 +935,21 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.103.90.82": { @@ -777,8 +978,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -792,7 +999,16 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.90.199.68": { @@ -821,8 +1037,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -831,8 +1053,21 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } } } @@ -890,8 +1125,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -901,7 +1142,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -970,8 +1215,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -981,7 +1232,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1050,8 +1305,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1061,7 +1322,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-G3.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-G3.json index 140f8a51..2062ad30 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-G3.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-G3.json @@ -52,8 +52,24 @@ ] }, "grants_section": [ - { "src": ["*"], "dst": ["tag:server"], "app": { "example.com/cap/test": [{}] } }, - { "src": ["tag:client"], "dst": ["tag:server"], "app": { "example.com/cap/test": [{ "extra": true }] } } + { + "src": ["*"], + "dst": ["tag:server"], + "app": { + "example.com/cap/test": [{}] + } + }, + { + "src": ["tag:client"], + "dst": ["tag:server"], + "app": { + "example.com/cap/test": [ + { + "extra": true + } + ] + } + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -77,7 +93,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -184,8 +202,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -195,7 +219,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -264,8 +292,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -275,7 +309,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -344,8 +382,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -355,7 +399,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -424,8 +472,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -435,7 +489,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -472,7 +530,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] }, @@ -481,7 +541,13 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{ "extra": true }] } + "CapMap": { + "example.com/cap/test": [ + { + "extra": true + } + ] + } } ] } @@ -509,8 +575,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] }, { @@ -519,8 +593,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{ "extra": true }] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{ "extra": true }] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "extra": true + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "extra": true + } + ] + } ] } ], @@ -550,8 +640,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -561,8 +657,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -590,8 +692,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -602,8 +710,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -631,8 +745,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -642,8 +762,19 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}, { "extra": true }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + {}, + { + "extra": true + } + ] + } } }, "100.103.8.15": { @@ -671,8 +802,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -682,8 +819,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -712,8 +855,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -722,8 +871,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -752,8 +907,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -767,7 +928,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -796,8 +959,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -806,8 +975,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -865,8 +1040,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -876,7 +1057,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -945,8 +1130,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -956,7 +1147,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1025,8 +1220,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1036,7 +1237,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-G4.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-G4.json index 91bdcb9b..7dca87e7 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-G4.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-G4.json @@ -46,8 +46,18 @@ ] }, "grants_section": [ - { "src": ["*"], "dst": ["tag:server"], "app": { "example.com/cap/test": [{}] } }, - { "src": ["*"], "dst": ["tag:server"], "ip": ["tcp:80"] } + { + "src": ["*"], + "dst": ["tag:server"], + "app": { + "example.com/cap/test": [{}] + } + }, + { + "src": ["*"], + "dst": ["tag:server"], + "ip": ["tcp:80"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -71,7 +81,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -178,8 +190,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -189,7 +207,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -258,8 +280,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -269,7 +297,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -338,8 +370,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -349,7 +387,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -418,8 +460,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -429,7 +477,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -466,7 +518,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] }, @@ -478,8 +532,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 80 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "IPProto": [6] } @@ -507,8 +573,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] }, { @@ -532,8 +606,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] } @@ -564,8 +650,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -575,8 +667,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -604,8 +702,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -616,8 +720,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -645,8 +755,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -656,8 +772,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -685,8 +807,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -696,8 +824,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -726,8 +860,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -736,8 +876,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -766,8 +912,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -781,7 +933,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -810,8 +964,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -820,8 +980,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -879,8 +1045,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -890,7 +1062,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -959,8 +1135,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -970,7 +1152,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1039,8 +1225,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1050,7 +1242,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-G5.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-G5.json index 43636cc3..e9891cf0 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-G5.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-G5.json @@ -51,9 +51,23 @@ ] }, "grants_section": [ - { "src": ["*"], "dst": ["*"], "ip": ["*"] }, - { "src": ["tag:client"], "dst": ["tag:server"], "app": { "example.com/cap/test": [{}] } }, - { "src": ["autogroup:member"], "dst": ["tag:server"], "ip": ["tcp:443"] } + { + "src": ["*"], + "dst": ["*"], + "ip": ["*"] + }, + { + "src": ["tag:client"], + "dst": ["tag:server"], + "app": { + "example.com/cap/test": [{}] + } + }, + { + "src": ["autogroup:member"], + "dst": ["tag:server"], + "ip": ["tcp:443"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -77,7 +91,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -149,7 +165,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -174,8 +198,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -206,8 +242,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -218,7 +260,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -247,8 +293,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -258,7 +310,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -287,8 +343,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -298,7 +360,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -327,8 +393,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -338,7 +410,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -368,8 +444,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -378,7 +460,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -408,8 +494,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -452,8 +544,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -462,7 +560,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -481,7 +583,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -506,8 +616,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -538,8 +660,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -549,7 +677,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -578,8 +710,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -589,7 +727,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -618,8 +760,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -629,7 +777,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -658,8 +810,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -669,7 +827,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -699,8 +861,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -709,7 +877,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -739,8 +911,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -783,8 +961,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -793,7 +977,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -812,7 +1000,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -837,8 +1033,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -869,8 +1077,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -880,7 +1094,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -909,8 +1127,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -921,7 +1145,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -950,8 +1178,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -961,7 +1195,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -990,8 +1228,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1001,7 +1245,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1031,8 +1279,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1041,7 +1295,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1071,8 +1329,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1115,8 +1379,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1125,7 +1395,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1144,7 +1418,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1169,8 +1451,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1201,8 +1495,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1212,7 +1512,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1241,8 +1545,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1253,7 +1563,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1282,8 +1596,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1293,7 +1613,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1322,8 +1646,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1333,7 +1663,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1363,8 +1697,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1373,7 +1713,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1403,8 +1747,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1447,8 +1797,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1457,7 +1813,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1476,14 +1836,24 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] }, { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] }, @@ -1497,8 +1867,20 @@ "fd7a:115c:a1e0::9e37:5a52" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 443, "Last": 443 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "IPProto": [6] } @@ -1525,8 +1907,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -1536,8 +1930,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] }, { @@ -1552,8 +1954,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] } @@ -1584,8 +1998,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1595,7 +2015,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1624,8 +2048,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1636,7 +2066,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1665,8 +2099,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1676,8 +2116,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -1705,8 +2151,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1716,7 +2168,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1746,8 +2202,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1756,7 +2218,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1786,8 +2252,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1830,8 +2302,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1840,7 +2318,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1859,7 +2341,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1884,8 +2374,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1916,8 +2418,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1927,7 +2435,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1956,8 +2468,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1968,7 +2486,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1997,8 +2519,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2008,7 +2536,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2037,8 +2569,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2048,7 +2586,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2077,8 +2619,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2088,7 +2636,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2118,8 +2670,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2162,8 +2720,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2172,7 +2736,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2191,7 +2759,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2216,8 +2792,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2248,8 +2836,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2259,7 +2853,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2288,8 +2886,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2300,7 +2904,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2329,8 +2937,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2340,7 +2954,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2369,8 +2987,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2380,7 +3004,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2409,8 +3037,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2420,7 +3054,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2450,8 +3088,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2460,7 +3104,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2490,8 +3138,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2500,7 +3154,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2519,7 +3177,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2544,8 +3210,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2576,8 +3254,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2587,7 +3271,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2616,8 +3304,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2628,7 +3322,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2657,8 +3355,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2668,7 +3372,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2697,8 +3405,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2708,7 +3422,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2737,8 +3455,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2748,7 +3472,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2778,8 +3506,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2788,7 +3522,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2818,8 +3556,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-G6.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-G6.json index 0491e140..7bec7b67 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-G6.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-G6.json @@ -52,8 +52,24 @@ ] }, "grants_section": [ - { "src": ["*"], "dst": ["*"], "app": { "example.com/cap/test": [{}] } }, - { "src": ["*"], "dst": ["tag:server"], "app": { "example.com/cap/test": [{ "special": true }] } } + { + "src": ["*"], + "dst": ["*"], + "app": { + "example.com/cap/test": [{}] + } + }, + { + "src": ["*"], + "dst": ["tag:server"], + "app": { + "example.com/cap/test": [ + { + "special": true + } + ] + } + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -77,7 +93,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -152,7 +170,9 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -180,8 +200,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.85.66.106/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -211,8 +239,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -223,8 +257,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -252,8 +292,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -263,8 +309,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -292,8 +344,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -303,8 +361,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -332,8 +396,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -343,8 +413,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -373,8 +449,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -383,8 +465,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -413,8 +501,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -428,7 +522,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -457,8 +553,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -467,8 +569,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -489,7 +597,9 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -517,8 +627,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.92.142.61/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -548,8 +666,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -559,8 +683,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -588,8 +718,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -599,8 +735,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -628,8 +770,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -639,8 +787,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -668,8 +822,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -679,8 +839,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -709,8 +875,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -719,8 +891,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -749,8 +927,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -764,7 +948,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -793,8 +979,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -803,8 +995,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -825,7 +1023,9 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -853,8 +1053,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.83.200.69/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -884,8 +1092,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -895,8 +1109,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -924,8 +1144,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -936,8 +1162,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -965,8 +1197,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -976,8 +1214,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -1005,8 +1249,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1016,8 +1266,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -1046,8 +1302,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1056,8 +1318,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -1086,8 +1354,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1101,7 +1375,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -1130,8 +1406,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1140,8 +1422,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -1160,7 +1448,12 @@ "fd7a:115c:a1e0::/48" ], "CapGrant": [ - { "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], "CapMap": { "example.com/cap/test": [{}] } } + { + "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], + "CapMap": { + "example.com/cap/test": [{}] + } + } ] } ], @@ -1187,8 +1480,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.8.15/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.103.8.15/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::5b37:80f/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -1218,8 +1519,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1229,8 +1536,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -1258,8 +1571,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1270,8 +1589,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -1299,8 +1624,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1310,8 +1641,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -1339,8 +1676,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1350,8 +1693,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -1380,8 +1729,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1390,8 +1745,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -1420,8 +1781,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1435,7 +1802,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -1464,8 +1833,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1474,8 +1849,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -1496,7 +1877,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] }, @@ -1510,7 +1893,13 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{ "special": true }] } + "CapMap": { + "example.com/cap/test": [ + { + "special": true + } + ] + } } ] } @@ -1538,8 +1927,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] }, { @@ -1564,8 +1961,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{ "special": true }] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{ "special": true }] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "special": true + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "special": true + } + ] + } ] } ], @@ -1595,8 +2008,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1606,8 +2025,19 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}, { "special": true }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + {}, + { + "special": true + } + ] + } } }, "100.92.142.61": { @@ -1635,8 +2065,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1647,8 +2083,19 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}, { "special": true }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + {}, + { + "special": true + } + ] + } } }, "100.83.200.69": { @@ -1676,8 +2123,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1687,8 +2140,19 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}, { "special": true }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + {}, + { + "special": true + } + ] + } } }, "100.103.8.15": { @@ -1716,8 +2180,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1727,8 +2197,19 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}, { "special": true }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + {}, + { + "special": true + } + ] + } } }, "100.110.121.96": { @@ -1757,8 +2238,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1767,8 +2254,19 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}, { "special": true }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + {}, + { + "special": true + } + ] + } } }, "100.103.90.82": { @@ -1797,8 +2295,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1812,7 +2316,14 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}, { "special": true }] } + "CapMap": { + "example.com/cap/test": [ + {}, + { + "special": true + } + ] + } } }, "100.90.199.68": { @@ -1841,8 +2352,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1851,8 +2368,19 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}, { "special": true }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + {}, + { + "special": true + } + ] + } } } } @@ -1873,7 +2401,9 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -1901,8 +2431,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.110.121.96/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -1932,8 +2470,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1943,8 +2487,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -1972,8 +2522,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1984,8 +2540,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -2013,8 +2575,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2024,8 +2592,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -2053,8 +2627,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2064,8 +2644,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -2093,8 +2679,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2104,8 +2696,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -2134,8 +2732,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2149,7 +2753,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -2178,8 +2784,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2188,8 +2800,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -2210,7 +2828,9 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -2238,8 +2858,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.103.90.82/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -2269,8 +2897,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2280,8 +2914,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -2309,8 +2949,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2321,8 +2967,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -2350,8 +3002,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2361,8 +3019,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -2390,8 +3054,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2401,8 +3071,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -2430,8 +3106,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2441,8 +3123,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -2471,8 +3159,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2481,8 +3175,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -2511,8 +3211,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2521,8 +3227,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -2543,7 +3255,9 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -2571,8 +3285,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.90.199.68/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -2602,8 +3324,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2613,8 +3341,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -2642,8 +3376,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2654,8 +3394,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -2683,8 +3429,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2694,8 +3446,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -2723,8 +3481,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2734,8 +3498,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.108.74.26": { @@ -2763,8 +3533,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2774,8 +3550,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -2804,8 +3586,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2814,8 +3602,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -2844,8 +3638,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2859,7 +3659,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } } } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-H2.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-H2.json index 2a68d625..59401296 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-H2.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-H2.json @@ -40,7 +40,15 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["*"], "app": { "example.com/cap/test": [] } }], + "grants_section": [ + { + "src": ["*"], + "dst": ["*"], + "app": { + "example.com/cap/test": [] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -63,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -136,7 +146,12 @@ "fd7a:115c:a1e0::/48" ], "CapGrant": [ - { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], "CapMap": { "example.com/cap/test": [] } } + { + "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], + "CapMap": { + "example.com/cap/test": [] + } + } ] } ], @@ -163,8 +178,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "example.com/cap/test", "Values": [] }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "example.com/cap/test", "Values": [] } + { + "Dst": "100.85.66.106/32", + "Cap": "example.com/cap/test", + "Values": [] + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "example.com/cap/test", + "Values": [] + } ] } ], @@ -194,8 +217,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -206,8 +235,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.83.200.69": { @@ -235,8 +270,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -246,8 +287,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.103.8.15": { @@ -275,8 +322,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -286,8 +339,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.108.74.26": { @@ -315,8 +374,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -326,8 +391,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.110.121.96": { @@ -356,8 +427,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -366,8 +443,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.103.90.82": { @@ -396,8 +479,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -411,7 +500,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [] } + "CapMap": { + "example.com/cap/test": [] + } } }, "100.90.199.68": { @@ -440,8 +531,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -450,8 +547,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [] + } } } } @@ -470,7 +573,12 @@ "fd7a:115c:a1e0::/48" ], "CapGrant": [ - { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], "CapMap": { "example.com/cap/test": [] } } + { + "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], + "CapMap": { + "example.com/cap/test": [] + } + } ] } ], @@ -497,8 +605,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "example.com/cap/test", "Values": [] }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "example.com/cap/test", "Values": [] } + { + "Dst": "100.92.142.61/32", + "Cap": "example.com/cap/test", + "Values": [] + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "example.com/cap/test", + "Values": [] + } ] } ], @@ -528,8 +644,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -539,8 +661,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.83.200.69": { @@ -568,8 +696,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -579,8 +713,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.103.8.15": { @@ -608,8 +748,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -619,8 +765,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.108.74.26": { @@ -648,8 +800,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -659,8 +817,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.110.121.96": { @@ -689,8 +853,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -699,8 +869,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.103.90.82": { @@ -729,8 +905,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -744,7 +926,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [] } + "CapMap": { + "example.com/cap/test": [] + } } }, "100.90.199.68": { @@ -773,8 +957,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -783,8 +973,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [] + } } } } @@ -803,7 +999,12 @@ "fd7a:115c:a1e0::/48" ], "CapGrant": [ - { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "CapMap": { "example.com/cap/test": [] } } + { + "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], + "CapMap": { + "example.com/cap/test": [] + } + } ] } ], @@ -830,8 +1031,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "example.com/cap/test", "Values": [] }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "example.com/cap/test", "Values": [] } + { + "Dst": "100.83.200.69/32", + "Cap": "example.com/cap/test", + "Values": [] + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "example.com/cap/test", + "Values": [] + } ] } ], @@ -861,8 +1070,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -872,8 +1087,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.92.142.61": { @@ -901,8 +1122,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -913,8 +1140,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.103.8.15": { @@ -942,8 +1175,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -953,8 +1192,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.108.74.26": { @@ -982,8 +1227,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -993,8 +1244,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.110.121.96": { @@ -1023,8 +1280,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1033,8 +1296,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.103.90.82": { @@ -1063,8 +1332,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1078,7 +1353,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [] } + "CapMap": { + "example.com/cap/test": [] + } } }, "100.90.199.68": { @@ -1107,8 +1384,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1117,8 +1400,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [] + } } } } @@ -1137,7 +1426,12 @@ "fd7a:115c:a1e0::/48" ], "CapGrant": [ - { "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], "CapMap": { "example.com/cap/test": [] } } + { + "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], + "CapMap": { + "example.com/cap/test": [] + } + } ] } ], @@ -1164,8 +1458,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.8.15/32", "Cap": "example.com/cap/test", "Values": [] }, - { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "example.com/cap/test", "Values": [] } + { + "Dst": "100.103.8.15/32", + "Cap": "example.com/cap/test", + "Values": [] + }, + { + "Dst": "fd7a:115c:a1e0::5b37:80f/128", + "Cap": "example.com/cap/test", + "Values": [] + } ] } ], @@ -1195,8 +1497,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1206,8 +1514,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.92.142.61": { @@ -1235,8 +1549,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1247,8 +1567,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.83.200.69": { @@ -1276,8 +1602,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1287,8 +1619,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.108.74.26": { @@ -1316,8 +1654,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1327,8 +1671,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.110.121.96": { @@ -1357,8 +1707,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1367,8 +1723,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.103.90.82": { @@ -1397,8 +1759,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1412,7 +1780,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [] } + "CapMap": { + "example.com/cap/test": [] + } } }, "100.90.199.68": { @@ -1441,8 +1811,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1451,8 +1827,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [] + } } } } @@ -1471,7 +1853,12 @@ "fd7a:115c:a1e0::/48" ], "CapGrant": [ - { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], "CapMap": { "example.com/cap/test": [] } } + { + "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], + "CapMap": { + "example.com/cap/test": [] + } + } ] } ], @@ -1498,8 +1885,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [] + } ] } ], @@ -1529,8 +1924,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1540,8 +1941,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.92.142.61": { @@ -1569,8 +1976,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1581,8 +1994,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.83.200.69": { @@ -1610,8 +2029,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1621,8 +2046,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.103.8.15": { @@ -1650,8 +2081,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1661,8 +2098,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.110.121.96": { @@ -1691,8 +2134,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1701,8 +2150,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.103.90.82": { @@ -1731,8 +2186,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1746,7 +2207,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [] } + "CapMap": { + "example.com/cap/test": [] + } } }, "100.90.199.68": { @@ -1775,8 +2238,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1785,8 +2254,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [] + } } } } @@ -1805,7 +2280,12 @@ "fd7a:115c:a1e0::/48" ], "CapGrant": [ - { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], "CapMap": { "example.com/cap/test": [] } } + { + "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], + "CapMap": { + "example.com/cap/test": [] + } + } ] } ], @@ -1832,8 +2312,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "example.com/cap/test", "Values": [] }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "example.com/cap/test", "Values": [] } + { + "Dst": "100.110.121.96/32", + "Cap": "example.com/cap/test", + "Values": [] + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "example.com/cap/test", + "Values": [] + } ] } ], @@ -1863,8 +2351,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1874,8 +2368,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.92.142.61": { @@ -1903,8 +2403,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1915,8 +2421,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.83.200.69": { @@ -1944,8 +2456,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1955,8 +2473,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.103.8.15": { @@ -1984,8 +2508,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1995,8 +2525,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.108.74.26": { @@ -2024,8 +2560,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2035,8 +2577,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.103.90.82": { @@ -2065,8 +2613,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2080,7 +2634,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [] } + "CapMap": { + "example.com/cap/test": [] + } } }, "100.90.199.68": { @@ -2109,8 +2665,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2119,8 +2681,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [] + } } } } @@ -2139,7 +2707,12 @@ "fd7a:115c:a1e0::/48" ], "CapGrant": [ - { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], "CapMap": { "example.com/cap/test": [] } } + { + "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], + "CapMap": { + "example.com/cap/test": [] + } + } ] } ], @@ -2166,8 +2739,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "example.com/cap/test", "Values": [] }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "example.com/cap/test", "Values": [] } + { + "Dst": "100.103.90.82/32", + "Cap": "example.com/cap/test", + "Values": [] + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "example.com/cap/test", + "Values": [] + } ] } ], @@ -2197,8 +2778,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2208,8 +2795,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.92.142.61": { @@ -2237,8 +2830,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2249,8 +2848,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.83.200.69": { @@ -2278,8 +2883,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2289,8 +2900,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.103.8.15": { @@ -2318,8 +2935,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2329,8 +2952,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.108.74.26": { @@ -2358,8 +2987,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2369,8 +3004,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.110.121.96": { @@ -2399,8 +3040,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2409,8 +3056,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.90.199.68": { @@ -2439,8 +3092,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2449,8 +3108,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [] + } } } } @@ -2469,7 +3134,12 @@ "fd7a:115c:a1e0::/48" ], "CapGrant": [ - { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "CapMap": { "example.com/cap/test": [] } } + { + "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], + "CapMap": { + "example.com/cap/test": [] + } + } ] } ], @@ -2496,8 +3166,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "example.com/cap/test", "Values": [] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "example.com/cap/test", "Values": [] } + { + "Dst": "100.90.199.68/32", + "Cap": "example.com/cap/test", + "Values": [] + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "example.com/cap/test", + "Values": [] + } ] } ], @@ -2527,8 +3205,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2538,8 +3222,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.92.142.61": { @@ -2567,8 +3257,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2579,8 +3275,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.83.200.69": { @@ -2608,8 +3310,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2619,8 +3327,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.103.8.15": { @@ -2648,8 +3362,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2659,8 +3379,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.108.74.26": { @@ -2688,8 +3414,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2699,8 +3431,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.110.121.96": { @@ -2729,8 +3467,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2739,8 +3483,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [] + } } }, "100.103.90.82": { @@ -2769,8 +3519,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2784,7 +3540,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [] } + "CapMap": { + "example.com/cap/test": [] + } } } } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-H4.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-H4.json index c761dac6..c2915684 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-H4.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-H4.json @@ -40,7 +40,15 @@ } ] }, - "grants_section": [{ "src": [], "dst": ["*"], "app": { "example.com/cap/test": [{}] } }], + "grants_section": [ + { + "src": [], + "dst": ["*"], + "app": { + "example.com/cap/test": [{}] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -63,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-H5.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-H5.json index d5e5bb55..1e841294 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-H5.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-H5.json @@ -40,7 +40,15 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": [], "app": { "example.com/cap/test": [{}] } }], + "grants_section": [ + { + "src": ["*"], + "dst": [], + "app": { + "example.com/cap/test": [{}] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -63,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-H6.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-H6.json index 8b2f46da..f052ad1e 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-H6.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-H6.json @@ -40,7 +40,15 @@ } ] }, - "grants_section": [{ "src": ["group:empty"], "dst": ["*"], "app": { "example.com/cap/test": [{}] } }], + "grants_section": [ + { + "src": ["group:empty"], + "dst": ["*"], + "app": { + "example.com/cap/test": [{}] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -63,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -133,7 +143,9 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -145,8 +157,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.85.66.106/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -199,7 +219,9 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -211,8 +233,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.92.142.61/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -265,7 +295,9 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -277,8 +309,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.83.200.69/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -329,7 +369,12 @@ { "SrcIPs": [], "CapGrant": [ - { "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], "CapMap": { "example.com/cap/test": [{}] } } + { + "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], + "CapMap": { + "example.com/cap/test": [{}] + } + } ] } ], @@ -340,8 +385,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.8.15/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.103.8.15/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::5b37:80f/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -394,7 +447,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -406,8 +461,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -460,7 +523,9 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -472,8 +537,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.110.121.96/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -526,7 +599,9 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -538,8 +613,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.103.90.82/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], @@ -592,7 +675,9 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] } @@ -604,8 +689,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.90.199.68/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] } ], diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-I1.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-I1.json index 35bb0f16..082593d6 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-I1.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-I1.json @@ -39,7 +39,14 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["10.33.0.0/16"], "via": ["tag:router"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["10.33.0.0/16"], + "via": ["tag:router"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -62,7 +69,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -154,8 +163,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -166,7 +181,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -215,7 +234,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "10.33.0.0/16", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "10.33.0.0/16", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -239,7 +266,15 @@ "fd7a:115c:a1e0::/48" ], "SrcCaps": null, - "Dsts": [{ "Net": "10.33.0.0/16", "Ports": { "First": 0, "Last": 65535 } }], + "Dsts": [ + { + "Net": "10.33.0.0/16", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ], "Caps": [] } ], @@ -269,8 +304,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -280,7 +321,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -309,8 +354,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -320,7 +371,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -349,8 +404,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -360,7 +421,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -389,8 +454,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -400,7 +471,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -430,8 +505,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -440,7 +521,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -470,8 +555,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -514,8 +605,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -524,7 +621,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -568,8 +669,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -580,7 +687,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -649,8 +760,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -661,7 +778,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -730,8 +851,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -742,7 +869,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -811,8 +942,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -823,7 +960,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -892,8 +1033,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -904,7 +1051,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -973,8 +1124,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -985,7 +1142,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-I2.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-I2.json index 7056185a..19df2802 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-I2.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-I2.json @@ -39,7 +39,14 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["10.33.0.0/16"], "via": ["tag:router"], "ip": ["tcp:80"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["10.33.0.0/16"], + "via": ["tag:router"], + "ip": ["tcp:80"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -62,7 +69,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -154,8 +163,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -166,7 +181,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -215,7 +234,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "10.33.0.0/16", "Ports": { "First": 80, "Last": 80 } }], + "DstPorts": [ + { + "IP": "10.33.0.0/16", + "Ports": { + "First": 80, + "Last": 80 + } + } + ], "IPProto": [6] } ], @@ -240,7 +267,15 @@ "fd7a:115c:a1e0::/48" ], "SrcCaps": null, - "Dsts": [{ "Net": "10.33.0.0/16", "Ports": { "First": 80, "Last": 80 } }], + "Dsts": [ + { + "Net": "10.33.0.0/16", + "Ports": { + "First": 80, + "Last": 80 + } + } + ], "Caps": [] } ], @@ -270,8 +305,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -281,7 +322,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -310,8 +355,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -321,7 +372,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -350,8 +405,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -361,7 +422,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -390,8 +455,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -401,7 +472,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -431,8 +506,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -441,7 +522,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -471,8 +556,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -515,8 +606,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -525,7 +622,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -569,8 +670,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -581,7 +688,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -650,8 +761,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -662,7 +779,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -731,8 +852,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -743,7 +870,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -812,8 +943,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -824,7 +961,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -893,8 +1034,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -905,7 +1052,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -974,8 +1125,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -986,7 +1143,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-I3.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-I3.json index d6ecfb0d..b8abd3f4 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-I3.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-I3.json @@ -39,7 +39,14 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["10.33.0.0/16"], "via": ["tag:router", "tag:exit"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["10.33.0.0/16"], + "via": ["tag:router", "tag:exit"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -62,7 +69,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -154,8 +163,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -166,7 +181,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -215,7 +234,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "10.33.0.0/16", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "10.33.0.0/16", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -239,7 +266,15 @@ "fd7a:115c:a1e0::/48" ], "SrcCaps": null, - "Dsts": [{ "Net": "10.33.0.0/16", "Ports": { "First": 0, "Last": 65535 } }], + "Dsts": [ + { + "Net": "10.33.0.0/16", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ], "Caps": [] } ], @@ -269,8 +304,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -280,7 +321,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -309,8 +354,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -320,7 +371,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -349,8 +404,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -360,7 +421,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -389,8 +454,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -400,7 +471,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -430,8 +505,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -440,7 +521,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -470,8 +555,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -514,8 +605,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -524,7 +621,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -568,8 +669,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -580,7 +687,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -649,8 +760,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -661,7 +778,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -730,8 +851,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -742,7 +869,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -811,8 +942,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -823,7 +960,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -892,8 +1033,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -904,7 +1051,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -973,8 +1124,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -985,7 +1142,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-J1.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-J1.json index 58267c8b..bc1a547c 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-J1.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-J1.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["tag:server"], "ip": ["tcp:22"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["tag:server"], + "ip": ["tcp:22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -168,8 +176,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -179,7 +193,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -248,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -259,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -328,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -339,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -408,8 +446,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -419,7 +463,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -454,8 +502,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "IPProto": [6] } @@ -482,8 +542,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -514,8 +586,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -525,7 +603,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -554,8 +636,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -566,7 +654,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -595,8 +687,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -606,7 +704,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -635,8 +737,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -646,7 +754,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -676,8 +788,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -686,7 +804,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -716,8 +838,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -760,8 +888,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -770,7 +904,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -829,8 +967,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -840,7 +984,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -909,8 +1057,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -920,7 +1074,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -989,8 +1147,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1000,7 +1164,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-J2.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-J2.json index 3769ee91..961a9511 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-J2.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-J2.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["tag:server"], "ip": ["udp:53"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["tag:server"], + "ip": ["udp:53"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -168,8 +176,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -179,7 +193,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -248,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -259,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -328,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -339,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -408,8 +446,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -419,7 +463,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -454,8 +502,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 53, "Last": 53 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 53, "Last": 53 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 53, + "Last": 53 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 53, + "Last": 53 + } + } ], "IPProto": [17] } @@ -482,8 +542,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 53, "Last": 53 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 53, "Last": 53 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 53, + "Last": 53 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 53, + "Last": 53 + } + } ], "Caps": [] } @@ -514,8 +586,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -525,7 +603,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -554,8 +636,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -566,7 +654,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -595,8 +687,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -606,7 +704,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -635,8 +737,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -646,7 +754,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -676,8 +788,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -686,7 +804,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -716,8 +838,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -760,8 +888,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -770,7 +904,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -829,8 +967,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -840,7 +984,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -909,8 +1057,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -920,7 +1074,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -989,8 +1147,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1000,7 +1164,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-J3.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-J3.json index e6f655d1..ff513b37 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-J3.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-J3.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["tag:server"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["tag:server"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -168,8 +176,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -179,7 +193,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -248,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -259,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -328,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -339,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -408,8 +446,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -419,7 +463,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -454,8 +502,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -481,8 +541,20 @@ ], "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 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -513,8 +585,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -524,7 +602,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -553,8 +635,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -565,7 +653,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -594,8 +686,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -605,7 +703,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -634,8 +736,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -645,7 +753,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -675,8 +787,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -685,7 +803,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -715,8 +837,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -759,8 +887,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -769,7 +903,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -828,8 +966,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -839,7 +983,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -908,8 +1056,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -919,7 +1073,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -988,8 +1146,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -999,7 +1163,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-J4.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-J4.json index 7a5cf65b..31831019 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-J4.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-J4.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["tag:server"], "ip": ["tcp:80", "udp:53", "tcp:443"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["tag:server"], + "ip": ["tcp:80", "udp:53", "tcp:443"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -168,8 +176,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -179,7 +193,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -248,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -259,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -328,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -339,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -408,8 +446,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -419,7 +463,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -454,10 +502,34 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.108.74.26", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 443, "Last": 443 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "IPProto": [6] }, @@ -469,8 +541,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 53, "Last": 53 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 53, "Last": 53 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 53, + "Last": 53 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 53, + "Last": 53 + } + } ], "IPProto": [17] } @@ -497,10 +581,34 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] }, @@ -525,8 +633,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 53, "Last": 53 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 53, "Last": 53 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 53, + "Last": 53 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 53, + "Last": 53 + } + } ], "Caps": [] } @@ -557,8 +677,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -568,7 +694,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -597,8 +727,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -609,7 +745,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -638,8 +778,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -649,7 +795,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -678,8 +828,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -689,7 +845,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -719,8 +879,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -729,7 +895,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -759,8 +929,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -803,8 +979,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -813,7 +995,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -872,8 +1058,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -883,7 +1075,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -952,8 +1148,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -963,7 +1165,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1032,8 +1238,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1043,7 +1255,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-J5.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-J5.json index 42b88589..de9a0e70 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-J5.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-J5.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["tag:server"], "ip": ["tcp:80-443"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["tag:server"], + "ip": ["tcp:80-443"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -168,8 +176,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -179,7 +193,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -248,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -259,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -328,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -339,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -408,8 +446,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -419,7 +463,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -454,8 +502,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 443 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 443 + } + } ], "IPProto": [6] } @@ -482,8 +542,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 443 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 443 + } + } ], "Caps": [] } @@ -514,8 +586,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -525,7 +603,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -554,8 +636,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -566,7 +654,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -595,8 +687,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -606,7 +704,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -635,8 +737,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -646,7 +754,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -676,8 +788,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -686,7 +804,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -716,8 +838,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -760,8 +888,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -770,7 +904,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -829,8 +967,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -840,7 +984,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -909,8 +1057,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -920,7 +1074,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -989,8 +1147,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1000,7 +1164,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-J6.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-J6.json index 2332d3fa..453add9b 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-J6.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-J6.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["tag:server"], "ip": ["80"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["tag:server"], + "ip": ["80"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -168,8 +176,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -179,7 +193,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -248,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -259,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -328,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -339,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -408,8 +446,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -419,7 +463,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -454,8 +502,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 80 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 80 + } + } ] } ], @@ -481,8 +541,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] } @@ -513,8 +585,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -524,7 +602,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -553,8 +635,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -565,7 +653,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -594,8 +686,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -605,7 +703,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -634,8 +736,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -645,7 +753,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -675,8 +787,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -685,7 +803,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -715,8 +837,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -759,8 +887,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -769,7 +903,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -828,8 +966,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -839,7 +983,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -908,8 +1056,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -919,7 +1073,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -988,8 +1146,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -999,7 +1163,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K1.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K1.json index cd7d847c..e307a80d 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K1.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K1.json @@ -61,7 +61,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -133,7 +135,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -158,8 +168,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -190,8 +212,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -202,7 +230,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -231,8 +263,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -242,7 +280,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -271,8 +313,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -282,7 +330,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -311,8 +363,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -322,7 +380,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -352,8 +414,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -362,7 +430,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -392,8 +464,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -436,8 +514,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -446,7 +530,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -465,7 +553,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -490,8 +586,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -522,8 +630,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -533,7 +647,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -562,8 +680,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -573,7 +697,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -602,8 +730,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -613,7 +747,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -642,8 +780,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -653,7 +797,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -683,8 +831,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -693,7 +847,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -723,8 +881,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -767,8 +931,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -777,7 +947,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -796,7 +970,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -821,8 +1003,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -853,8 +1047,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -864,7 +1064,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -893,8 +1097,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -905,7 +1115,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -934,8 +1148,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -945,7 +1165,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -974,8 +1198,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -985,7 +1215,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1015,8 +1249,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1025,7 +1265,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1055,8 +1299,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1099,8 +1349,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1109,7 +1365,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1128,7 +1388,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1153,8 +1421,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1185,8 +1465,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1196,7 +1482,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1225,8 +1515,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1237,7 +1533,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1266,8 +1566,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1277,7 +1583,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1306,8 +1616,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1317,7 +1633,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1347,8 +1667,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1357,7 +1683,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1387,8 +1717,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1431,8 +1767,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1441,7 +1783,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1460,7 +1806,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1485,8 +1839,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1517,8 +1883,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1528,7 +1900,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1557,8 +1933,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1569,7 +1951,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1598,8 +1984,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1609,7 +2001,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1638,8 +2034,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1649,7 +2051,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1679,8 +2085,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1689,7 +2101,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1719,8 +2135,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1763,8 +2185,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1773,7 +2201,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1792,7 +2224,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1817,8 +2257,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1849,8 +2301,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1860,7 +2318,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1889,8 +2351,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1901,7 +2369,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1930,8 +2402,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1941,7 +2419,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1970,8 +2452,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1981,7 +2469,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2010,8 +2502,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2021,7 +2519,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2051,8 +2553,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2095,8 +2603,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2105,7 +2619,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2124,7 +2642,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2149,8 +2675,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2181,8 +2719,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2192,7 +2736,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2221,8 +2769,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2233,7 +2787,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2262,8 +2820,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2273,7 +2837,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2302,8 +2870,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2313,7 +2887,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2342,8 +2920,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2353,7 +2937,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2383,8 +2971,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2393,7 +2987,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2423,8 +3021,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2433,7 +3037,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2452,7 +3060,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2477,8 +3093,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2509,8 +3137,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2520,7 +3154,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2549,8 +3187,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2561,7 +3205,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2590,8 +3238,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2601,7 +3255,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2630,8 +3288,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2641,7 +3305,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2670,8 +3338,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2681,7 +3355,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2711,8 +3389,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2721,7 +3405,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2751,8 +3439,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K11.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K11.json index e6f66444..439d13e2 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K11.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K11.json @@ -61,8 +61,19 @@ "app": { "tailscale.com/cap/webui": [{}], "tailscale.com/cap/relay": [{}], - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] } } ], @@ -88,7 +99,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -164,8 +177,19 @@ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/webui": [{}] } @@ -182,7 +206,9 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] }, @@ -196,7 +222,9 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "tailscale.com/cap/relay-target": null } + "CapMap": { + "tailscale.com/cap/relay-target": null + } } ] } @@ -227,26 +255,64 @@ { "Dst": "100.85.66.106/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "100.85.66.106/32", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + }, + { + "Dst": "100.85.66.106/32", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + }, + { + "Dst": "100.85.66.106/32", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] }, - { "Dst": "100.85.66.106/32", "Cap": "tailscale.com/cap/relay", "Values": [{}] }, - { "Dst": "100.85.66.106/32", "Cap": "tailscale.com/cap/webui", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "tailscale.com/cap/relay", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "tailscale.com/cap/webui", "Values": [{}] }, { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] } ] }, @@ -272,8 +338,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.85.66.106/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] }, { @@ -298,8 +372,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "tailscale.com/cap/relay-target", "Values": null }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "tailscale.com/cap/relay-target", "Values": null } + { + "Dst": "100.85.66.106/32", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + } ] } ], @@ -329,8 +411,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -341,11 +429,26 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -377,8 +480,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -388,11 +497,26 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -424,8 +548,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -435,11 +565,26 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -471,8 +616,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -482,11 +633,26 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -519,8 +685,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -529,11 +701,26 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -566,8 +753,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -582,9 +775,20 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -617,8 +821,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -627,11 +837,26 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -657,8 +882,19 @@ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/webui": [{}] } @@ -675,7 +911,9 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] }, @@ -689,7 +927,9 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "tailscale.com/cap/relay-target": null } + "CapMap": { + "tailscale.com/cap/relay-target": null + } } ] } @@ -720,27 +960,65 @@ { "Dst": "100.92.142.61/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "100.92.142.61/32", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + }, + { + "Dst": "100.92.142.61/32", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + }, + { + "Dst": "100.92.142.61/32", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] }, - { "Dst": "100.92.142.61/32", "Cap": "tailscale.com/cap/relay", "Values": [{}] }, - { "Dst": "100.92.142.61/32", "Cap": "tailscale.com/cap/webui", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "tailscale.com/cap/webui", "Values": [{}] }, { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "tailscale.com/cap/relay", "Values": [{}] } + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + } ] }, { @@ -765,8 +1043,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.92.142.61/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] }, { @@ -791,8 +1077,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "tailscale.com/cap/relay-target", "Values": null }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "tailscale.com/cap/relay-target", "Values": null } + { + "Dst": "100.92.142.61/32", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + } ] } ], @@ -822,8 +1116,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -833,11 +1133,26 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -869,8 +1184,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -880,11 +1201,26 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -916,8 +1252,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -927,11 +1269,26 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -963,8 +1320,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -974,11 +1337,26 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -1011,8 +1389,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1021,11 +1405,26 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -1058,8 +1457,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1074,9 +1479,20 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -1109,8 +1525,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1119,11 +1541,26 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -1149,8 +1586,19 @@ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/webui": [{}] } @@ -1167,7 +1615,9 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] }, @@ -1181,7 +1631,9 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "tailscale.com/cap/relay-target": null } + "CapMap": { + "tailscale.com/cap/relay-target": null + } } ] } @@ -1212,27 +1664,65 @@ { "Dst": "100.83.200.69/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "100.83.200.69/32", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + }, + { + "Dst": "100.83.200.69/32", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + }, + { + "Dst": "100.83.200.69/32", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] }, - { "Dst": "100.83.200.69/32", "Cap": "tailscale.com/cap/relay", "Values": [{}] }, - { "Dst": "100.83.200.69/32", "Cap": "tailscale.com/cap/webui", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "tailscale.com/cap/webui", "Values": [{}] }, { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "tailscale.com/cap/relay", "Values": [{}] } + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + } ] }, { @@ -1257,8 +1747,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.83.200.69/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] }, { @@ -1283,8 +1781,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "tailscale.com/cap/relay-target", "Values": null }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "tailscale.com/cap/relay-target", "Values": null } + { + "Dst": "100.83.200.69/32", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + } ] } ], @@ -1314,8 +1820,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1325,11 +1837,26 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -1361,8 +1888,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1373,11 +1906,26 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -1409,8 +1957,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1420,11 +1974,26 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -1456,8 +2025,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1467,11 +2042,26 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -1504,8 +2094,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1514,11 +2110,26 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -1551,8 +2162,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1567,9 +2184,20 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -1602,8 +2230,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1612,11 +2246,26 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -1642,8 +2291,19 @@ { "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/webui": [{}] } @@ -1660,7 +2320,9 @@ "CapGrant": [ { "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] }, @@ -1674,7 +2336,9 @@ "CapGrant": [ { "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], - "CapMap": { "tailscale.com/cap/relay-target": null } + "CapMap": { + "tailscale.com/cap/relay-target": null + } } ] } @@ -1705,27 +2369,65 @@ { "Dst": "100.103.8.15/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "100.103.8.15/32", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + }, + { + "Dst": "100.103.8.15/32", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + }, + { + "Dst": "100.103.8.15/32", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] }, - { "Dst": "100.103.8.15/32", "Cap": "tailscale.com/cap/relay", "Values": [{}] }, - { "Dst": "100.103.8.15/32", "Cap": "tailscale.com/cap/webui", "Values": [{}] }, { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] }, - { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "tailscale.com/cap/relay", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "tailscale.com/cap/webui", "Values": [{}] } + { + "Dst": "fd7a:115c:a1e0::5b37:80f/128", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::5b37:80f/128", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + } ] }, { @@ -1750,8 +2452,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.8.15/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.103.8.15/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::5b37:80f/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] }, { @@ -1776,8 +2486,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.8.15/32", "Cap": "tailscale.com/cap/relay-target", "Values": null }, - { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "tailscale.com/cap/relay-target", "Values": null } + { + "Dst": "100.103.8.15/32", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::5b37:80f/128", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + } ] } ], @@ -1807,8 +2525,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1818,11 +2542,26 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -1854,8 +2593,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1866,11 +2611,26 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -1902,8 +2662,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1913,11 +2679,26 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -1949,8 +2730,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1960,11 +2747,26 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -1997,8 +2799,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2007,11 +2815,26 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -2044,8 +2867,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2060,9 +2889,20 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -2095,8 +2935,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2105,11 +2951,26 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -2135,8 +2996,19 @@ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/webui": [{}] } @@ -2153,7 +3025,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] }, @@ -2167,7 +3041,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "tailscale.com/cap/relay-target": null } + "CapMap": { + "tailscale.com/cap/relay-target": null + } } ] } @@ -2198,26 +3074,64 @@ { "Dst": "100.108.74.26/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "100.108.74.26/32", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + }, + { + "Dst": "100.108.74.26/32", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + }, + { + "Dst": "100.108.74.26/32", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] }, - { "Dst": "100.108.74.26/32", "Cap": "tailscale.com/cap/relay", "Values": [{}] }, - { "Dst": "100.108.74.26/32", "Cap": "tailscale.com/cap/webui", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "tailscale.com/cap/relay", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "tailscale.com/cap/webui", "Values": [{}] }, { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] } ] }, @@ -2243,8 +3157,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.108.74.26/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] }, { @@ -2269,8 +3191,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "tailscale.com/cap/relay-target", "Values": null }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "tailscale.com/cap/relay-target", "Values": null } + { + "Dst": "100.108.74.26/32", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + } ] } ], @@ -2300,8 +3230,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2311,11 +3247,26 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -2347,8 +3298,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2359,11 +3316,26 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -2395,8 +3367,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2406,11 +3384,26 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -2442,8 +3435,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2453,11 +3452,26 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -2490,8 +3504,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2500,11 +3520,26 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -2537,8 +3572,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2553,9 +3594,20 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -2588,8 +3640,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2598,11 +3656,26 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -2628,8 +3701,19 @@ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/webui": [{}] } @@ -2646,7 +3730,9 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] }, @@ -2660,7 +3746,9 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "tailscale.com/cap/relay-target": null } + "CapMap": { + "tailscale.com/cap/relay-target": null + } } ] } @@ -2691,27 +3779,65 @@ { "Dst": "100.110.121.96/32", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + }, + { + "Dst": "100.110.121.96/32", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + }, + { + "Dst": "100.110.121.96/32", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] }, - { "Dst": "100.110.121.96/32", "Cap": "tailscale.com/cap/relay", "Values": [{}] }, - { "Dst": "100.110.121.96/32", "Cap": "tailscale.com/cap/webui", "Values": [{}] }, { "Dst": "100.110.121.96/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "tailscale.com/cap/relay", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "tailscale.com/cap/webui", "Values": [{}] } + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + } ] }, { @@ -2736,8 +3862,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.110.121.96/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] }, { @@ -2762,8 +3896,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "tailscale.com/cap/relay-target", "Values": null }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "tailscale.com/cap/relay-target", "Values": null } + { + "Dst": "100.110.121.96/32", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + } ] } ], @@ -2793,8 +3935,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2804,11 +3952,26 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -2840,8 +4003,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2852,11 +4021,26 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -2888,8 +4072,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2899,11 +4089,26 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -2935,8 +4140,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2946,11 +4157,26 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -2982,8 +4208,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2993,11 +4225,26 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -3030,8 +4277,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -3046,9 +4299,20 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -3081,8 +4345,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -3091,11 +4361,26 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -3121,8 +4406,19 @@ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/webui": [{}] } @@ -3139,7 +4435,9 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] }, @@ -3153,7 +4451,9 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "tailscale.com/cap/relay-target": null } + "CapMap": { + "tailscale.com/cap/relay-target": null + } } ] } @@ -3181,30 +4481,68 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "tailscale.com/cap/webui", "Values": [{}] }, + { + "Dst": "100.103.90.82/32", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + }, { "Dst": "100.103.90.82/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "100.103.90.82/32", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + }, + { + "Dst": "100.103.90.82/32", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] }, - { "Dst": "100.103.90.82/32", "Cap": "tailscale.com/cap/relay", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "tailscale.com/cap/webui", "Values": [{}] }, { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "tailscale.com/cap/relay", "Values": [{}] } + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + } ] }, { @@ -3229,8 +4567,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.103.90.82/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] }, { @@ -3255,8 +4601,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "tailscale.com/cap/relay-target", "Values": null }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "tailscale.com/cap/relay-target", "Values": null } + { + "Dst": "100.103.90.82/32", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + } ] } ], @@ -3286,8 +4640,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -3297,11 +4657,26 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -3333,8 +4708,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -3345,11 +4726,26 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -3381,8 +4777,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -3392,11 +4794,26 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -3428,8 +4845,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -3439,11 +4862,26 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -3475,8 +4913,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -3486,11 +4930,26 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -3523,8 +4982,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -3533,11 +4998,26 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -3570,8 +5050,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -3580,11 +5066,26 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -3610,8 +5111,19 @@ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/webui": [{}] } @@ -3628,7 +5140,9 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] }, @@ -3642,7 +5156,9 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "tailscale.com/cap/relay-target": null } + "CapMap": { + "tailscale.com/cap/relay-target": null + } } ] } @@ -3670,30 +5186,68 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "tailscale.com/cap/relay", "Values": [{}] }, - { "Dst": "100.90.199.68/32", "Cap": "tailscale.com/cap/webui", "Values": [{}] }, + { + "Dst": "100.90.199.68/32", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + }, + { + "Dst": "100.90.199.68/32", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + }, { "Dst": "100.90.199.68/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "100.90.199.68/32", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] }, { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "tailscale.com/cap/relay", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "tailscale.com/cap/webui", "Values": [{}] } + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "tailscale.com/cap/relay", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "tailscale.com/cap/webui", + "Values": [{}] + } ] }, { @@ -3718,8 +5272,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.90.199.68/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] }, { @@ -3744,8 +5306,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "tailscale.com/cap/relay-target", "Values": null }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "tailscale.com/cap/relay-target", "Values": null } + { + "Dst": "100.90.199.68/32", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "tailscale.com/cap/relay-target", + "Values": null + } ] } ], @@ -3775,8 +5345,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -3786,11 +5362,26 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -3822,8 +5413,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -3834,11 +5431,26 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -3870,8 +5482,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -3881,11 +5499,26 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -3917,8 +5550,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -3928,11 +5567,26 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -3964,8 +5618,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -3975,11 +5635,26 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -4012,8 +5687,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -4022,11 +5703,26 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] @@ -4059,8 +5755,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -4075,9 +5777,20 @@ "DisplayName": "monitorpasskeykradalby" }, "CapMap": { - "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }], + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ], "tailscale.com/cap/drive-sharer": null, - "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }], + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ], "tailscale.com/cap/relay": [{}], "tailscale.com/cap/relay-target": null, "tailscale.com/cap/webui": [{}] diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K12.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K12.json index 4ab1fe01..d1acf460 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K12.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K12.json @@ -50,7 +50,13 @@ "src": ["*"], "dst": ["10.33.0.0/16"], "via": ["tag:router"], - "app": { "example.com/cap/subnet-access": [{ "level": "admin" }] } + "app": { + "example.com/cap/subnet-access": [ + { + "level": "admin" + } + ] + } } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", @@ -75,7 +81,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -167,8 +175,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -179,7 +193,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -248,8 +266,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -259,7 +283,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -288,8 +316,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -299,7 +333,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -328,8 +366,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -339,7 +383,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -368,8 +416,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -379,7 +433,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -409,8 +467,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -419,7 +483,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -449,8 +517,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -493,8 +567,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -503,7 +583,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -547,8 +631,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -559,7 +649,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -628,8 +722,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -640,7 +740,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -709,8 +813,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -721,7 +831,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -790,8 +904,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -802,7 +922,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -871,8 +995,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -883,7 +1013,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -952,8 +1086,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -964,7 +1104,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K13.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K13.json index 8ec69b89..16bb593a 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K13.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K13.json @@ -52,7 +52,13 @@ "dst": ["10.33.0.0/16"], "via": ["tag:router"], "ip": ["tcp:80"], - "app": { "example.com/cap/subnet-access": [{ "level": "admin" }] } + "app": { + "example.com/cap/subnet-access": [ + { + "level": "admin" + } + ] + } } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", @@ -77,7 +83,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -169,8 +177,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -181,7 +195,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -230,7 +248,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "10.33.0.0/16", "Ports": { "First": 80, "Last": 80 } }], + "DstPorts": [ + { + "IP": "10.33.0.0/16", + "Ports": { + "First": 80, + "Last": 80 + } + } + ], "IPProto": [6] } ], @@ -255,7 +281,15 @@ "fd7a:115c:a1e0::/48" ], "SrcCaps": null, - "Dsts": [{ "Net": "10.33.0.0/16", "Ports": { "First": 80, "Last": 80 } }], + "Dsts": [ + { + "Net": "10.33.0.0/16", + "Ports": { + "First": 80, + "Last": 80 + } + } + ], "Caps": [] } ], @@ -285,8 +319,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -296,7 +336,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -325,8 +369,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -336,7 +386,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -365,8 +419,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -376,7 +436,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -405,8 +469,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -416,7 +486,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -446,8 +520,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -456,7 +536,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -486,8 +570,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -530,8 +620,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -540,7 +636,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -584,8 +684,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -596,7 +702,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -665,8 +775,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -677,7 +793,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -746,8 +866,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -758,7 +884,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -827,8 +957,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -839,7 +975,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -908,8 +1048,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -920,7 +1066,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -989,8 +1139,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1001,7 +1157,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K14.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K14.json index 4633d4a1..6bdd1ce4 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K14.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K14.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["fd7a:115c:a1e0::c537:c845"], "dst": ["tag:server"], "ip": ["tcp:22"] }], + "grants_section": [ + { + "src": ["fd7a:115c:a1e0::c537:c845"], + "dst": ["tag:server"], + "ip": ["tcp:22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -258,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -269,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -344,8 +362,20 @@ { "SrcIPs": ["fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "IPProto": [6] } @@ -356,8 +386,20 @@ "Srcs": ["fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -398,8 +440,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -409,7 +457,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K15.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K15.json index d422c02a..da53a921 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K15.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K15.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["fd7a:115c:a1e0::b901:4a87"], "ip": ["tcp:22"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["fd7a:115c:a1e0::b901:4a87"], + "ip": ["tcp:22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -168,8 +176,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -179,7 +193,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -248,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -259,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -328,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -339,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -408,8 +446,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -419,7 +463,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -453,7 +501,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } }], + "DstPorts": [ + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } + ], "IPProto": [6] } ], @@ -478,7 +534,15 @@ "fd7a:115c:a1e0::/48" ], "SrcCaps": null, - "Dsts": [{ "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } }], + "Dsts": [ + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } + ], "Caps": [] } ], @@ -508,8 +572,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -519,7 +589,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -548,8 +622,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -560,7 +640,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -589,8 +673,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -600,7 +690,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -629,8 +723,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -640,7 +740,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -670,8 +774,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -680,7 +790,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -710,8 +824,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -754,8 +874,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -764,7 +890,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -823,8 +953,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -834,7 +970,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -903,8 +1043,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -914,7 +1060,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -983,8 +1133,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -994,7 +1150,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K16.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K16.json index 38783969..9481e699 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K16.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K16.json @@ -44,8 +44,16 @@ ] }, "grants_section": [ - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["tcp:22"] }, - { "src": ["*"], "dst": ["*"], "ip": ["*"] } + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["tcp:22"] + }, + { + "src": ["*"], + "dst": ["*"], + "ip": ["*"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -69,7 +77,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -141,7 +151,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -166,8 +184,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -198,8 +228,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -210,7 +246,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -239,8 +279,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -250,7 +296,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -279,8 +329,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -290,7 +346,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -319,8 +379,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -330,7 +396,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -360,8 +430,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -370,7 +446,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -400,8 +480,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -444,8 +530,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -454,7 +546,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -473,7 +569,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -498,8 +602,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -530,8 +646,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -541,7 +663,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -570,8 +696,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -581,7 +713,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -610,8 +746,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -621,7 +763,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -650,8 +796,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -661,7 +813,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -691,8 +847,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -701,7 +863,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -731,8 +897,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -775,8 +947,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -785,7 +963,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -804,7 +986,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -829,8 +1019,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -861,8 +1063,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -872,7 +1080,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -901,8 +1113,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -913,7 +1131,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -942,8 +1164,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -953,7 +1181,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -982,8 +1214,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -993,7 +1231,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1023,8 +1265,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1033,7 +1281,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1063,8 +1315,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1107,8 +1365,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1117,7 +1381,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1136,7 +1404,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1161,8 +1437,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1193,8 +1481,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1204,7 +1498,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1233,8 +1531,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1245,7 +1549,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1274,8 +1582,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1285,7 +1599,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1314,8 +1632,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1325,7 +1649,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1355,8 +1683,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1365,7 +1699,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1395,8 +1733,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1439,8 +1783,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1449,7 +1799,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1464,8 +1818,20 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "IPProto": [6] }, @@ -1476,7 +1842,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1485,8 +1859,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] }, @@ -1511,8 +1897,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1543,8 +1941,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1554,7 +1958,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1583,8 +1991,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1595,7 +2009,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1624,8 +2042,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1635,7 +2059,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1664,8 +2092,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1675,7 +2109,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1705,8 +2143,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1715,7 +2159,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1745,8 +2193,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1789,8 +2243,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1799,7 +2259,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1818,7 +2282,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1843,8 +2315,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1875,8 +2359,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1886,7 +2376,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1915,8 +2409,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1927,7 +2427,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1956,8 +2460,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1967,7 +2477,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1996,8 +2510,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2007,7 +2527,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2036,8 +2560,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2047,7 +2577,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2077,8 +2611,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2121,8 +2661,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2131,7 +2677,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2150,7 +2700,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2175,8 +2733,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2207,8 +2777,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2218,7 +2794,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2247,8 +2827,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2259,7 +2845,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2288,8 +2878,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2299,7 +2895,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2328,8 +2928,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2339,7 +2945,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2368,8 +2978,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2379,7 +2995,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2409,8 +3029,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2419,7 +3045,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2449,8 +3079,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2459,7 +3095,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2478,7 +3118,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2503,8 +3151,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2535,8 +3195,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2546,7 +3212,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2575,8 +3245,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2587,7 +3263,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2616,8 +3296,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2627,7 +3313,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2656,8 +3346,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2667,7 +3363,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2696,8 +3396,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2707,7 +3413,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2737,8 +3447,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2747,7 +3463,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2777,8 +3497,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K17.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K17.json index 6b32606f..8c11fe5b 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K17.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K17.json @@ -44,8 +44,16 @@ ] }, "grants_section": [ - { "src": ["*"], "dst": ["*"], "ip": ["*"] }, - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["tcp:22"] } + { + "src": ["*"], + "dst": ["*"], + "ip": ["*"] + }, + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["tcp:22"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -69,7 +77,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -141,7 +151,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -166,8 +184,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -198,8 +228,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -210,7 +246,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -239,8 +279,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -250,7 +296,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -279,8 +329,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -290,7 +346,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -319,8 +379,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -330,7 +396,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -360,8 +430,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -370,7 +446,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -400,8 +480,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -444,8 +530,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -454,7 +546,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -473,7 +569,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -498,8 +602,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -530,8 +646,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -541,7 +663,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -570,8 +696,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -581,7 +713,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -610,8 +746,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -621,7 +763,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -650,8 +796,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -661,7 +813,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -691,8 +847,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -701,7 +863,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -731,8 +897,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -775,8 +947,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -785,7 +963,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -804,7 +986,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -829,8 +1019,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -861,8 +1063,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -872,7 +1080,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -901,8 +1113,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -913,7 +1131,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -942,8 +1164,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -953,7 +1181,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -982,8 +1214,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -993,7 +1231,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1023,8 +1265,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1033,7 +1281,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1063,8 +1315,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1107,8 +1365,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1117,7 +1381,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1136,7 +1404,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1161,8 +1437,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1193,8 +1481,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1204,7 +1498,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1233,8 +1531,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1245,7 +1549,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1274,8 +1582,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1285,7 +1599,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1314,8 +1632,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1325,7 +1649,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1355,8 +1683,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1365,7 +1699,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1395,8 +1733,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1439,8 +1783,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1449,7 +1799,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1468,13 +1822,33 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] }, { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "IPProto": [6] } @@ -1501,8 +1875,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -1511,8 +1897,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -1543,8 +1941,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1554,7 +1958,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1583,8 +1991,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1595,7 +2009,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1624,8 +2042,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1635,7 +2059,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1664,8 +2092,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1675,7 +2109,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1705,8 +2143,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1715,7 +2159,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1745,8 +2193,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1789,8 +2243,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1799,7 +2259,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1818,7 +2282,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1843,8 +2315,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1875,8 +2359,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1886,7 +2376,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1915,8 +2409,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1927,7 +2427,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1956,8 +2460,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1967,7 +2477,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1996,8 +2510,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2007,7 +2527,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2036,8 +2560,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2047,7 +2577,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2077,8 +2611,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2121,8 +2661,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2131,7 +2677,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2150,7 +2700,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2175,8 +2733,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2207,8 +2777,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2218,7 +2794,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2247,8 +2827,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2259,7 +2845,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2288,8 +2878,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2299,7 +2895,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2328,8 +2928,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2339,7 +2945,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2368,8 +2978,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2379,7 +2995,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2409,8 +3029,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2419,7 +3045,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2449,8 +3079,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2459,7 +3095,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2478,7 +3118,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2503,8 +3151,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2535,8 +3195,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2546,7 +3212,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2575,8 +3245,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2587,7 +3263,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2616,8 +3296,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2627,7 +3313,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2656,8 +3346,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2667,7 +3363,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2696,8 +3396,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2707,7 +3413,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2737,8 +3447,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2747,7 +3463,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2777,8 +3497,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K18.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K18.json index e750a145..b8eb320f 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K18.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K18.json @@ -52,8 +52,24 @@ ] }, "grants_section": [ - { "src": ["*"], "dst": ["*"], "app": { "example.com/cap/one": [{}] } }, - { "src": ["*"], "dst": ["*"], "app": { "example.com/cap/two": [{ "v": 42 }] } } + { + "src": ["*"], + "dst": ["*"], + "app": { + "example.com/cap/one": [{}] + } + }, + { + "src": ["*"], + "dst": ["*"], + "app": { + "example.com/cap/two": [ + { + "v": 42 + } + ] + } + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -77,7 +93,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -150,7 +168,12 @@ "fd7a:115c:a1e0::/48" ], "CapGrant": [ - { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], "CapMap": { "example.com/cap/one": [{}] } } + { + "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], + "CapMap": { + "example.com/cap/one": [{}] + } + } ] }, { @@ -163,7 +186,13 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "example.com/cap/two": [{ "v": 42 }] } + "CapMap": { + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } ] } @@ -191,8 +220,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "example.com/cap/one", "Values": [{}] } + { + "Dst": "100.85.66.106/32", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "example.com/cap/one", + "Values": [{}] + } ] }, { @@ -217,8 +254,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "example.com/cap/two", "Values": [{ "v": 42 }] }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "example.com/cap/two", "Values": [{ "v": 42 }] } + { + "Dst": "100.85.66.106/32", + "Cap": "example.com/cap/two", + "Values": [ + { + "v": 42 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "example.com/cap/two", + "Values": [ + { + "v": 42 + } + ] + } ] } ], @@ -248,8 +301,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -260,8 +319,19 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.83.200.69": { @@ -289,8 +359,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -300,8 +376,19 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.103.8.15": { @@ -329,8 +416,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -340,8 +433,19 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.108.74.26": { @@ -369,8 +473,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -380,8 +490,19 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.110.121.96": { @@ -410,8 +531,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -420,8 +547,19 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.103.90.82": { @@ -450,8 +588,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -465,7 +609,14 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.90.199.68": { @@ -494,8 +645,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -504,8 +661,19 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } } } @@ -524,7 +692,12 @@ "fd7a:115c:a1e0::/48" ], "CapGrant": [ - { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], "CapMap": { "example.com/cap/one": [{}] } } + { + "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], + "CapMap": { + "example.com/cap/one": [{}] + } + } ] }, { @@ -537,7 +710,13 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "example.com/cap/two": [{ "v": 42 }] } + "CapMap": { + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } ] } @@ -565,8 +744,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "example.com/cap/one", "Values": [{}] } + { + "Dst": "100.92.142.61/32", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "example.com/cap/one", + "Values": [{}] + } ] }, { @@ -591,8 +778,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "example.com/cap/two", "Values": [{ "v": 42 }] }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "example.com/cap/two", "Values": [{ "v": 42 }] } + { + "Dst": "100.92.142.61/32", + "Cap": "example.com/cap/two", + "Values": [ + { + "v": 42 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "example.com/cap/two", + "Values": [ + { + "v": 42 + } + ] + } ] } ], @@ -622,8 +825,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -633,8 +842,19 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.83.200.69": { @@ -662,8 +882,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -673,8 +899,19 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.103.8.15": { @@ -702,8 +939,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -713,8 +956,19 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.108.74.26": { @@ -742,8 +996,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -753,8 +1013,19 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.110.121.96": { @@ -783,8 +1054,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -793,8 +1070,19 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.103.90.82": { @@ -823,8 +1111,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -838,7 +1132,14 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.90.199.68": { @@ -867,8 +1168,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -877,8 +1184,19 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } } } @@ -897,7 +1215,12 @@ "fd7a:115c:a1e0::/48" ], "CapGrant": [ - { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "CapMap": { "example.com/cap/one": [{}] } } + { + "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], + "CapMap": { + "example.com/cap/one": [{}] + } + } ] }, { @@ -910,7 +1233,13 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "example.com/cap/two": [{ "v": 42 }] } + "CapMap": { + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } ] } @@ -938,8 +1267,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "example.com/cap/one", "Values": [{}] } + { + "Dst": "100.83.200.69/32", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "example.com/cap/one", + "Values": [{}] + } ] }, { @@ -964,8 +1301,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "example.com/cap/two", "Values": [{ "v": 42 }] }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "example.com/cap/two", "Values": [{ "v": 42 }] } + { + "Dst": "100.83.200.69/32", + "Cap": "example.com/cap/two", + "Values": [ + { + "v": 42 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "example.com/cap/two", + "Values": [ + { + "v": 42 + } + ] + } ] } ], @@ -995,8 +1348,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1006,8 +1365,19 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.92.142.61": { @@ -1035,8 +1405,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1047,8 +1423,19 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.103.8.15": { @@ -1076,8 +1463,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1087,8 +1480,19 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.108.74.26": { @@ -1116,8 +1520,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1127,8 +1537,19 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.110.121.96": { @@ -1157,8 +1578,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1167,8 +1594,19 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.103.90.82": { @@ -1197,8 +1635,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1212,7 +1656,14 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.90.199.68": { @@ -1241,8 +1692,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1251,8 +1708,19 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } } } @@ -1271,7 +1739,12 @@ "fd7a:115c:a1e0::/48" ], "CapGrant": [ - { "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], "CapMap": { "example.com/cap/one": [{}] } } + { + "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], + "CapMap": { + "example.com/cap/one": [{}] + } + } ] }, { @@ -1284,7 +1757,13 @@ "CapGrant": [ { "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], - "CapMap": { "example.com/cap/two": [{ "v": 42 }] } + "CapMap": { + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } ] } @@ -1312,8 +1791,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.8.15/32", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "example.com/cap/one", "Values": [{}] } + { + "Dst": "100.103.8.15/32", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::5b37:80f/128", + "Cap": "example.com/cap/one", + "Values": [{}] + } ] }, { @@ -1338,8 +1825,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.8.15/32", "Cap": "example.com/cap/two", "Values": [{ "v": 42 }] }, - { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "example.com/cap/two", "Values": [{ "v": 42 }] } + { + "Dst": "100.103.8.15/32", + "Cap": "example.com/cap/two", + "Values": [ + { + "v": 42 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::5b37:80f/128", + "Cap": "example.com/cap/two", + "Values": [ + { + "v": 42 + } + ] + } ] } ], @@ -1369,8 +1872,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1380,8 +1889,19 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.92.142.61": { @@ -1409,8 +1929,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1421,8 +1947,19 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.83.200.69": { @@ -1450,8 +1987,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1461,8 +2004,19 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.108.74.26": { @@ -1490,8 +2044,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1501,8 +2061,19 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.110.121.96": { @@ -1531,8 +2102,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1541,8 +2118,19 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.103.90.82": { @@ -1571,8 +2159,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1586,7 +2180,14 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.90.199.68": { @@ -1615,8 +2216,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1625,8 +2232,19 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } } } @@ -1645,7 +2263,12 @@ "fd7a:115c:a1e0::/48" ], "CapGrant": [ - { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], "CapMap": { "example.com/cap/one": [{}] } } + { + "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], + "CapMap": { + "example.com/cap/one": [{}] + } + } ] }, { @@ -1658,7 +2281,13 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/two": [{ "v": 42 }] } + "CapMap": { + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } ] } @@ -1686,8 +2315,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/one", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/one", + "Values": [{}] + } ] }, { @@ -1712,8 +2349,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/two", "Values": [{ "v": 42 }] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/two", "Values": [{ "v": 42 }] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/two", + "Values": [ + { + "v": 42 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/two", + "Values": [ + { + "v": 42 + } + ] + } ] } ], @@ -1743,8 +2396,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1754,8 +2413,19 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.92.142.61": { @@ -1783,8 +2453,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1795,8 +2471,19 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.83.200.69": { @@ -1824,8 +2511,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1835,8 +2528,19 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.103.8.15": { @@ -1864,8 +2568,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1875,8 +2585,19 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.110.121.96": { @@ -1905,8 +2626,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1915,8 +2642,19 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.103.90.82": { @@ -1945,8 +2683,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1960,7 +2704,14 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.90.199.68": { @@ -1989,8 +2740,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1999,8 +2756,19 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } } } @@ -2021,7 +2789,9 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "example.com/cap/one": [{}] } + "CapMap": { + "example.com/cap/one": [{}] + } } ] }, @@ -2035,7 +2805,13 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "example.com/cap/two": [{ "v": 42 }] } + "CapMap": { + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } ] } @@ -2063,8 +2839,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "example.com/cap/one", "Values": [{}] } + { + "Dst": "100.110.121.96/32", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "example.com/cap/one", + "Values": [{}] + } ] }, { @@ -2089,8 +2873,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "example.com/cap/two", "Values": [{ "v": 42 }] }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "example.com/cap/two", "Values": [{ "v": 42 }] } + { + "Dst": "100.110.121.96/32", + "Cap": "example.com/cap/two", + "Values": [ + { + "v": 42 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "example.com/cap/two", + "Values": [ + { + "v": 42 + } + ] + } ] } ], @@ -2120,8 +2920,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2131,8 +2937,19 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.92.142.61": { @@ -2160,8 +2977,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2172,8 +2995,19 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.83.200.69": { @@ -2201,8 +3035,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2212,8 +3052,19 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.103.8.15": { @@ -2241,8 +3092,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2252,8 +3109,19 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.108.74.26": { @@ -2281,8 +3149,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2292,8 +3166,19 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.103.90.82": { @@ -2322,8 +3207,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2337,7 +3228,14 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.90.199.68": { @@ -2366,8 +3264,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2376,8 +3280,19 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } } } @@ -2396,7 +3311,12 @@ "fd7a:115c:a1e0::/48" ], "CapGrant": [ - { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], "CapMap": { "example.com/cap/one": [{}] } } + { + "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], + "CapMap": { + "example.com/cap/one": [{}] + } + } ] }, { @@ -2409,7 +3329,13 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "example.com/cap/two": [{ "v": 42 }] } + "CapMap": { + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } ] } @@ -2437,8 +3363,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "example.com/cap/one", "Values": [{}] } + { + "Dst": "100.103.90.82/32", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "example.com/cap/one", + "Values": [{}] + } ] }, { @@ -2463,8 +3397,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "example.com/cap/two", "Values": [{ "v": 42 }] }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "example.com/cap/two", "Values": [{ "v": 42 }] } + { + "Dst": "100.103.90.82/32", + "Cap": "example.com/cap/two", + "Values": [ + { + "v": 42 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "example.com/cap/two", + "Values": [ + { + "v": 42 + } + ] + } ] } ], @@ -2494,8 +3444,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2505,8 +3461,19 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.92.142.61": { @@ -2534,8 +3501,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2546,8 +3519,19 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.83.200.69": { @@ -2575,8 +3559,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2586,8 +3576,19 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.103.8.15": { @@ -2615,8 +3616,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2626,8 +3633,19 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.108.74.26": { @@ -2655,8 +3673,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2666,8 +3690,19 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.110.121.96": { @@ -2696,8 +3731,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2706,8 +3747,19 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.90.199.68": { @@ -2736,8 +3788,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2746,8 +3804,19 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } } } @@ -2766,7 +3835,12 @@ "fd7a:115c:a1e0::/48" ], "CapGrant": [ - { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "CapMap": { "example.com/cap/one": [{}] } } + { + "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], + "CapMap": { + "example.com/cap/one": [{}] + } + } ] }, { @@ -2779,7 +3853,13 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "example.com/cap/two": [{ "v": 42 }] } + "CapMap": { + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } ] } @@ -2807,8 +3887,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "example.com/cap/one", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "example.com/cap/one", "Values": [{}] } + { + "Dst": "100.90.199.68/32", + "Cap": "example.com/cap/one", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "example.com/cap/one", + "Values": [{}] + } ] }, { @@ -2833,8 +3921,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "example.com/cap/two", "Values": [{ "v": 42 }] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "example.com/cap/two", "Values": [{ "v": 42 }] } + { + "Dst": "100.90.199.68/32", + "Cap": "example.com/cap/two", + "Values": [ + { + "v": 42 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "example.com/cap/two", + "Values": [ + { + "v": 42 + } + ] + } ] } ], @@ -2864,8 +3968,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2875,8 +3985,19 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.92.142.61": { @@ -2904,8 +4025,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2916,8 +4043,19 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.83.200.69": { @@ -2945,8 +4083,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2956,8 +4100,19 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.103.8.15": { @@ -2985,8 +4140,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2996,8 +4157,19 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.108.74.26": { @@ -3025,8 +4197,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -3036,8 +4214,19 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.110.121.96": { @@ -3066,8 +4255,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -3076,8 +4271,19 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } }, "100.103.90.82": { @@ -3106,8 +4312,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -3121,7 +4333,14 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/one": [{}], "example.com/cap/two": [{ "v": 42 }] } + "CapMap": { + "example.com/cap/one": [{}], + "example.com/cap/two": [ + { + "v": 42 + } + ] + } } } } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K19.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K19.json index 2d81c8ec..876af178 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K19.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K19.json @@ -56,8 +56,28 @@ ] }, "grants_section": [ - { "src": ["*"], "dst": ["*"], "app": { "example.com/cap/test": [{ "v": 1 }] } }, - { "src": ["*"], "dst": ["*"], "app": { "example.com/cap/test": [{ "v": 2 }] } } + { + "src": ["*"], + "dst": ["*"], + "app": { + "example.com/cap/test": [ + { + "v": 1 + } + ] + } + }, + { + "src": ["*"], + "dst": ["*"], + "app": { + "example.com/cap/test": [ + { + "v": 2 + } + ] + } + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -81,7 +101,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -156,7 +178,13 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "example.com/cap/test": [{ "v": 1 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + } + ] + } } ] }, @@ -170,7 +198,13 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "example.com/cap/test": [{ "v": 2 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 2 + } + ] + } } ] } @@ -198,8 +232,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "example.com/cap/test", "Values": [{ "v": 1 }] }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "example.com/cap/test", "Values": [{ "v": 1 }] } + { + "Dst": "100.85.66.106/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 1 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 1 + } + ] + } ] }, { @@ -224,8 +274,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "example.com/cap/test", "Values": [{ "v": 2 }] }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "example.com/cap/test", "Values": [{ "v": 2 }] } + { + "Dst": "100.85.66.106/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 2 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 2 + } + ] + } ] } ], @@ -255,8 +321,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -267,8 +339,21 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.83.200.69": { @@ -296,8 +381,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -307,8 +398,21 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.103.8.15": { @@ -336,8 +440,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -347,8 +457,21 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.108.74.26": { @@ -376,8 +499,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -387,8 +516,21 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.110.121.96": { @@ -417,8 +559,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -427,8 +575,21 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.103.90.82": { @@ -457,8 +618,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -472,7 +639,16 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.90.199.68": { @@ -501,8 +677,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -511,8 +693,21 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } } } @@ -533,7 +728,13 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "example.com/cap/test": [{ "v": 1 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + } + ] + } } ] }, @@ -547,7 +748,13 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "example.com/cap/test": [{ "v": 2 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 2 + } + ] + } } ] } @@ -575,8 +782,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "example.com/cap/test", "Values": [{ "v": 1 }] }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "example.com/cap/test", "Values": [{ "v": 1 }] } + { + "Dst": "100.92.142.61/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 1 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 1 + } + ] + } ] }, { @@ -601,8 +824,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "example.com/cap/test", "Values": [{ "v": 2 }] }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "example.com/cap/test", "Values": [{ "v": 2 }] } + { + "Dst": "100.92.142.61/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 2 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 2 + } + ] + } ] } ], @@ -632,8 +871,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -643,8 +888,21 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.83.200.69": { @@ -672,8 +930,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -683,8 +947,21 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.103.8.15": { @@ -712,8 +989,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -723,8 +1006,21 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.108.74.26": { @@ -752,8 +1048,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -763,8 +1065,21 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.110.121.96": { @@ -793,8 +1108,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -803,8 +1124,21 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.103.90.82": { @@ -833,8 +1167,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -848,7 +1188,16 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.90.199.68": { @@ -877,8 +1226,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -887,8 +1242,21 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } } } @@ -909,7 +1277,13 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "example.com/cap/test": [{ "v": 1 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + } + ] + } } ] }, @@ -923,7 +1297,13 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "example.com/cap/test": [{ "v": 2 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 2 + } + ] + } } ] } @@ -951,8 +1331,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "example.com/cap/test", "Values": [{ "v": 1 }] }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "example.com/cap/test", "Values": [{ "v": 1 }] } + { + "Dst": "100.83.200.69/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 1 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 1 + } + ] + } ] }, { @@ -977,8 +1373,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "example.com/cap/test", "Values": [{ "v": 2 }] }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "example.com/cap/test", "Values": [{ "v": 2 }] } + { + "Dst": "100.83.200.69/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 2 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 2 + } + ] + } ] } ], @@ -1008,8 +1420,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1019,8 +1437,21 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.92.142.61": { @@ -1048,8 +1479,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1060,8 +1497,21 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.103.8.15": { @@ -1089,8 +1539,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1100,8 +1556,21 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.108.74.26": { @@ -1129,8 +1598,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1140,8 +1615,21 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.110.121.96": { @@ -1170,8 +1658,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1180,8 +1674,21 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.103.90.82": { @@ -1210,8 +1717,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1225,7 +1738,16 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.90.199.68": { @@ -1254,8 +1776,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1264,8 +1792,21 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } } } @@ -1286,7 +1827,13 @@ "CapGrant": [ { "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], - "CapMap": { "example.com/cap/test": [{ "v": 1 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + } + ] + } } ] }, @@ -1300,7 +1847,13 @@ "CapGrant": [ { "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], - "CapMap": { "example.com/cap/test": [{ "v": 2 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 2 + } + ] + } } ] } @@ -1328,8 +1881,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.8.15/32", "Cap": "example.com/cap/test", "Values": [{ "v": 1 }] }, - { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "example.com/cap/test", "Values": [{ "v": 1 }] } + { + "Dst": "100.103.8.15/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 1 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::5b37:80f/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 1 + } + ] + } ] }, { @@ -1354,8 +1923,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.8.15/32", "Cap": "example.com/cap/test", "Values": [{ "v": 2 }] }, - { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "example.com/cap/test", "Values": [{ "v": 2 }] } + { + "Dst": "100.103.8.15/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 2 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::5b37:80f/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 2 + } + ] + } ] } ], @@ -1385,8 +1970,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1396,8 +1987,21 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.92.142.61": { @@ -1425,8 +2029,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1437,8 +2047,21 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.83.200.69": { @@ -1466,8 +2089,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1477,8 +2106,21 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.108.74.26": { @@ -1506,8 +2148,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1517,8 +2165,21 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.110.121.96": { @@ -1547,8 +2208,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1557,8 +2224,21 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.103.90.82": { @@ -1587,8 +2267,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1602,7 +2288,16 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.90.199.68": { @@ -1631,8 +2326,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1641,8 +2342,21 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } } } @@ -1663,7 +2377,13 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{ "v": 1 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + } + ] + } } ] }, @@ -1677,7 +2397,13 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{ "v": 2 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 2 + } + ] + } } ] } @@ -1705,8 +2431,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{ "v": 1 }] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{ "v": 1 }] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 1 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 1 + } + ] + } ] }, { @@ -1731,8 +2473,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{ "v": 2 }] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{ "v": 2 }] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 2 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 2 + } + ] + } ] } ], @@ -1762,8 +2520,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1773,8 +2537,21 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.92.142.61": { @@ -1802,8 +2579,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1814,8 +2597,21 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.83.200.69": { @@ -1843,8 +2639,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1854,8 +2656,21 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.103.8.15": { @@ -1883,8 +2698,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1894,8 +2715,21 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.110.121.96": { @@ -1924,8 +2758,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1934,8 +2774,21 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.103.90.82": { @@ -1964,8 +2817,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1979,7 +2838,16 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.90.199.68": { @@ -2008,8 +2876,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2018,8 +2892,21 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } } } @@ -2040,7 +2927,13 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "example.com/cap/test": [{ "v": 1 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + } + ] + } } ] }, @@ -2054,7 +2947,13 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "example.com/cap/test": [{ "v": 2 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 2 + } + ] + } } ] } @@ -2082,8 +2981,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "example.com/cap/test", "Values": [{ "v": 1 }] }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "example.com/cap/test", "Values": [{ "v": 1 }] } + { + "Dst": "100.110.121.96/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 1 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 1 + } + ] + } ] }, { @@ -2108,8 +3023,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "example.com/cap/test", "Values": [{ "v": 2 }] }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "example.com/cap/test", "Values": [{ "v": 2 }] } + { + "Dst": "100.110.121.96/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 2 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 2 + } + ] + } ] } ], @@ -2139,8 +3070,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2150,8 +3087,21 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.92.142.61": { @@ -2179,8 +3129,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2191,8 +3147,21 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.83.200.69": { @@ -2220,8 +3189,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2231,8 +3206,21 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.103.8.15": { @@ -2260,8 +3248,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2271,8 +3265,21 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.108.74.26": { @@ -2300,8 +3307,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2311,8 +3324,21 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.103.90.82": { @@ -2341,8 +3367,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2356,7 +3388,16 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.90.199.68": { @@ -2385,8 +3426,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2395,8 +3442,21 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } } } @@ -2417,7 +3477,13 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "example.com/cap/test": [{ "v": 1 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + } + ] + } } ] }, @@ -2431,7 +3497,13 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "example.com/cap/test": [{ "v": 2 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 2 + } + ] + } } ] } @@ -2459,8 +3531,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "example.com/cap/test", "Values": [{ "v": 1 }] }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "example.com/cap/test", "Values": [{ "v": 1 }] } + { + "Dst": "100.103.90.82/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 1 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 1 + } + ] + } ] }, { @@ -2485,8 +3573,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "example.com/cap/test", "Values": [{ "v": 2 }] }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "example.com/cap/test", "Values": [{ "v": 2 }] } + { + "Dst": "100.103.90.82/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 2 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 2 + } + ] + } ] } ], @@ -2516,8 +3620,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2527,8 +3637,21 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.92.142.61": { @@ -2556,8 +3679,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2568,8 +3697,21 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.83.200.69": { @@ -2597,8 +3739,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2608,8 +3756,21 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.103.8.15": { @@ -2637,8 +3798,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2648,8 +3815,21 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.108.74.26": { @@ -2677,8 +3857,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2688,8 +3874,21 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.110.121.96": { @@ -2718,8 +3917,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2728,8 +3933,21 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.90.199.68": { @@ -2758,8 +3976,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2768,8 +3992,21 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } } } @@ -2790,7 +4027,13 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "example.com/cap/test": [{ "v": 1 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + } + ] + } } ] }, @@ -2804,7 +4047,13 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "example.com/cap/test": [{ "v": 2 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 2 + } + ] + } } ] } @@ -2832,8 +4081,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "example.com/cap/test", "Values": [{ "v": 1 }] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "example.com/cap/test", "Values": [{ "v": 1 }] } + { + "Dst": "100.90.199.68/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 1 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 1 + } + ] + } ] }, { @@ -2858,8 +4123,24 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "example.com/cap/test", "Values": [{ "v": 2 }] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "example.com/cap/test", "Values": [{ "v": 2 }] } + { + "Dst": "100.90.199.68/32", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 2 + } + ] + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "example.com/cap/test", + "Values": [ + { + "v": 2 + } + ] + } ] } ], @@ -2889,8 +4170,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2900,8 +4187,21 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.92.142.61": { @@ -2929,8 +4229,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2941,8 +4247,21 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.83.200.69": { @@ -2970,8 +4289,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2981,8 +4306,21 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.103.8.15": { @@ -3010,8 +4348,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -3021,8 +4365,21 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.108.74.26": { @@ -3050,8 +4407,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -3061,8 +4424,21 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.110.121.96": { @@ -3091,8 +4467,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -3101,8 +4483,21 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } }, "100.103.90.82": { @@ -3131,8 +4526,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -3146,7 +4547,16 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{ "v": 1 }, { "v": 2 }] } + "CapMap": { + "example.com/cap/test": [ + { + "v": 1 + }, + { + "v": 2 + } + ] + } } } } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K2.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K2.json index 9f796a0f..8e28b0d4 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K2.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K2.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["*"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["*"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -133,7 +141,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -158,8 +174,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -190,8 +218,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -202,7 +236,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -231,8 +269,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -242,7 +286,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -271,8 +319,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -282,7 +336,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -311,8 +369,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -322,7 +386,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -352,8 +420,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -362,7 +436,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -392,8 +470,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -436,8 +520,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -446,7 +536,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -465,7 +559,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -490,8 +592,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -522,8 +636,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -533,7 +653,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -562,8 +686,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -573,7 +703,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -602,8 +736,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -613,7 +753,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -642,8 +786,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -653,7 +803,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -683,8 +837,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -693,7 +853,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -723,8 +887,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -767,8 +937,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -777,7 +953,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -796,7 +976,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -821,8 +1009,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -853,8 +1053,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -864,7 +1070,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -893,8 +1103,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -905,7 +1121,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -934,8 +1154,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -945,7 +1171,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -974,8 +1204,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -985,7 +1221,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1015,8 +1255,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1025,7 +1271,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1055,8 +1305,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1099,8 +1355,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1109,7 +1371,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1128,7 +1394,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1153,8 +1427,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1185,8 +1471,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1196,7 +1488,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1225,8 +1521,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1237,7 +1539,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1266,8 +1572,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1277,7 +1589,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1306,8 +1622,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1317,7 +1639,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1347,8 +1673,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1357,7 +1689,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1387,8 +1723,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1431,8 +1773,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1441,7 +1789,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1460,7 +1812,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1485,8 +1845,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1517,8 +1889,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1528,7 +1906,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1557,8 +1939,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1569,7 +1957,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1598,8 +1990,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1609,7 +2007,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1638,8 +2040,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1649,7 +2057,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1679,8 +2091,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1689,7 +2107,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1719,8 +2141,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1763,8 +2191,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1773,7 +2207,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1792,7 +2230,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1817,8 +2263,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1849,8 +2307,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1860,7 +2324,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1889,8 +2357,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1901,7 +2375,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1930,8 +2408,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1941,7 +2425,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1970,8 +2458,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1981,7 +2475,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2010,8 +2508,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2021,7 +2525,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2051,8 +2559,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2095,8 +2609,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2105,7 +2625,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2124,7 +2648,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2149,8 +2681,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2181,8 +2725,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2192,7 +2742,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2221,8 +2775,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2233,7 +2793,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2262,8 +2826,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2273,7 +2843,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2302,8 +2876,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2313,7 +2893,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2342,8 +2926,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2353,7 +2943,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2383,8 +2977,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2393,7 +2993,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2423,8 +3027,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2433,7 +3043,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2452,7 +3066,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2477,8 +3099,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2509,8 +3143,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2520,7 +3160,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2549,8 +3193,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2561,7 +3211,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2590,8 +3244,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2601,7 +3261,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2630,8 +3294,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2641,7 +3311,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2670,8 +3344,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2681,7 +3361,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2711,8 +3395,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2721,7 +3411,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2751,8 +3445,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K20.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K20.json index e4f7562b..837415a1 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K20.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K20.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["user:*@passkey"], "dst": ["tag:server"], "ip": ["tcp:22"] }], + "grants_section": [ + { + "src": ["user:*@passkey"], + "dst": ["tag:server"], + "ip": ["tcp:22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -309,8 +317,20 @@ { "SrcIPs": ["100.103.90.82", "100.90.199.68", "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::9e37:5a52"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "IPProto": [6] } @@ -326,8 +346,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -384,8 +416,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -428,8 +466,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -438,7 +482,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -542,8 +590,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -553,7 +607,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -622,8 +680,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -633,7 +697,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K21.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K21.json index 78b1783a..03bd5192 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K21.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K21.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["user:*@passkey"], "ip": ["tcp:22"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["user:*@passkey"], + "ip": ["tcp:22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -179,8 +187,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -223,8 +237,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -233,7 +253,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -298,8 +322,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -342,8 +372,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -352,7 +388,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -417,8 +457,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -461,8 +507,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -471,7 +523,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -536,8 +592,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -580,8 +642,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -590,7 +658,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -655,8 +727,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -699,8 +777,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -709,7 +793,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -774,8 +862,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -818,8 +912,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -828,7 +928,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -848,8 +952,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.103.90.82", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::9e37:5a52", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.103.90.82", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::9e37:5a52", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "IPProto": [6] } @@ -876,8 +992,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.103.90.82/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::9e37:5a52/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.103.90.82/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::9e37:5a52/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -908,8 +1036,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -919,7 +1053,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -948,8 +1086,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -960,7 +1104,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -989,8 +1137,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1000,7 +1154,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1029,8 +1187,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1040,7 +1204,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1069,8 +1237,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1080,7 +1254,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1110,8 +1288,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1120,7 +1304,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1150,8 +1338,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1160,7 +1354,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1180,8 +1378,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.90.199.68", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.90.199.68", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "IPProto": [6] } @@ -1208,8 +1418,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.90.199.68/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -1240,8 +1462,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1251,7 +1479,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1280,8 +1512,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1292,7 +1530,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1321,8 +1563,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1332,7 +1580,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1361,8 +1613,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1372,7 +1630,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1401,8 +1663,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1412,7 +1680,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1442,8 +1714,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1452,7 +1730,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1482,8 +1764,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K22.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K22.json index 5b1c93c5..8b2968ea 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K22.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K22.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["tag:server"], "ip": ["47"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["tag:server"], + "ip": ["47"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -168,8 +176,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -179,7 +193,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -248,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -259,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -328,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -339,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -408,8 +446,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -419,7 +463,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -454,8 +502,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 47, "Last": 47 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 47, "Last": 47 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 47, + "Last": 47 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 47, + "Last": 47 + } + } ] } ], @@ -481,8 +541,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 47, "Last": 47 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 47, "Last": 47 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 47, + "Last": 47 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 47, + "Last": 47 + } + } ], "Caps": [] } @@ -513,8 +585,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -524,7 +602,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -553,8 +635,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -565,7 +653,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -594,8 +686,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -605,7 +703,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -634,8 +736,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -645,7 +753,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -675,8 +787,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -685,7 +803,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -715,8 +837,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -759,8 +887,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -769,7 +903,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -828,8 +966,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -839,7 +983,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -908,8 +1056,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -919,7 +1073,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -988,8 +1146,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -999,7 +1163,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K24.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K24.json index ba1c6b11..72f2838e 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K24.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K24.json @@ -40,7 +40,15 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["*"], "app": { "example.com/a/b/c/d/e/f": [{}] } }], + "grants_section": [ + { + "src": ["*"], + "dst": ["*"], + "app": { + "example.com/a/b/c/d/e/f": [{}] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -63,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -138,7 +148,9 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } ] } @@ -166,8 +178,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "example.com/a/b/c/d/e/f", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "example.com/a/b/c/d/e/f", "Values": [{}] } + { + "Dst": "100.85.66.106/32", + "Cap": "example.com/a/b/c/d/e/f", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "example.com/a/b/c/d/e/f", + "Values": [{}] + } ] } ], @@ -197,8 +217,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -209,8 +235,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.83.200.69": { @@ -238,8 +270,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -249,8 +287,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.103.8.15": { @@ -278,8 +322,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -289,8 +339,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.108.74.26": { @@ -318,8 +374,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -329,8 +391,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.110.121.96": { @@ -359,8 +427,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -369,8 +443,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.103.90.82": { @@ -399,8 +479,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -414,7 +500,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.90.199.68": { @@ -443,8 +531,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -453,8 +547,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } } } @@ -475,7 +575,9 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } ] } @@ -503,8 +605,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "example.com/a/b/c/d/e/f", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "example.com/a/b/c/d/e/f", "Values": [{}] } + { + "Dst": "100.92.142.61/32", + "Cap": "example.com/a/b/c/d/e/f", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "example.com/a/b/c/d/e/f", + "Values": [{}] + } ] } ], @@ -534,8 +644,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -545,8 +661,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.83.200.69": { @@ -574,8 +696,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -585,8 +713,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.103.8.15": { @@ -614,8 +748,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -625,8 +765,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.108.74.26": { @@ -654,8 +800,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -665,8 +817,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.110.121.96": { @@ -695,8 +853,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -705,8 +869,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.103.90.82": { @@ -735,8 +905,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -750,7 +926,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.90.199.68": { @@ -779,8 +957,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -789,8 +973,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } } } @@ -811,7 +1001,9 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } ] } @@ -839,8 +1031,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "example.com/a/b/c/d/e/f", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "example.com/a/b/c/d/e/f", "Values": [{}] } + { + "Dst": "100.83.200.69/32", + "Cap": "example.com/a/b/c/d/e/f", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "example.com/a/b/c/d/e/f", + "Values": [{}] + } ] } ], @@ -870,8 +1070,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -881,8 +1087,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.92.142.61": { @@ -910,8 +1122,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -922,8 +1140,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.103.8.15": { @@ -951,8 +1175,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -962,8 +1192,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.108.74.26": { @@ -991,8 +1227,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1002,8 +1244,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.110.121.96": { @@ -1032,8 +1280,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1042,8 +1296,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.103.90.82": { @@ -1072,8 +1332,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1087,7 +1353,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.90.199.68": { @@ -1116,8 +1384,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1126,8 +1400,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } } } @@ -1148,7 +1428,9 @@ "CapGrant": [ { "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } ] } @@ -1176,8 +1458,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.8.15/32", "Cap": "example.com/a/b/c/d/e/f", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "example.com/a/b/c/d/e/f", "Values": [{}] } + { + "Dst": "100.103.8.15/32", + "Cap": "example.com/a/b/c/d/e/f", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::5b37:80f/128", + "Cap": "example.com/a/b/c/d/e/f", + "Values": [{}] + } ] } ], @@ -1207,8 +1497,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1218,8 +1514,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.92.142.61": { @@ -1247,8 +1549,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1259,8 +1567,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.83.200.69": { @@ -1288,8 +1602,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1299,8 +1619,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.108.74.26": { @@ -1328,8 +1654,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1339,8 +1671,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.110.121.96": { @@ -1369,8 +1707,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1379,8 +1723,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.103.90.82": { @@ -1409,8 +1759,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1424,7 +1780,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.90.199.68": { @@ -1453,8 +1811,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1463,8 +1827,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } } } @@ -1485,7 +1855,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } ] } @@ -1513,8 +1885,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/a/b/c/d/e/f", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/a/b/c/d/e/f", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/a/b/c/d/e/f", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/a/b/c/d/e/f", + "Values": [{}] + } ] } ], @@ -1544,8 +1924,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1555,8 +1941,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.92.142.61": { @@ -1584,8 +1976,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1596,8 +1994,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.83.200.69": { @@ -1625,8 +2029,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1636,8 +2046,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.103.8.15": { @@ -1665,8 +2081,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1676,8 +2098,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.110.121.96": { @@ -1706,8 +2134,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1716,8 +2150,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.103.90.82": { @@ -1746,8 +2186,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1761,7 +2207,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.90.199.68": { @@ -1790,8 +2238,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1800,8 +2254,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } } } @@ -1822,7 +2282,9 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } ] } @@ -1850,8 +2312,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "example.com/a/b/c/d/e/f", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "example.com/a/b/c/d/e/f", "Values": [{}] } + { + "Dst": "100.110.121.96/32", + "Cap": "example.com/a/b/c/d/e/f", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "example.com/a/b/c/d/e/f", + "Values": [{}] + } ] } ], @@ -1881,8 +2351,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1892,8 +2368,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.92.142.61": { @@ -1921,8 +2403,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1933,8 +2421,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.83.200.69": { @@ -1962,8 +2456,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1973,8 +2473,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.103.8.15": { @@ -2002,8 +2508,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2013,8 +2525,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.108.74.26": { @@ -2042,8 +2560,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2053,8 +2577,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.103.90.82": { @@ -2083,8 +2613,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2098,7 +2634,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.90.199.68": { @@ -2127,8 +2665,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2137,8 +2681,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } } } @@ -2159,7 +2709,9 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } ] } @@ -2187,8 +2739,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "example.com/a/b/c/d/e/f", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "example.com/a/b/c/d/e/f", "Values": [{}] } + { + "Dst": "100.103.90.82/32", + "Cap": "example.com/a/b/c/d/e/f", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "example.com/a/b/c/d/e/f", + "Values": [{}] + } ] } ], @@ -2218,8 +2778,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2229,8 +2795,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.92.142.61": { @@ -2258,8 +2830,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2270,8 +2848,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.83.200.69": { @@ -2299,8 +2883,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2310,8 +2900,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.103.8.15": { @@ -2339,8 +2935,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2350,8 +2952,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.108.74.26": { @@ -2379,8 +2987,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2390,8 +3004,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.110.121.96": { @@ -2420,8 +3040,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2430,8 +3056,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.90.199.68": { @@ -2460,8 +3092,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2470,8 +3108,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } } } @@ -2492,7 +3136,9 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } ] } @@ -2520,8 +3166,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "example.com/a/b/c/d/e/f", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "example.com/a/b/c/d/e/f", "Values": [{}] } + { + "Dst": "100.90.199.68/32", + "Cap": "example.com/a/b/c/d/e/f", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "example.com/a/b/c/d/e/f", + "Values": [{}] + } ] } ], @@ -2551,8 +3205,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2562,8 +3222,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.92.142.61": { @@ -2591,8 +3257,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2603,8 +3275,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.83.200.69": { @@ -2632,8 +3310,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2643,8 +3327,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.103.8.15": { @@ -2672,8 +3362,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2683,8 +3379,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.108.74.26": { @@ -2712,8 +3414,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2723,8 +3431,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.110.121.96": { @@ -2753,8 +3467,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2763,8 +3483,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } }, "100.103.90.82": { @@ -2793,8 +3519,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2808,7 +3540,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/a/b/c/d/e/f": [{}] } + "CapMap": { + "example.com/a/b/c/d/e/f": [{}] + } } } } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K25.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K25.json index 7067a0ea..2530cebd 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K25.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K25.json @@ -40,7 +40,15 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["*"], "app": { "my-company.internal/cap/access": [{}] } }], + "grants_section": [ + { + "src": ["*"], + "dst": ["*"], + "app": { + "my-company.internal/cap/access": [{}] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -63,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -138,7 +148,9 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "my-company.internal/cap/access": [{}] } + "CapMap": { + "my-company.internal/cap/access": [{}] + } } ] } @@ -166,8 +178,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "my-company.internal/cap/access", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "my-company.internal/cap/access", "Values": [{}] } + { + "Dst": "100.85.66.106/32", + "Cap": "my-company.internal/cap/access", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::7c37:426a/128", + "Cap": "my-company.internal/cap/access", + "Values": [{}] + } ] } ], @@ -197,8 +217,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -209,8 +235,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.83.200.69": { @@ -238,8 +270,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -249,8 +287,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.103.8.15": { @@ -278,8 +322,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -289,8 +339,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.108.74.26": { @@ -318,8 +374,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -329,8 +391,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.110.121.96": { @@ -359,8 +427,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -369,8 +443,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.103.90.82": { @@ -399,8 +479,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -414,7 +500,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.90.199.68": { @@ -443,8 +531,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -453,8 +547,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } } } @@ -475,7 +575,9 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "my-company.internal/cap/access": [{}] } + "CapMap": { + "my-company.internal/cap/access": [{}] + } } ] } @@ -503,8 +605,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "my-company.internal/cap/access", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "my-company.internal/cap/access", "Values": [{}] } + { + "Dst": "100.92.142.61/32", + "Cap": "my-company.internal/cap/access", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", + "Cap": "my-company.internal/cap/access", + "Values": [{}] + } ] } ], @@ -534,8 +644,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -545,8 +661,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.83.200.69": { @@ -574,8 +696,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -585,8 +713,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.103.8.15": { @@ -614,8 +748,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -625,8 +765,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.108.74.26": { @@ -654,8 +800,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -665,8 +817,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.110.121.96": { @@ -695,8 +853,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -705,8 +869,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.103.90.82": { @@ -735,8 +905,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -750,7 +926,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.90.199.68": { @@ -779,8 +957,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -789,8 +973,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } } } @@ -811,7 +1001,9 @@ "CapGrant": [ { "Dsts": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], - "CapMap": { "my-company.internal/cap/access": [{}] } + "CapMap": { + "my-company.internal/cap/access": [{}] + } } ] } @@ -839,8 +1031,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.83.200.69/32", "Cap": "my-company.internal/cap/access", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::c537:c845/128", "Cap": "my-company.internal/cap/access", "Values": [{}] } + { + "Dst": "100.83.200.69/32", + "Cap": "my-company.internal/cap/access", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::c537:c845/128", + "Cap": "my-company.internal/cap/access", + "Values": [{}] + } ] } ], @@ -870,8 +1070,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -881,8 +1087,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.92.142.61": { @@ -910,8 +1122,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -922,8 +1140,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.103.8.15": { @@ -951,8 +1175,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -962,8 +1192,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.108.74.26": { @@ -991,8 +1227,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1002,8 +1244,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.110.121.96": { @@ -1032,8 +1280,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1042,8 +1296,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.103.90.82": { @@ -1072,8 +1332,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1087,7 +1353,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.90.199.68": { @@ -1116,8 +1384,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1126,8 +1400,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } } } @@ -1148,7 +1428,9 @@ "CapGrant": [ { "Dsts": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], - "CapMap": { "my-company.internal/cap/access": [{}] } + "CapMap": { + "my-company.internal/cap/access": [{}] + } } ] } @@ -1176,8 +1458,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.8.15/32", "Cap": "my-company.internal/cap/access", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::5b37:80f/128", "Cap": "my-company.internal/cap/access", "Values": [{}] } + { + "Dst": "100.103.8.15/32", + "Cap": "my-company.internal/cap/access", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::5b37:80f/128", + "Cap": "my-company.internal/cap/access", + "Values": [{}] + } ] } ], @@ -1207,8 +1497,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1218,8 +1514,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.92.142.61": { @@ -1247,8 +1549,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1259,8 +1567,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.83.200.69": { @@ -1288,8 +1602,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1299,8 +1619,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.108.74.26": { @@ -1328,8 +1654,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1339,8 +1671,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.110.121.96": { @@ -1369,8 +1707,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1379,8 +1723,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.103.90.82": { @@ -1409,8 +1759,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1424,7 +1780,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.90.199.68": { @@ -1453,8 +1811,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1463,8 +1827,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } } } @@ -1485,7 +1855,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "my-company.internal/cap/access": [{}] } + "CapMap": { + "my-company.internal/cap/access": [{}] + } } ] } @@ -1513,8 +1885,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "my-company.internal/cap/access", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "my-company.internal/cap/access", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "my-company.internal/cap/access", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "my-company.internal/cap/access", + "Values": [{}] + } ] } ], @@ -1544,8 +1924,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1555,8 +1941,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.92.142.61": { @@ -1584,8 +1976,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1596,8 +1994,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.83.200.69": { @@ -1625,8 +2029,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1636,8 +2046,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.103.8.15": { @@ -1665,8 +2081,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1676,8 +2098,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.110.121.96": { @@ -1706,8 +2134,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1716,8 +2150,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.103.90.82": { @@ -1746,8 +2186,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1761,7 +2207,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.90.199.68": { @@ -1790,8 +2238,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1800,8 +2254,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } } } @@ -1822,7 +2282,9 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "my-company.internal/cap/access": [{}] } + "CapMap": { + "my-company.internal/cap/access": [{}] + } } ] } @@ -1850,8 +2312,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "my-company.internal/cap/access", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "my-company.internal/cap/access", "Values": [{}] } + { + "Dst": "100.110.121.96/32", + "Cap": "my-company.internal/cap/access", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "my-company.internal/cap/access", + "Values": [{}] + } ] } ], @@ -1881,8 +2351,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1892,8 +2368,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.92.142.61": { @@ -1921,8 +2403,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1933,8 +2421,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.83.200.69": { @@ -1962,8 +2456,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1973,8 +2473,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.103.8.15": { @@ -2002,8 +2508,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2013,8 +2525,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.108.74.26": { @@ -2042,8 +2560,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2053,8 +2577,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.103.90.82": { @@ -2083,8 +2613,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2098,7 +2634,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.90.199.68": { @@ -2127,8 +2665,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2137,8 +2681,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } } } @@ -2159,7 +2709,9 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "my-company.internal/cap/access": [{}] } + "CapMap": { + "my-company.internal/cap/access": [{}] + } } ] } @@ -2187,8 +2739,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "my-company.internal/cap/access", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "my-company.internal/cap/access", "Values": [{}] } + { + "Dst": "100.103.90.82/32", + "Cap": "my-company.internal/cap/access", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "my-company.internal/cap/access", + "Values": [{}] + } ] } ], @@ -2218,8 +2778,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2229,8 +2795,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.92.142.61": { @@ -2258,8 +2830,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2270,8 +2848,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.83.200.69": { @@ -2299,8 +2883,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2310,8 +2900,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.103.8.15": { @@ -2339,8 +2935,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2350,8 +2952,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.108.74.26": { @@ -2379,8 +2987,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2390,8 +3004,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.110.121.96": { @@ -2420,8 +3040,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2430,8 +3056,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.90.199.68": { @@ -2460,8 +3092,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2470,8 +3108,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } } } @@ -2492,7 +3136,9 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "my-company.internal/cap/access": [{}] } + "CapMap": { + "my-company.internal/cap/access": [{}] + } } ] } @@ -2520,8 +3166,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "my-company.internal/cap/access", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "my-company.internal/cap/access", "Values": [{}] } + { + "Dst": "100.90.199.68/32", + "Cap": "my-company.internal/cap/access", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "my-company.internal/cap/access", + "Values": [{}] + } ] } ], @@ -2551,8 +3205,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2562,8 +3222,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.92.142.61": { @@ -2591,8 +3257,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2603,8 +3275,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.83.200.69": { @@ -2632,8 +3310,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2643,8 +3327,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.103.8.15": { @@ -2672,8 +3362,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2683,8 +3379,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.108.74.26": { @@ -2712,8 +3414,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2723,8 +3431,14 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.110.121.96": { @@ -2753,8 +3467,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2763,8 +3483,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "my-company.internal/cap/access": [{}] + } } }, "100.103.90.82": { @@ -2793,8 +3519,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2808,7 +3540,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "my-company.internal/cap/access": [{}] } + "CapMap": { + "my-company.internal/cap/access": [{}] + } } } } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K26.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K26.json index 848b14f7..921eeeb4 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K26.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K26.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["autogroup:member"], "dst": ["autogroup:member", "autogroup:tagged"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["autogroup:member"], + "dst": ["autogroup:member", "autogroup:tagged"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -136,8 +144,20 @@ "fd7a:115c:a1e0::9e37:5a52" ], "DstPorts": [ - { "IP": "100.85.66.106", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::7c37:426a", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.85.66.106", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::7c37:426a", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -154,8 +174,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.85.66.106/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::7c37:426a/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.85.66.106/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::7c37:426a/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -207,8 +239,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -217,7 +255,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -247,8 +289,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -291,8 +339,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -301,7 +355,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -323,8 +381,20 @@ "fd7a:115c:a1e0::9e37:5a52" ], "DstPorts": [ - { "IP": "100.92.142.61", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::3e37:8e3d", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.92.142.61", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::3e37:8e3d", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -341,8 +411,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.92.142.61/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::3e37:8e3d/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.92.142.61/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::3e37:8e3d/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -394,8 +476,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -404,7 +492,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -434,8 +526,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -478,8 +576,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -488,7 +592,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -510,8 +618,20 @@ "fd7a:115c:a1e0::9e37:5a52" ], "DstPorts": [ - { "IP": "100.83.200.69", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::c537:c845", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.83.200.69", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::c537:c845", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -528,8 +648,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.83.200.69/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::c537:c845/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.83.200.69/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::c537:c845/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -581,8 +713,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -591,7 +729,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -621,8 +763,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -665,8 +813,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -675,7 +829,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -697,8 +855,20 @@ "fd7a:115c:a1e0::9e37:5a52" ], "DstPorts": [ - { "IP": "100.103.8.15", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.103.8.15", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -715,8 +885,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.103.8.15/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -768,8 +950,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -778,7 +966,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -808,8 +1000,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -852,8 +1050,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -862,7 +1066,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -884,8 +1092,20 @@ "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 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -902,8 +1122,20 @@ ], "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 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -955,8 +1187,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -965,7 +1203,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -995,8 +1237,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1039,8 +1287,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1049,7 +1303,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1071,8 +1329,20 @@ "fd7a:115c:a1e0::9e37:5a52" ], "DstPorts": [ - { "IP": "100.110.121.96", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::1737:7960", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.110.121.96", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::1737:7960", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -1089,8 +1359,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.110.121.96/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::1737:7960/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.110.121.96/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::1737:7960/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1121,8 +1403,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1132,7 +1420,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1161,8 +1453,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1172,7 +1470,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1201,8 +1503,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1212,7 +1520,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1241,8 +1553,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1252,7 +1570,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1281,8 +1603,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1292,7 +1620,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1322,8 +1654,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1366,8 +1704,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1376,7 +1720,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1398,8 +1746,20 @@ "fd7a:115c:a1e0::9e37:5a52" ], "DstPorts": [ - { "IP": "100.103.90.82", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::9e37:5a52", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.103.90.82", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::9e37:5a52", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -1416,8 +1776,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.103.90.82/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::9e37:5a52/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.103.90.82/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::9e37:5a52/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1448,8 +1820,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1459,7 +1837,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1488,8 +1870,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1499,7 +1887,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1528,8 +1920,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1539,7 +1937,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1568,8 +1970,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1579,7 +1987,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1608,8 +2020,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1619,7 +2037,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1649,8 +2071,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1659,7 +2087,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1689,8 +2121,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1699,7 +2137,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1721,8 +2163,20 @@ "fd7a:115c:a1e0::9e37:5a52" ], "DstPorts": [ - { "IP": "100.90.199.68", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.90.199.68", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -1739,8 +2193,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.90.199.68/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1771,8 +2237,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1782,7 +2254,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1811,8 +2287,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1822,7 +2304,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1851,8 +2337,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1862,7 +2354,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1891,8 +2387,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1902,7 +2404,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1931,8 +2437,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1942,7 +2454,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1972,8 +2488,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1982,7 +2504,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2012,8 +2538,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K27.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K27.json index 2b6b25c5..ba91ee96 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K27.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K27.json @@ -41,7 +41,13 @@ ] }, "grants_section": [ - { "src": ["autogroup:member"], "dst": ["autogroup:self"], "app": { "example.com/cap/self-service": [{}] } } + { + "src": ["autogroup:member"], + "dst": ["autogroup:self"], + "app": { + "example.com/cap/self-service": [{}] + } + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -65,7 +71,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -360,7 +368,9 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "example.com/cap/self-service": [{}] } + "CapMap": { + "example.com/cap/self-service": [{}] + } } ] } @@ -372,8 +382,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "example.com/cap/self-service", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "example.com/cap/self-service", "Values": [{}] } + { + "Dst": "100.110.121.96/32", + "Cap": "example.com/cap/self-service", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "example.com/cap/self-service", + "Values": [{}] + } ] } ], @@ -426,7 +444,9 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "example.com/cap/self-service": [{}] } + "CapMap": { + "example.com/cap/self-service": [{}] + } } ] } @@ -438,8 +458,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "example.com/cap/self-service", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "example.com/cap/self-service", "Values": [{}] } + { + "Dst": "100.103.90.82/32", + "Cap": "example.com/cap/self-service", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "example.com/cap/self-service", + "Values": [{}] + } ] } ], @@ -492,7 +520,9 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "example.com/cap/self-service": [{}] } + "CapMap": { + "example.com/cap/self-service": [{}] + } } ] } @@ -504,8 +534,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "example.com/cap/self-service", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "example.com/cap/self-service", "Values": [{}] } + { + "Dst": "100.90.199.68/32", + "Cap": "example.com/cap/self-service", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "example.com/cap/self-service", + "Values": [{}] + } ] } ], diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K28.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K28.json index 8cbfe2a6..d7f14dc9 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K28.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K28.json @@ -51,7 +51,14 @@ "src": ["autogroup:member"], "dst": ["autogroup:self"], "ip": ["*"], - "app": { "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] } + "app": { + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] + } } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", @@ -76,7 +83,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -369,16 +378,19 @@ { "SrcIPs": ["100.110.121.96", "fd7a:115c:a1e0::1737:7960"], "DstPorts": [ - { "IP": "100.110.121.96", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::1737:7960", "Ports": { "First": 0, "Last": 65535 } } - ] - }, - { - "SrcIPs": ["100.110.121.96", "fd7a:115c:a1e0::1737:7960"], - "CapGrant": [ { - "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] } + "IP": "100.110.121.96", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::1737:7960", + "Ports": { + "First": 0, + "Last": 65535 + } } ] }, @@ -387,7 +399,25 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] + } + } + ] + }, + { + "SrcIPs": ["100.110.121.96", "fd7a:115c:a1e0::1737:7960"], + "CapGrant": [ + { + "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -398,8 +428,20 @@ "Srcs": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.110.121.96/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::1737:7960/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.110.121.96/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::1737:7960/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -412,12 +454,22 @@ { "Dst": "100.110.121.96/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] } ] }, @@ -427,8 +479,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.110.121.96/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -479,16 +539,19 @@ { "SrcIPs": ["100.103.90.82", "fd7a:115c:a1e0::9e37:5a52"], "DstPorts": [ - { "IP": "100.103.90.82", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::9e37:5a52", "Ports": { "First": 0, "Last": 65535 } } - ] - }, - { - "SrcIPs": ["100.103.90.82", "fd7a:115c:a1e0::9e37:5a52"], - "CapGrant": [ { - "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] } + "IP": "100.103.90.82", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::9e37:5a52", + "Ports": { + "First": 0, + "Last": 65535 + } } ] }, @@ -497,7 +560,25 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] + } + } + ] + }, + { + "SrcIPs": ["100.103.90.82", "fd7a:115c:a1e0::9e37:5a52"], + "CapGrant": [ + { + "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -508,8 +589,20 @@ "Srcs": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.103.90.82/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::9e37:5a52/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.103.90.82/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::9e37:5a52/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -522,12 +615,22 @@ { "Dst": "100.103.90.82/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] } ] }, @@ -537,8 +640,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.103.90.82/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -589,16 +700,19 @@ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], "DstPorts": [ - { "IP": "100.90.199.68", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 0, "Last": 65535 } } - ] - }, - { - "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "CapGrant": [ { - "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] } + "IP": "100.90.199.68", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 0, + "Last": 65535 + } } ] }, @@ -607,7 +721,25 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] + } + } + ] + }, + { + "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], + "CapGrant": [ + { + "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -618,8 +750,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.90.199.68/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -632,12 +776,22 @@ { "Dst": "100.90.199.68/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] } ] }, @@ -647,8 +801,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.90.199.68/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K29.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K29.json index 4f06aabd..5528eef1 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K29.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K29.json @@ -55,7 +55,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K3.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K3.json index 1329b0f1..2cd9350d 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K3.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K3.json @@ -47,7 +47,15 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["tag:server"], "app": { "example.com/cap/test": [{}] } }], + "grants_section": [ + { + "src": ["*"], + "dst": ["tag:server"], + "app": { + "example.com/cap/test": [{}] + } + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -70,7 +78,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -142,7 +152,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -167,8 +185,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -199,8 +229,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -211,7 +247,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -240,8 +280,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -251,7 +297,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -280,8 +330,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -291,7 +347,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -320,8 +380,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -331,7 +397,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -361,8 +431,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -371,7 +447,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -401,8 +481,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -445,8 +531,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -455,7 +547,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -474,7 +570,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -499,8 +603,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -531,8 +647,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -542,7 +664,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -571,8 +697,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -582,7 +714,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -611,8 +747,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -622,7 +764,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -651,8 +797,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -662,7 +814,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -692,8 +848,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -702,7 +864,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -732,8 +898,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -776,8 +948,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -786,7 +964,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -805,7 +987,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -830,8 +1020,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -862,8 +1064,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -873,7 +1081,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -902,8 +1114,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -914,7 +1132,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -943,8 +1165,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -954,7 +1182,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -983,8 +1215,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -994,7 +1232,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1024,8 +1266,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1034,7 +1282,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1064,8 +1316,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1108,8 +1366,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1118,7 +1382,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1137,7 +1405,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1162,8 +1438,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1194,8 +1482,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1205,7 +1499,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1234,8 +1532,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1246,7 +1550,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1275,8 +1583,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1286,7 +1600,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1315,8 +1633,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1326,7 +1650,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1356,8 +1684,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1366,7 +1700,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1396,8 +1734,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1440,8 +1784,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1450,7 +1800,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1472,7 +1826,9 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } ] }, @@ -1483,7 +1839,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1509,8 +1873,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/test", "Values": [{}] }, - { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/test", "Values": [{}] } + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/test", + "Values": [{}] + }, + { + "Dst": "fd7a:115c:a1e0::b901:4a87/128", + "Cap": "example.com/cap/test", + "Values": [{}] + } ] }, { @@ -1534,8 +1906,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1566,8 +1950,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1577,8 +1967,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.92.142.61": { @@ -1606,8 +2002,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1618,8 +2020,14 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.83.200.69": { @@ -1647,8 +2055,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1658,8 +2072,14 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.8.15": { @@ -1687,8 +2107,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1698,8 +2124,14 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.110.121.96": { @@ -1728,8 +2160,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1738,8 +2176,14 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.103.90.82": { @@ -1768,8 +2212,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1783,7 +2233,9 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/test": [{}] } + "CapMap": { + "example.com/cap/test": [{}] + } } }, "100.90.199.68": { @@ -1812,8 +2264,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1822,8 +2280,14 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/test": [{}] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/test": [{}] + } } } } @@ -1841,7 +2305,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1866,8 +2338,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1898,8 +2382,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1909,7 +2399,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1938,8 +2432,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1950,7 +2450,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1979,8 +2483,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1990,7 +2500,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2019,8 +2533,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2030,7 +2550,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2059,8 +2583,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2070,7 +2600,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2100,8 +2634,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2144,8 +2684,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2154,7 +2700,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2173,7 +2723,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2198,8 +2756,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2230,8 +2800,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2241,7 +2817,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2270,8 +2850,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2282,7 +2868,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2311,8 +2901,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2322,7 +2918,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2351,8 +2951,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2362,7 +2968,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2391,8 +3001,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2402,7 +3018,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2432,8 +3052,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2442,7 +3068,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2472,8 +3102,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2482,7 +3118,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2501,7 +3141,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2526,8 +3174,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2558,8 +3218,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2569,7 +3235,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2598,8 +3268,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2610,7 +3286,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2639,8 +3319,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2650,7 +3336,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2679,8 +3369,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2690,7 +3386,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2719,8 +3419,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2730,7 +3436,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2760,8 +3470,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2770,7 +3486,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2800,8 +3520,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K4.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K4.json index 67c8d578..d8652e4e 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K4.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K4.json @@ -45,7 +45,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["tag:server"], "ip": ["tcp:80", "tcp:443"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["tag:server"], + "ip": ["tcp:80", "tcp:443"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -68,7 +74,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -175,8 +183,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -186,7 +200,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -255,8 +273,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -266,7 +290,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -335,8 +363,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -346,7 +380,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -415,8 +453,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -426,7 +470,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -461,18 +509,54 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.108.74.26", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 443, "Last": 443 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "IPProto": [6] }, { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -498,10 +582,34 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] }, @@ -510,8 +618,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -542,8 +662,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -553,7 +679,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -582,8 +712,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -594,7 +730,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -623,8 +763,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -634,7 +780,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -663,8 +813,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -674,7 +830,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -704,8 +864,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -714,7 +880,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -744,8 +914,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -788,8 +964,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -798,7 +980,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -857,8 +1043,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -868,7 +1060,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -937,8 +1133,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -948,7 +1150,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1017,8 +1223,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1028,7 +1240,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K5.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K5.json index 2a864c2a..91412c77 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K5.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K5.json @@ -63,9 +63,22 @@ { "src": ["autogroup:member"], "dst": ["tag:server"], - "app": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "app": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } }, - { "src": ["*"], "dst": ["10.33.0.0/16"], "via": ["tag:router"], "ip": ["*"] } + { + "src": ["*"], + "dst": ["10.33.0.0/16"], + "via": ["tag:router"], + "ip": ["*"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -89,7 +102,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -181,8 +196,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -193,7 +214,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -242,7 +267,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "10.33.0.0/16", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "10.33.0.0/16", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -266,7 +299,15 @@ "fd7a:115c:a1e0::/48" ], "SrcCaps": null, - "Dsts": [{ "Net": "10.33.0.0/16", "Ports": { "First": 0, "Last": 65535 } }], + "Dsts": [ + { + "Net": "10.33.0.0/16", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ], "Caps": [] } ], @@ -296,8 +337,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -307,7 +354,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -336,8 +387,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -347,7 +404,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -376,8 +437,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -387,7 +454,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -416,8 +487,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -427,7 +504,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -457,8 +538,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -467,7 +554,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -497,8 +588,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -541,8 +638,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -551,7 +654,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -595,8 +702,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -607,7 +720,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -641,8 +758,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -652,7 +775,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -711,8 +838,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -723,7 +856,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -772,15 +909,35 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } ] }, { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -801,12 +958,24 @@ { "Dst": "100.108.74.26/32", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] }, { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] } ] }, @@ -815,8 +984,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -852,8 +1033,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -864,7 +1051,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -893,8 +1084,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -904,7 +1101,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -939,8 +1140,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -949,8 +1156,20 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } }, "100.103.90.82": { @@ -979,8 +1198,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -994,7 +1219,15 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } }, "100.90.199.68": { @@ -1023,8 +1256,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1033,8 +1272,20 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } } } @@ -1077,8 +1328,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1089,7 +1346,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1128,8 +1389,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1139,7 +1406,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1193,8 +1464,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1205,7 +1482,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1244,8 +1525,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1255,7 +1542,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1309,8 +1600,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1321,7 +1618,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1360,8 +1661,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1371,7 +1678,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-K6.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-K6.json index e013dd38..e19ffc06 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-K6.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-K6.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["autogroup:danger-all"], "dst": ["tag:server"], "ip": ["tcp:22"] }], + "grants_section": [ + { + "src": ["autogroup:danger-all"], + "dst": ["tag:server"], + "ip": ["tcp:22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -168,8 +176,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -179,7 +193,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -248,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -259,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -328,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -339,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -408,8 +446,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -419,7 +463,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -449,8 +497,20 @@ { "SrcIPs": ["*"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "IPProto": [6] } @@ -461,8 +521,20 @@ "Srcs": ["0.0.0.0/0", "::/0"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -493,8 +565,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -504,7 +582,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -533,8 +615,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -545,7 +633,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -574,8 +666,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -585,7 +683,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -614,8 +716,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -625,7 +733,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -655,8 +767,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -665,7 +783,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -695,8 +817,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -739,8 +867,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -749,7 +883,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -808,8 +946,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -819,7 +963,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -888,8 +1036,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -899,7 +1053,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -968,8 +1126,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -979,7 +1143,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P01_1.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P01_1.json index fa0ff2f0..7dee1d31 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P01_1.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P01_1.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["*"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["*"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -133,7 +141,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -158,8 +174,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -190,8 +218,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -202,7 +236,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -231,8 +269,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -242,7 +286,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -271,8 +319,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -282,7 +336,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -311,8 +369,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -322,7 +386,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -352,8 +420,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -362,7 +436,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -392,8 +470,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -436,8 +520,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -446,7 +536,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -465,7 +559,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -490,8 +592,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -522,8 +636,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -533,7 +653,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -562,8 +686,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -573,7 +703,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -602,8 +736,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -613,7 +753,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -642,8 +786,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -653,7 +803,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -683,8 +837,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -693,7 +853,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -723,8 +887,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -767,8 +937,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -777,7 +953,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -796,7 +976,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -821,8 +1009,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -853,8 +1053,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -864,7 +1070,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -893,8 +1103,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -905,7 +1121,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -934,8 +1154,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -945,7 +1171,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -974,8 +1204,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -985,7 +1221,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1015,8 +1255,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1025,7 +1271,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1055,8 +1305,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1099,8 +1355,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1109,7 +1371,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1128,7 +1394,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1153,8 +1427,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1185,8 +1471,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1196,7 +1488,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1225,8 +1521,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1237,7 +1539,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1266,8 +1572,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1277,7 +1589,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1306,8 +1622,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1317,7 +1639,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1347,8 +1673,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1357,7 +1689,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1387,8 +1723,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1431,8 +1773,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1441,7 +1789,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1460,7 +1812,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1485,8 +1845,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1517,8 +1889,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1528,7 +1906,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1557,8 +1939,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1569,7 +1957,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1598,8 +1990,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1609,7 +2007,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1638,8 +2040,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1649,7 +2057,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1679,8 +2091,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1689,7 +2107,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1719,8 +2141,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1763,8 +2191,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1773,7 +2207,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1792,7 +2230,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1817,8 +2263,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1849,8 +2307,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1860,7 +2324,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1889,8 +2357,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1901,7 +2375,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1930,8 +2408,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1941,7 +2425,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1970,8 +2458,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1981,7 +2475,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2010,8 +2508,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2021,7 +2525,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2051,8 +2559,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2095,8 +2609,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2105,7 +2625,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2124,7 +2648,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2149,8 +2681,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2181,8 +2725,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2192,7 +2742,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2221,8 +2775,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2233,7 +2793,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2262,8 +2826,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2273,7 +2843,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2302,8 +2876,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2313,7 +2893,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2342,8 +2926,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2353,7 +2943,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2383,8 +2977,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2393,7 +2993,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2423,8 +3027,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2433,7 +3043,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2452,7 +3066,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2477,8 +3099,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2509,8 +3143,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2520,7 +3160,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2549,8 +3193,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2561,7 +3211,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2590,8 +3244,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2601,7 +3261,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2630,8 +3294,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2641,7 +3311,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2670,8 +3344,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2681,7 +3361,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2711,8 +3395,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2721,7 +3411,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2751,8 +3445,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P01_2.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P01_2.json index 593dd4b2..d4bc423b 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P01_2.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P01_2.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["100.90.199.68"], "dst": ["*"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["100.90.199.68"], + "dst": ["*"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -126,7 +134,18 @@ "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": [ - { "SrcIPs": ["100.90.199.68"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.90.199.68"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -134,8 +153,20 @@ "Srcs": ["100.90.199.68/32"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -197,8 +228,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -207,7 +244,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -219,7 +260,18 @@ "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": [ - { "SrcIPs": ["100.90.199.68"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.90.199.68"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -227,8 +279,20 @@ "Srcs": ["100.90.199.68/32"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -290,8 +354,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -300,7 +370,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -312,7 +386,18 @@ "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": [ - { "SrcIPs": ["100.90.199.68"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.90.199.68"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -320,8 +405,20 @@ "Srcs": ["100.90.199.68/32"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -383,8 +480,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -393,7 +496,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -405,7 +512,18 @@ "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": [ - { "SrcIPs": ["100.90.199.68"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.90.199.68"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -413,8 +531,20 @@ "Srcs": ["100.90.199.68/32"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -476,8 +606,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -486,7 +622,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -498,7 +638,18 @@ "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.90.199.68"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.90.199.68"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -506,8 +657,20 @@ "Srcs": ["100.90.199.68/32"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -569,8 +732,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -579,7 +748,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -591,7 +764,18 @@ "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": [ - { "SrcIPs": ["100.90.199.68"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.90.199.68"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -599,8 +783,20 @@ "Srcs": ["100.90.199.68/32"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -662,8 +858,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -672,7 +874,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -684,7 +890,18 @@ "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": [ - { "SrcIPs": ["100.90.199.68"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.90.199.68"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -692,8 +909,20 @@ "Srcs": ["100.90.199.68/32"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -755,8 +984,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -765,7 +1000,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -777,7 +1016,18 @@ "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": [ - { "SrcIPs": ["100.90.199.68"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.90.199.68"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -785,8 +1035,20 @@ "Srcs": ["100.90.199.68/32"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -817,8 +1079,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -828,7 +1096,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -857,8 +1129,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -869,7 +1147,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -898,8 +1180,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -909,7 +1197,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -938,8 +1230,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -949,7 +1247,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -978,8 +1280,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -989,7 +1297,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1019,8 +1331,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1029,7 +1347,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1059,8 +1381,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P01_3.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P01_3.json index 0fe6a04e..e5f87a46 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P01_3.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P01_3.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["100.64.0.0/16"], "dst": ["*"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["100.64.0.0/16"], + "dst": ["*"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -126,7 +134,18 @@ "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": [ - { "SrcIPs": ["100.64.0.0/16"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.64.0.0/16"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -134,8 +153,20 @@ "Srcs": ["100.64.0.0/16"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -184,7 +215,18 @@ "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": [ - { "SrcIPs": ["100.64.0.0/16"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.64.0.0/16"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -192,8 +234,20 @@ "Srcs": ["100.64.0.0/16"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -242,7 +296,18 @@ "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": [ - { "SrcIPs": ["100.64.0.0/16"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.64.0.0/16"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -250,8 +315,20 @@ "Srcs": ["100.64.0.0/16"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -300,7 +377,18 @@ "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": [ - { "SrcIPs": ["100.64.0.0/16"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.64.0.0/16"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -308,8 +396,20 @@ "Srcs": ["100.64.0.0/16"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -358,7 +458,18 @@ "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.64.0.0/16"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.64.0.0/16"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -366,8 +477,20 @@ "Srcs": ["100.64.0.0/16"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -416,7 +539,18 @@ "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": [ - { "SrcIPs": ["100.64.0.0/16"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.64.0.0/16"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -424,8 +558,20 @@ "Srcs": ["100.64.0.0/16"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -474,7 +620,18 @@ "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": [ - { "SrcIPs": ["100.64.0.0/16"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.64.0.0/16"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -482,8 +639,20 @@ "Srcs": ["100.64.0.0/16"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -532,7 +701,18 @@ "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": [ - { "SrcIPs": ["100.64.0.0/16"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.64.0.0/16"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -540,8 +720,20 @@ "Srcs": ["100.64.0.0/16"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P01_4.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P01_4.json index 088b298e..48bea17a 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P01_4.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P01_4.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["100.108.74.26"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["100.108.74.26"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -168,8 +176,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -179,7 +193,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -248,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -259,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -328,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -339,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -408,8 +446,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -419,7 +463,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -453,7 +501,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "100.108.74.26", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "100.108.74.26", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -477,7 +533,15 @@ "fd7a:115c:a1e0::/48" ], "SrcCaps": null, - "Dsts": [{ "Net": "100.108.74.26/32", "Ports": { "First": 0, "Last": 65535 } }], + "Dsts": [ + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ], "Caps": [] } ], @@ -507,8 +571,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -518,7 +588,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -547,8 +621,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -559,7 +639,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -588,8 +672,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -599,7 +689,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -628,8 +722,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -639,7 +739,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -669,8 +773,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -679,7 +789,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -709,8 +823,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -753,8 +873,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -763,7 +889,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -822,8 +952,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -833,7 +969,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -902,8 +1042,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -913,7 +1059,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -982,8 +1132,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -993,7 +1149,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P01_5.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P01_5.json index f0e73ac2..c488c244 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P01_5.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P01_5.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["100.64.0.0/12"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["100.64.0.0/12"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_1.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_1.json index 4063382c..f755a16f 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_1.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_1.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["kratail2tid@passkey"], "dst": ["*"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["kratail2tid@passkey"], + "dst": ["*"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -128,7 +136,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -137,8 +153,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -200,8 +228,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -210,7 +244,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -224,7 +262,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -233,8 +279,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -296,8 +354,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -306,7 +370,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -320,7 +388,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -329,8 +405,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -392,8 +480,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -402,7 +496,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -416,7 +514,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -425,8 +531,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -488,8 +606,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -498,7 +622,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -512,7 +640,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -521,8 +657,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -584,8 +732,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -594,7 +748,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -608,7 +766,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -617,8 +783,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -680,8 +858,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -690,7 +874,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -704,7 +892,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -713,8 +909,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -776,8 +984,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -786,7 +1000,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -800,7 +1018,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -809,8 +1035,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -841,8 +1079,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -852,7 +1096,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -881,8 +1129,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -893,7 +1147,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -922,8 +1180,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -933,7 +1197,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -962,8 +1230,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -973,7 +1247,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1002,8 +1280,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1013,7 +1297,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1043,8 +1331,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1053,7 +1347,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1083,8 +1381,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_2.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_2.json index 8695baf3..0bec0df2 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_2.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_2.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["kratail2tid@passkey"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["kratail2tid@passkey"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -184,8 +192,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -194,7 +208,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -264,8 +282,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -274,7 +298,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -344,8 +372,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -354,7 +388,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -424,8 +462,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -434,7 +478,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -504,8 +552,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -514,7 +568,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -584,8 +642,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -594,7 +658,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -664,8 +732,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -674,7 +748,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -694,8 +772,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.90.199.68", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.90.199.68", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -721,8 +811,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.90.199.68/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -753,8 +855,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -764,7 +872,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -793,8 +905,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -805,7 +923,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -834,8 +956,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -845,7 +973,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -874,8 +1006,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -885,7 +1023,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -914,8 +1056,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -925,7 +1073,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -955,8 +1107,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -965,7 +1123,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -995,8 +1157,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_3.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_3.json index 6ae42c4f..019873ee 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_3.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_3.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["group:admins"], "dst": ["*"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["group:admins"], + "dst": ["*"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -128,7 +136,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -137,8 +153,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -200,8 +228,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -210,7 +244,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -224,7 +262,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -233,8 +279,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -296,8 +354,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -306,7 +370,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -320,7 +388,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -329,8 +405,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -392,8 +480,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -402,7 +496,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -416,7 +514,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -425,8 +531,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -488,8 +606,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -498,7 +622,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -512,7 +640,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -521,8 +657,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -584,8 +732,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -594,7 +748,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -608,7 +766,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -617,8 +783,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -680,8 +858,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -690,7 +874,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -704,7 +892,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -713,8 +909,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -776,8 +984,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -786,7 +1000,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -800,7 +1018,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -809,8 +1035,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -841,8 +1079,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -852,7 +1096,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -881,8 +1129,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -893,7 +1147,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -922,8 +1180,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -933,7 +1197,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -962,8 +1230,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -973,7 +1247,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1002,8 +1280,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1013,7 +1297,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1043,8 +1331,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1053,7 +1347,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1083,8 +1381,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_4.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_4.json index 77f30882..a7abad0a 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_4.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_4.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["group:admins"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["group:admins"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -184,8 +192,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -194,7 +208,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -264,8 +282,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -274,7 +298,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -344,8 +372,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -354,7 +388,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -424,8 +462,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -434,7 +478,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -504,8 +552,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -514,7 +568,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -584,8 +642,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -594,7 +658,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -664,8 +732,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -674,7 +748,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -694,8 +772,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.90.199.68", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.90.199.68", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -721,8 +811,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.90.199.68/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -753,8 +855,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -764,7 +872,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -793,8 +905,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -805,7 +923,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -834,8 +956,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -845,7 +973,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -874,8 +1006,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -885,7 +1023,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -914,8 +1056,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -925,7 +1073,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -955,8 +1107,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -965,7 +1123,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -995,8 +1157,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_5_CORRECT.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_5_CORRECT.json index e3754bf3..16d5d811 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_5_CORRECT.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_5_CORRECT.json @@ -44,8 +44,16 @@ ] }, "grants_section": [ - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["22"] }, - { "src": ["tag:client"], "dst": ["tag:prod"], "ip": ["5432"] } + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["22"] + }, + { + "src": ["tag:client"], + "dst": ["tag:prod"], + "ip": ["5432"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -69,7 +77,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -261,8 +271,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -272,7 +288,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -301,8 +321,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -312,7 +338,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -342,8 +372,20 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.103.8.15", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 5432, "Last": 5432 } } + { + "IP": "100.103.8.15", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ] } ], @@ -353,8 +395,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.103.8.15/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 5432, "Last": 5432 } } + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ], "Caps": [] } @@ -395,8 +449,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -406,7 +466,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -441,8 +505,20 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -452,8 +528,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -494,8 +582,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -505,7 +599,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_5_NAIVE.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_5_NAIVE.json index 0837e192..c0fe29ae 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_5_NAIVE.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P02_5_NAIVE.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["tag:client"], "dst": ["tag:server", "tag:prod"], "ip": ["22", "5432"] }], + "grants_section": [ + { + "src": ["tag:client"], + "dst": ["tag:server", "tag:prod"], + "ip": ["22", "5432"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -253,8 +261,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -264,7 +278,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -293,8 +311,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -304,7 +328,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -334,10 +362,34 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.103.8.15", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.103.8.15", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 5432, "Last": 5432 } } + { + "IP": "100.103.8.15", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ] } ], @@ -347,10 +399,34 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.103.8.15/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 5432, "Last": 5432 } } + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ], "Caps": [] } @@ -391,8 +467,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -402,7 +484,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -437,10 +523,34 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 5432, "Last": 5432 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ] } ], @@ -450,10 +560,34 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 5432, "Last": 5432 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ], "Caps": [] } @@ -494,8 +628,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -505,7 +645,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P03_1.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P03_1.json index 61eefdbe..20b9bfb3 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P03_1.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P03_1.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["tag:client"], "dst": ["*"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["tag:client"], + "dst": ["*"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -128,7 +136,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -137,8 +153,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -174,8 +202,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -185,7 +219,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -224,7 +262,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -233,8 +279,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -270,8 +328,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -281,7 +345,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -320,7 +388,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -329,8 +405,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -361,8 +449,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -372,7 +466,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -401,8 +499,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -413,7 +517,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -442,8 +550,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -453,7 +567,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -482,8 +600,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -493,7 +617,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -523,8 +651,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -533,7 +667,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -563,8 +701,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -607,8 +751,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -617,7 +767,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -631,7 +785,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -640,8 +802,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -682,8 +856,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -693,7 +873,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -727,7 +911,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -736,8 +928,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -778,8 +982,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -789,7 +999,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -823,7 +1037,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -832,8 +1054,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -874,8 +1108,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -885,7 +1125,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -919,7 +1163,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -928,8 +1180,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -970,8 +1234,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -981,7 +1251,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1015,7 +1289,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1024,8 +1306,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1066,8 +1360,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1077,7 +1377,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P03_2.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P03_2.json index 70fb1b43..fae2ec59 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P03_2.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P03_2.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["tag:server"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["tag:server"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -168,8 +176,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -179,7 +193,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -248,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -259,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -328,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -339,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -408,8 +446,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -419,7 +463,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -454,8 +502,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -481,8 +541,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -513,8 +585,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -524,7 +602,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -553,8 +635,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -565,7 +653,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -594,8 +686,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -605,7 +703,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -634,8 +736,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -645,7 +753,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -675,8 +787,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -685,7 +803,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -715,8 +837,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -759,8 +887,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -769,7 +903,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -828,8 +966,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -839,7 +983,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -908,8 +1056,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -919,7 +1073,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -988,8 +1146,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -999,7 +1163,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P03_3.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P03_3.json index 7a3a7825..f22afd32 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P03_3.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P03_3.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["tag:client"], "dst": ["tag:server"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -258,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -269,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -344,8 +362,20 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -355,8 +385,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -397,8 +439,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -408,7 +456,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P03_4.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P03_4.json index 0746bebe..85eeb0ad 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P03_4.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P03_4.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["tag:client", "tag:prod"], "dst": ["tag:server"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["tag:client", "tag:prod"], + "dst": ["tag:server"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -258,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -269,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -338,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -349,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -379,8 +407,20 @@ { "SrcIPs": ["100.103.8.15", "100.83.200.69", "fd7a:115c:a1e0::5b37:80f", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -395,8 +435,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -437,8 +489,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -448,7 +506,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -477,8 +539,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -488,7 +556,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P04_1.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P04_1.json index dfceb040..80014984 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P04_1.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P04_1.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["autogroup:member"], "dst": ["*"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["autogroup:member"], + "dst": ["*"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -135,7 +143,15 @@ "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::9e37:5a52" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -151,8 +167,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -204,8 +232,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -214,7 +248,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -244,8 +282,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -288,8 +332,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -298,7 +348,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -319,7 +373,15 @@ "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::9e37:5a52" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -335,8 +397,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -388,8 +462,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -398,7 +478,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -428,8 +512,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -472,8 +562,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -482,7 +578,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -503,7 +603,15 @@ "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::9e37:5a52" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -519,8 +627,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -572,8 +692,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -582,7 +708,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -612,8 +742,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -656,8 +792,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -666,7 +808,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -687,7 +833,15 @@ "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::9e37:5a52" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -703,8 +857,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -756,8 +922,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -766,7 +938,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -796,8 +972,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -840,8 +1022,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -850,7 +1038,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -871,7 +1063,15 @@ "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::9e37:5a52" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -887,8 +1087,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -940,8 +1152,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -950,7 +1168,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -980,8 +1202,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1024,8 +1252,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1034,7 +1268,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1055,7 +1293,15 @@ "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::9e37:5a52" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1071,8 +1317,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1103,8 +1361,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1114,7 +1378,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1143,8 +1411,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1155,7 +1429,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1184,8 +1462,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1195,7 +1479,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1224,8 +1512,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1235,7 +1529,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1264,8 +1562,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1275,7 +1579,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1305,8 +1613,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1349,8 +1663,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1359,7 +1679,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1380,7 +1704,15 @@ "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::9e37:5a52" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1396,8 +1728,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1428,8 +1772,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1439,7 +1789,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1468,8 +1822,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1480,7 +1840,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1509,8 +1873,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1520,7 +1890,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1549,8 +1923,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1560,7 +1940,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1589,8 +1973,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1600,7 +1990,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1630,8 +2024,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1640,7 +2040,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1670,8 +2074,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1680,7 +2090,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1701,7 +2115,15 @@ "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::9e37:5a52" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1717,8 +2139,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1749,8 +2183,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1760,7 +2200,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1789,8 +2233,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1801,7 +2251,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1830,8 +2284,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1841,7 +2301,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1870,8 +2334,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1881,7 +2351,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1910,8 +2384,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1921,7 +2401,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1951,8 +2435,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1961,7 +2451,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1991,8 +2485,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P04_2.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P04_2.json index 18f34642..4f3d8792 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P04_2.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P04_2.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["autogroup:tagged"], "dst": ["*"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["autogroup:tagged"], + "dst": ["*"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -139,7 +147,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -159,8 +175,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -191,8 +219,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -203,7 +237,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -232,8 +270,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -243,7 +287,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -272,8 +320,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -283,7 +337,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -312,8 +370,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -323,7 +387,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -353,8 +421,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -363,7 +437,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -393,8 +471,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -437,8 +521,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -447,7 +537,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -472,7 +566,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -492,8 +594,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -524,8 +638,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -535,7 +655,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -564,8 +688,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -575,7 +705,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -604,8 +738,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -615,7 +755,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -644,8 +788,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -655,7 +805,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -685,8 +839,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -695,7 +855,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -725,8 +889,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -769,8 +939,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -779,7 +955,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -804,7 +984,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -824,8 +1012,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -856,8 +1056,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -867,7 +1073,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -896,8 +1106,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -908,7 +1124,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -937,8 +1157,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -948,7 +1174,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -977,8 +1207,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -988,7 +1224,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1018,8 +1258,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1028,7 +1274,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1058,8 +1308,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1102,8 +1358,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1112,7 +1374,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1137,7 +1403,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1157,8 +1431,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1189,8 +1475,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1200,7 +1492,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1229,8 +1525,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1241,7 +1543,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1270,8 +1576,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1281,7 +1593,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1310,8 +1626,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1321,7 +1643,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1351,8 +1677,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1361,7 +1693,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1391,8 +1727,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1435,8 +1777,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1445,7 +1793,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1470,7 +1822,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1490,8 +1850,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1522,8 +1894,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1533,7 +1911,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1562,8 +1944,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1574,7 +1962,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1603,8 +1995,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1614,7 +2012,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1643,8 +2045,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1654,7 +2062,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1684,8 +2096,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1694,7 +2112,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1724,8 +2146,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1768,8 +2196,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1778,7 +2212,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1803,7 +2241,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1823,8 +2269,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1855,8 +2313,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1866,7 +2330,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1895,8 +2363,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1906,7 +2380,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1935,8 +2413,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1946,7 +2430,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1975,8 +2463,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1986,7 +2480,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2015,8 +2513,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2026,7 +2530,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2061,7 +2569,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2081,8 +2597,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2113,8 +2641,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2124,7 +2658,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2153,8 +2691,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2164,7 +2708,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2193,8 +2741,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2204,7 +2758,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2233,8 +2791,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2244,7 +2808,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2273,8 +2841,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2284,7 +2858,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2319,7 +2897,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2339,8 +2925,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2371,8 +2969,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2382,7 +2986,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2411,8 +3019,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2422,7 +3036,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2451,8 +3069,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2462,7 +3086,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2491,8 +3119,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2502,7 +3136,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2531,8 +3169,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2542,7 +3186,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P04_4.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P04_4.json index 585afb59..1d3cd8c7 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P04_4.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P04_4.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["autogroup:internet"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["autogroup:internet"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P05_1.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P05_1.json index b8822d03..ab6db23c 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P05_1.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P05_1.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["webserver"], "ip": ["80"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["webserver"], + "ip": ["80"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -168,8 +176,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -179,7 +193,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -248,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -259,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -328,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -339,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -408,8 +446,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -419,7 +463,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -453,7 +501,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }] + "DstPorts": [ + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + } + ] } ], "packet_filter_matches": [ @@ -477,7 +533,15 @@ "fd7a:115c:a1e0::/48" ], "SrcCaps": null, - "Dsts": [{ "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }], + "Dsts": [ + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + } + ], "Caps": [] } ], @@ -507,8 +571,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -518,7 +588,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -547,8 +621,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -559,7 +639,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -588,8 +672,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -599,7 +689,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -628,8 +722,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -639,7 +739,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -669,8 +773,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -679,7 +789,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -709,8 +823,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -753,8 +873,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -763,7 +889,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -822,8 +952,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -833,7 +969,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -902,8 +1042,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -913,7 +1059,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -982,8 +1132,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -993,7 +1149,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P05_2.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P05_2.json index 8573f941..97fe9ef7 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P05_2.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P05_2.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["webserver"], "dst": ["*"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["webserver"], + "dst": ["*"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -126,7 +134,18 @@ "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": [ - { "SrcIPs": ["100.108.74.26"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.108.74.26"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -134,8 +153,20 @@ "Srcs": ["100.108.74.26/32"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -181,8 +212,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -192,7 +229,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -219,7 +260,18 @@ "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": [ - { "SrcIPs": ["100.108.74.26"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.108.74.26"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -227,8 +279,20 @@ "Srcs": ["100.108.74.26/32"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -274,8 +338,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -285,7 +355,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -312,7 +386,18 @@ "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": [ - { "SrcIPs": ["100.108.74.26"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.108.74.26"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -320,8 +405,20 @@ "Srcs": ["100.108.74.26/32"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -367,8 +464,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -378,7 +481,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -405,7 +512,18 @@ "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": [ - { "SrcIPs": ["100.108.74.26"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.108.74.26"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -413,8 +531,20 @@ "Srcs": ["100.108.74.26/32"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -460,8 +590,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -471,7 +607,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -498,7 +638,18 @@ "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.108.74.26"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.108.74.26"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -506,8 +657,20 @@ "Srcs": ["100.108.74.26/32"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -538,8 +701,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -549,7 +718,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -578,8 +751,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -590,7 +769,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -619,8 +802,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -630,7 +819,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -659,8 +852,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -670,7 +869,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -700,8 +903,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -710,7 +919,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -740,8 +953,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -784,8 +1003,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -794,7 +1019,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -806,7 +1035,18 @@ "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": [ - { "SrcIPs": ["100.108.74.26"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.108.74.26"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -814,8 +1054,20 @@ "Srcs": ["100.108.74.26/32"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -866,8 +1118,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -877,7 +1135,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -899,7 +1161,18 @@ "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": [ - { "SrcIPs": ["100.108.74.26"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.108.74.26"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -907,8 +1180,20 @@ "Srcs": ["100.108.74.26/32"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -959,8 +1244,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -970,7 +1261,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -992,7 +1287,18 @@ "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": [ - { "SrcIPs": ["100.108.74.26"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["100.108.74.26"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -1000,8 +1306,20 @@ "Srcs": ["100.108.74.26/32"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1052,8 +1370,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1063,7 +1387,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P05_3.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P05_3.json index 7757a17d..97f65e04 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P05_3.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P05_3.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["internal"], "dst": ["*"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["internal"], + "dst": ["*"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -126,7 +134,18 @@ "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": [ - { "SrcIPs": ["10.0.0.0/8"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["10.0.0.0/8"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -134,8 +153,20 @@ "Srcs": ["10.0.0.0/8"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -166,8 +197,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -178,7 +215,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -220,7 +261,18 @@ "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": [ - { "SrcIPs": ["10.0.0.0/8"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["10.0.0.0/8"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -228,8 +280,20 @@ "Srcs": ["10.0.0.0/8"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -260,8 +324,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -271,7 +341,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -300,8 +374,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -311,7 +391,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -340,8 +424,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -351,7 +441,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -380,8 +474,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -391,7 +491,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -421,8 +525,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -431,7 +541,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -461,8 +575,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -505,8 +625,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -515,7 +641,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -527,7 +657,18 @@ "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": [ - { "SrcIPs": ["10.0.0.0/8"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["10.0.0.0/8"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -535,8 +676,20 @@ "Srcs": ["10.0.0.0/8"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -572,8 +725,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -584,7 +743,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -621,7 +784,18 @@ "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": [ - { "SrcIPs": ["10.0.0.0/8"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["10.0.0.0/8"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -629,8 +803,20 @@ "Srcs": ["10.0.0.0/8"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -666,8 +852,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -678,7 +870,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -715,7 +911,18 @@ "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": ["10.0.0.0/8"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["10.0.0.0/8"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -723,8 +930,20 @@ "Srcs": ["10.0.0.0/8"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -760,8 +979,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -772,7 +997,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -809,7 +1038,18 @@ "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": [ - { "SrcIPs": ["10.0.0.0/8"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["10.0.0.0/8"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -817,8 +1057,20 @@ "Srcs": ["10.0.0.0/8"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -854,8 +1106,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -866,7 +1124,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -903,7 +1165,18 @@ "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": [ - { "SrcIPs": ["10.0.0.0/8"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["10.0.0.0/8"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -911,8 +1184,20 @@ "Srcs": ["10.0.0.0/8"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -948,8 +1233,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -960,7 +1251,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -997,7 +1292,18 @@ "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": [ - { "SrcIPs": ["10.0.0.0/8"], "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] } + { + "SrcIPs": ["10.0.0.0/8"], + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] + } ], "packet_filter_matches": [ { @@ -1005,8 +1311,20 @@ "Srcs": ["10.0.0.0/8"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1042,8 +1360,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1054,7 +1378,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_1.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_1.json index e3bf8b76..ad234b10 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_1.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_1.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["tag:server"], "ip": ["tcp:22"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["tag:server"], + "ip": ["tcp:22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -168,8 +176,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -179,7 +193,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -248,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -259,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -328,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -339,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -408,8 +446,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -419,7 +463,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -454,8 +502,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "IPProto": [6] } @@ -482,8 +542,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -514,8 +586,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -525,7 +603,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -554,8 +636,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -566,7 +654,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -595,8 +687,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -606,7 +704,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -635,8 +737,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -646,7 +754,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -676,8 +788,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -686,7 +804,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -716,8 +838,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -760,8 +888,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -770,7 +904,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -829,8 +967,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -840,7 +984,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -909,8 +1057,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -920,7 +1074,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -989,8 +1147,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1000,7 +1164,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_2.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_2.json index ed5ecc64..86b25e4b 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_2.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_2.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["tag:server"], "ip": ["udp:53"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["tag:server"], + "ip": ["udp:53"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -168,8 +176,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -179,7 +193,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -248,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -259,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -328,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -339,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -408,8 +446,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -419,7 +463,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -454,8 +502,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 53, "Last": 53 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 53, "Last": 53 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 53, + "Last": 53 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 53, + "Last": 53 + } + } ], "IPProto": [17] } @@ -482,8 +542,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 53, "Last": 53 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 53, "Last": 53 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 53, + "Last": 53 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 53, + "Last": 53 + } + } ], "Caps": [] } @@ -514,8 +586,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -525,7 +603,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -554,8 +636,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -566,7 +654,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -595,8 +687,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -606,7 +704,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -635,8 +737,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -646,7 +754,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -676,8 +788,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -686,7 +804,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -716,8 +838,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -760,8 +888,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -770,7 +904,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -829,8 +967,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -840,7 +984,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -909,8 +1057,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -920,7 +1074,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -989,8 +1147,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1000,7 +1164,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_3.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_3.json index 67a0bbd8..a47a227b 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_3.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_3.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["tag:server"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["tag:server"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -168,8 +176,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -179,7 +193,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -248,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -259,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -328,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -339,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -408,8 +446,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -419,7 +463,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -454,8 +502,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -481,8 +541,20 @@ ], "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 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -513,8 +585,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -524,7 +602,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -553,8 +635,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -565,7 +653,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -594,8 +686,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -605,7 +703,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -634,8 +736,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -645,7 +753,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -675,8 +787,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -685,7 +803,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -715,8 +837,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -759,8 +887,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -769,7 +903,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -828,8 +966,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -839,7 +983,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -908,8 +1056,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -919,7 +1073,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -988,8 +1146,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -999,7 +1163,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_4.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_4.json index ed21e6f2..c4db4e14 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_4.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_4.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["tag:server"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["tag:server"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -168,8 +176,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -179,7 +193,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -248,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -259,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -328,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -339,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -408,8 +446,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -419,7 +463,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -454,8 +502,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -481,8 +541,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -513,8 +585,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -524,7 +602,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -553,8 +635,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -565,7 +653,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -594,8 +686,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -605,7 +703,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -634,8 +736,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -645,7 +753,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -675,8 +787,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -685,7 +803,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -715,8 +837,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -759,8 +887,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -769,7 +903,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -828,8 +966,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -839,7 +983,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -908,8 +1056,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -919,7 +1073,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -988,8 +1146,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -999,7 +1163,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_5.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_5.json index fe95686c..147ae7b4 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_5.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_5.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["tag:server"], "ip": ["80-443"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["tag:server"], + "ip": ["80-443"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -168,8 +176,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -179,7 +193,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -248,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -259,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -328,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -339,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -408,8 +446,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -419,7 +463,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -454,8 +502,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 443 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 443 + } + } ] } ], @@ -481,8 +541,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 443 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 443 + } + } ], "Caps": [] } @@ -513,8 +585,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -524,7 +602,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -553,8 +635,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -565,7 +653,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -594,8 +686,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -605,7 +703,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -634,8 +736,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -645,7 +753,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -675,8 +787,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -685,7 +803,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -715,8 +837,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -759,8 +887,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -769,7 +903,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -828,8 +966,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -839,7 +983,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -908,8 +1056,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -919,7 +1073,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -988,8 +1146,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -999,7 +1163,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_6.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_6.json index 718bf230..7dd5fe53 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_6.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_6.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["tag:server"], "ip": ["22", "80", "443"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["tag:server"], + "ip": ["22", "80", "443"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -168,8 +176,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -179,7 +193,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -248,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -259,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -328,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -339,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -408,8 +446,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -419,7 +463,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -454,12 +502,48 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.108.74.26", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 443, "Last": 443 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 443, + "Last": 443 + } + } ] } ], @@ -485,12 +569,48 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] } @@ -521,8 +641,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -532,7 +658,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -561,8 +691,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -573,7 +709,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -602,8 +742,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -613,7 +759,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -642,8 +792,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -653,7 +809,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -683,8 +843,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -693,7 +859,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -723,8 +893,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -767,8 +943,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -777,7 +959,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -836,8 +1022,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -847,7 +1039,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -916,8 +1112,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -927,7 +1129,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -996,8 +1202,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1007,7 +1219,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_7.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_7.json index e8155078..ea896910 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_7.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P06_7.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["tag:server"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["tag:server"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -168,8 +176,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -179,7 +193,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -248,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -259,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -328,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -339,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -408,8 +446,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -419,7 +463,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -454,8 +502,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -481,8 +541,20 @@ ], "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 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -513,8 +585,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -524,7 +602,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -553,8 +635,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -565,7 +653,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -594,8 +686,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -605,7 +703,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -634,8 +736,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -645,7 +753,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -675,8 +787,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -685,7 +803,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -715,8 +837,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -759,8 +887,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -769,7 +903,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -828,8 +966,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -839,7 +983,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -908,8 +1056,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -919,7 +1073,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -988,8 +1146,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -999,7 +1163,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_1.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_1.json index a8de58f8..3b31e58e 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_1.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_1.json @@ -44,8 +44,16 @@ ] }, "grants_section": [ - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["22"] }, - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["80", "443"] } + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["22"] + }, + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["80", "443"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -69,7 +77,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -266,8 +276,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -277,7 +293,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -352,12 +372,48 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.108.74.26", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 443, "Last": 443 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 443, + "Last": 443 + } + } ] } ], @@ -367,12 +423,48 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] } @@ -413,8 +505,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -424,7 +522,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_2.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_2.json index c0bd119a..7400d268 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_2.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_2.json @@ -49,9 +49,21 @@ ] }, "grants_section": [ - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["22"] }, - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["80", "443"] }, - { "src": ["*"], "dst": ["tag:server"], "ip": ["udp:53"] } + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["22"] + }, + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["80", "443"] + }, + { + "src": ["*"], + "dst": ["tag:server"], + "ip": ["udp:53"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -75,7 +87,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -182,8 +196,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -193,7 +213,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -262,8 +286,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -273,7 +303,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -342,8 +376,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -353,7 +393,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -422,8 +466,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -433,7 +483,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -463,12 +517,48 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.108.74.26", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 443, "Last": 443 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 443, + "Last": 443 + } + } ] }, { @@ -479,8 +569,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 53, "Last": 53 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 53, "Last": 53 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 53, + "Last": 53 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 53, + "Last": 53 + } + } ], "IPProto": [17] } @@ -491,12 +593,48 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] }, @@ -521,8 +659,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 53, "Last": 53 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 53, "Last": 53 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 53, + "Last": 53 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 53, + "Last": 53 + } + } ], "Caps": [] } @@ -553,8 +703,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -564,7 +720,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -593,8 +753,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -605,7 +771,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -634,8 +804,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -645,7 +821,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -674,8 +854,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -685,7 +871,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -715,8 +905,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -725,7 +921,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -755,8 +955,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -799,8 +1005,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -809,7 +1021,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -868,8 +1084,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -879,7 +1101,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -948,8 +1174,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -959,7 +1191,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1028,8 +1264,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1039,7 +1281,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_3.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_3.json index 1beed19c..66afd33b 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_3.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_3.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["group:empty"], "dst": ["*"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["group:empty"], + "dst": ["*"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_4.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_4.json index 9848f73d..4fd8c45a 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_4.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_4.json @@ -49,9 +49,21 @@ ] }, "grants_section": [ - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["22"] }, - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["80"] }, - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["443"] } + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["22"] + }, + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["80"] + }, + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["443"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -75,7 +87,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -272,8 +286,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -283,7 +303,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -358,12 +382,48 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.108.74.26", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 443, "Last": 443 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 443, + "Last": 443 + } + } ] } ], @@ -373,12 +433,48 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] } @@ -419,8 +515,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -430,7 +532,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_5.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_5.json index d543eece..8ce797c3 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_5.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_5.json @@ -49,9 +49,21 @@ ] }, "grants_section": [ - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["22"] }, - { "src": ["tag:prod"], "dst": ["tag:server"], "ip": ["22"] }, - { "src": ["tag:router"], "dst": ["tag:server"], "ip": ["22"] } + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["22"] + }, + { + "src": ["tag:prod"], + "dst": ["tag:server"], + "ip": ["22"] + }, + { + "src": ["tag:router"], + "dst": ["tag:server"], + "ip": ["22"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -75,7 +87,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -227,8 +241,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -238,7 +258,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -307,8 +331,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -318,7 +348,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -387,8 +421,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -398,7 +438,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -428,22 +472,58 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] }, { "SrcIPs": ["100.103.8.15", "fd7a:115c:a1e0::5b37:80f"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] }, { "SrcIPs": ["100.92.142.61", "fd7a:115c:a1e0::3e37:8e3d"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -453,8 +533,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] }, @@ -463,8 +555,20 @@ "Srcs": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] }, @@ -473,8 +577,20 @@ "Srcs": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -510,8 +626,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -521,7 +643,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -550,8 +676,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -561,7 +693,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -590,8 +726,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -601,7 +743,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_6.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_6.json index e4242eee..fa78c8c1 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_6.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_6.json @@ -44,8 +44,16 @@ ] }, "grants_section": [ - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["22"] }, - { "src": ["*"], "dst": ["tag:server"], "ip": ["80"] } + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["22"] + }, + { + "src": ["*"], + "dst": ["tag:server"], + "ip": ["80"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -69,7 +77,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -176,8 +186,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -187,7 +203,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -256,8 +276,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -267,7 +293,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -336,8 +366,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -347,7 +383,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -416,8 +456,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -427,7 +473,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -457,8 +507,20 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] }, { @@ -469,8 +531,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 80 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 80 + } + } ] } ], @@ -480,8 +554,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] }, @@ -506,8 +592,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] } @@ -538,8 +636,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -549,7 +653,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -578,8 +686,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -590,7 +704,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -619,8 +737,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -630,7 +754,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -659,8 +787,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -670,7 +804,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -700,8 +838,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -710,7 +854,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -740,8 +888,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -784,8 +938,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -794,7 +954,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -853,8 +1017,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -864,7 +1034,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -933,8 +1107,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -944,7 +1124,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1013,8 +1197,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1024,7 +1214,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_7.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_7.json index ff63617d..f80213dc 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_7.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_7.json @@ -44,8 +44,16 @@ ] }, "grants_section": [ - { "src": ["*"], "dst": ["*"], "ip": ["*"] }, - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["22"] } + { + "src": ["*"], + "dst": ["*"], + "ip": ["*"] + }, + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["22"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -69,7 +77,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -141,7 +151,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -166,8 +184,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -198,8 +228,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -210,7 +246,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -239,8 +279,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -250,7 +296,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -279,8 +329,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -290,7 +346,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -319,8 +379,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -330,7 +396,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -360,8 +430,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -370,7 +446,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -400,8 +480,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -444,8 +530,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -454,7 +546,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -473,7 +569,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -498,8 +602,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -530,8 +646,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -541,7 +663,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -570,8 +696,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -581,7 +713,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -610,8 +746,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -621,7 +763,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -650,8 +796,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -661,7 +813,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -691,8 +847,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -701,7 +863,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -731,8 +897,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -775,8 +947,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -785,7 +963,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -804,7 +986,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -829,8 +1019,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -861,8 +1063,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -872,7 +1080,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -901,8 +1113,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -913,7 +1131,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -942,8 +1164,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -953,7 +1181,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -982,8 +1214,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -993,7 +1231,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1023,8 +1265,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1033,7 +1281,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1063,8 +1315,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1107,8 +1365,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1117,7 +1381,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1136,7 +1404,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1161,8 +1437,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1193,8 +1481,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1204,7 +1498,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1233,8 +1531,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1245,7 +1549,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1274,8 +1582,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1285,7 +1599,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1314,8 +1632,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1325,7 +1649,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1355,8 +1683,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1365,7 +1699,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1395,8 +1733,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1439,8 +1783,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1449,7 +1799,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1468,13 +1822,33 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] }, { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -1500,8 +1874,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -1510,8 +1896,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -1542,8 +1940,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1553,7 +1957,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1582,8 +1990,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1594,7 +2008,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1623,8 +2041,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1634,7 +2058,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1663,8 +2091,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1674,7 +2108,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1704,8 +2142,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1714,7 +2158,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1744,8 +2192,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1788,8 +2242,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1798,7 +2258,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1817,7 +2281,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1842,8 +2314,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1874,8 +2358,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1885,7 +2375,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1914,8 +2408,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1926,7 +2426,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1955,8 +2459,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1966,7 +2476,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1995,8 +2509,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2006,7 +2526,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2035,8 +2559,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2046,7 +2576,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2076,8 +2610,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2120,8 +2660,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2130,7 +2676,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2149,7 +2699,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2174,8 +2732,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2206,8 +2776,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2217,7 +2793,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2246,8 +2826,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2258,7 +2844,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2287,8 +2877,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2298,7 +2894,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2327,8 +2927,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2338,7 +2944,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2367,8 +2977,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2378,7 +2994,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2408,8 +3028,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2418,7 +3044,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2448,8 +3078,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2458,7 +3094,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2477,7 +3117,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2502,8 +3150,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2534,8 +3194,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2545,7 +3211,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2574,8 +3244,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2586,7 +3262,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2615,8 +3295,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2626,7 +3312,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2655,8 +3345,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2666,7 +3362,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2695,8 +3395,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2706,7 +3412,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2736,8 +3446,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2746,7 +3462,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2776,8 +3496,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_8.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_8.json index 8a70522e..fd8bf7ba 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_8.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P08_8.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["10.0.0.0/8"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["10.0.0.0/8"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -153,8 +161,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -165,7 +179,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -214,7 +232,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "10.0.0.0/8", "Ports": { "First": 22, "Last": 22 } }] + "DstPorts": [ + { + "IP": "10.0.0.0/8", + "Ports": { + "First": 22, + "Last": 22 + } + } + ] } ], "packet_filter_matches": [ @@ -238,7 +264,15 @@ "fd7a:115c:a1e0::/48" ], "SrcCaps": null, - "Dsts": [{ "Net": "10.0.0.0/8", "Ports": { "First": 22, "Last": 22 } }], + "Dsts": [ + { + "Net": "10.0.0.0/8", + "Ports": { + "First": 22, + "Last": 22 + } + } + ], "Caps": [] } ], @@ -268,8 +302,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -279,7 +319,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -308,8 +352,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -319,7 +369,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -348,8 +402,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -359,7 +419,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -388,8 +452,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -399,7 +469,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -429,8 +503,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -439,7 +519,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -469,8 +553,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -513,8 +603,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -523,7 +619,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -567,8 +667,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -579,7 +685,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -648,8 +758,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -660,7 +776,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -729,8 +849,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -741,7 +867,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -810,8 +940,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -822,7 +958,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -891,8 +1031,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -903,7 +1049,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -972,8 +1122,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -984,7 +1140,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_10A.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_10A.json index 84a71af0..65c274a8 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_10A.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_10A.json @@ -44,8 +44,16 @@ ] }, "grants_section": [ - { "src": ["autogroup:member"], "dst": ["tag:server"], "ip": ["22"] }, - { "src": ["tag:client"], "dst": ["group:admins"], "ip": ["80"] } + { + "src": ["autogroup:member"], + "dst": ["tag:server"], + "ip": ["22"] + }, + { + "src": ["tag:client"], + "dst": ["group:admins"], + "ip": ["80"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -69,7 +77,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -282,8 +292,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -292,7 +308,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -359,8 +379,20 @@ "fd7a:115c:a1e0::9e37:5a52" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -377,8 +409,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -430,8 +474,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -440,7 +490,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -470,8 +524,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -514,8 +574,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -524,7 +590,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -583,8 +653,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -594,7 +670,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -663,8 +743,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -674,7 +760,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -699,8 +789,20 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.90.199.68", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 80, "Last": 80 } } + { + "IP": "100.90.199.68", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 80, + "Last": 80 + } + } ] } ], @@ -710,8 +812,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.90.199.68/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] } @@ -752,8 +866,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -763,7 +883,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -797,8 +921,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -808,7 +938,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_10B.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_10B.json index a4b37cdc..022d2ffc 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_10B.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_10B.json @@ -44,8 +44,16 @@ ] }, "grants_section": [ - { "src": ["group:admins"], "dst": ["*"], "ip": ["*"] }, - { "src": ["autogroup:tagged"], "dst": ["*"], "ip": ["*"] } + { + "src": ["group:admins"], + "dst": ["*"], + "ip": ["*"] + }, + { + "src": ["autogroup:tagged"], + "dst": ["*"], + "ip": ["*"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -69,7 +77,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -136,7 +146,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] }, { "SrcIPs": [ @@ -151,7 +169,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -160,8 +186,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -181,8 +219,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -213,8 +263,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -225,7 +281,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -254,8 +314,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -265,7 +331,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -294,8 +364,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -305,7 +381,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -334,8 +414,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -345,7 +431,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -375,8 +465,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -385,7 +481,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -415,8 +515,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -459,8 +565,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -469,7 +581,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -483,7 +599,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] }, { "SrcIPs": [ @@ -498,7 +622,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -507,8 +639,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -528,8 +672,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -560,8 +716,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -571,7 +733,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -600,8 +766,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -611,7 +783,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -640,8 +816,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -651,7 +833,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -680,8 +866,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -691,7 +883,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -721,8 +917,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -731,7 +933,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -761,8 +967,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -805,8 +1017,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -815,7 +1033,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -829,7 +1051,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] }, { "SrcIPs": [ @@ -844,7 +1074,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -853,8 +1091,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -874,8 +1124,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -906,8 +1168,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -917,7 +1185,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -946,8 +1218,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -958,7 +1236,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -987,8 +1269,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -998,7 +1286,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1027,8 +1319,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1038,7 +1336,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1068,8 +1370,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1078,7 +1386,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1108,8 +1420,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1152,8 +1470,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1162,7 +1486,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1176,7 +1504,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] }, { "SrcIPs": [ @@ -1191,7 +1527,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1200,8 +1544,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -1221,8 +1577,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1253,8 +1621,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1264,7 +1638,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1293,8 +1671,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1305,7 +1689,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1334,8 +1722,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1345,7 +1739,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1374,8 +1772,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1385,7 +1789,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1415,8 +1823,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1425,7 +1839,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1455,8 +1873,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1499,8 +1923,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1509,7 +1939,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1523,7 +1957,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] }, { "SrcIPs": [ @@ -1538,7 +1980,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1547,8 +1997,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -1568,8 +2030,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1600,8 +2074,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1611,7 +2091,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1640,8 +2124,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1652,7 +2142,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1681,8 +2175,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1692,7 +2192,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1721,8 +2225,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1732,7 +2242,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1762,8 +2276,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1772,7 +2292,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1802,8 +2326,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1846,8 +2376,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1856,7 +2392,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1870,7 +2410,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] }, { "SrcIPs": [ @@ -1885,7 +2433,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1894,8 +2450,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -1915,8 +2483,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1947,8 +2527,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1958,7 +2544,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1987,8 +2577,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1998,7 +2594,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2027,8 +2627,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2038,7 +2644,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2067,8 +2677,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2078,7 +2694,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2107,8 +2727,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2118,7 +2744,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2153,8 +2783,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2163,7 +2799,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2177,7 +2817,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] }, { "SrcIPs": [ @@ -2192,7 +2840,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2201,8 +2857,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -2222,8 +2890,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2254,8 +2934,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2265,7 +2951,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2294,8 +2984,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2305,7 +3001,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2334,8 +3034,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2345,7 +3051,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2374,8 +3084,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2385,7 +3101,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2414,8 +3134,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2425,7 +3151,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2460,8 +3190,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2470,7 +3206,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2484,7 +3224,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] }, { "SrcIPs": [ @@ -2499,7 +3247,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2508,8 +3264,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -2529,8 +3297,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2561,8 +3341,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2572,7 +3358,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2601,8 +3391,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2613,7 +3409,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2642,8 +3442,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2653,7 +3459,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2682,8 +3492,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2693,7 +3509,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2722,8 +3542,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2733,7 +3559,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2763,8 +3593,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2773,7 +3609,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2803,8 +3643,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_10C.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_10C.json index 02c08331..6c36ebc0 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_10C.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_10C.json @@ -49,9 +49,21 @@ ] }, "grants_section": [ - { "src": ["*"], "dst": ["tag:server"], "ip": ["22"] }, - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["80"] }, - { "src": ["autogroup:member"], "dst": ["tag:server"], "ip": ["443"] } + { + "src": ["*"], + "dst": ["tag:server"], + "ip": ["22"] + }, + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["80"] + }, + { + "src": ["autogroup:member"], + "dst": ["tag:server"], + "ip": ["443"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -75,7 +87,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -182,8 +196,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -193,7 +213,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -262,8 +286,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -273,7 +303,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -342,8 +376,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -353,7 +393,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -422,8 +466,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -433,7 +483,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -468,15 +522,39 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] }, { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 80 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 80 + } + } ] }, { @@ -489,8 +567,20 @@ "fd7a:115c:a1e0::9e37:5a52" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 443, "Last": 443 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 443, + "Last": 443 + } + } ] } ], @@ -516,8 +606,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] }, @@ -526,8 +628,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] }, @@ -543,8 +657,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] } @@ -575,8 +701,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -586,7 +718,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -615,8 +751,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -627,7 +769,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -656,8 +802,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -667,7 +819,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -696,8 +852,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -707,7 +869,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -737,8 +903,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -747,7 +919,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -777,8 +953,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -821,8 +1003,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -831,7 +1019,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -890,8 +1082,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -901,7 +1099,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -970,8 +1172,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -981,7 +1189,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1050,8 +1262,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1061,7 +1279,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_10D.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_10D.json index f2c64b9f..26bc9a5d 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_10D.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_10D.json @@ -44,8 +44,16 @@ ] }, "grants_section": [ - { "src": ["tag:client", "tag:prod"], "dst": ["tag:server"], "ip": ["22"] }, - { "src": ["autogroup:member", "group:admins"], "dst": ["tag:router"], "ip": ["5432"] } + { + "src": ["tag:client", "tag:prod"], + "dst": ["tag:server"], + "ip": ["22"] + }, + { + "src": ["autogroup:member", "group:admins"], + "dst": ["tag:router"], + "ip": ["5432"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -69,7 +77,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -189,8 +199,20 @@ "fd7a:115c:a1e0::9e37:5a52" ], "DstPorts": [ - { "IP": "100.92.142.61", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "fd7a:115c:a1e0::3e37:8e3d", "Ports": { "First": 5432, "Last": 5432 } } + { + "IP": "100.92.142.61", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "fd7a:115c:a1e0::3e37:8e3d", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ] } ], @@ -207,8 +229,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.92.142.61/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "fd7a:115c:a1e0::3e37:8e3d/128", "Ports": { "First": 5432, "Last": 5432 } } + { + "Net": "100.92.142.61/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "fd7a:115c:a1e0::3e37:8e3d/128", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ], "Caps": [] } @@ -260,8 +294,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -270,7 +310,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -300,8 +344,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -344,8 +394,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -354,7 +410,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -408,8 +468,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -419,7 +485,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -488,8 +558,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -499,7 +575,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -529,8 +609,20 @@ { "SrcIPs": ["100.103.8.15", "100.83.200.69", "fd7a:115c:a1e0::5b37:80f", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -545,8 +637,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -587,8 +691,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -598,7 +708,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -627,8 +741,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -638,7 +758,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -697,8 +821,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -708,7 +838,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -777,8 +911,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -788,7 +928,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -857,8 +1001,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -868,7 +1018,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_11A.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_11A.json index fd19d750..663365bf 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_11A.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_11A.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["autogroup:member", "tag:client"], "dst": ["tag:server"], "ip": ["22", "80", "443"] }], + "grants_section": [ + { + "src": ["autogroup:member", "tag:client"], + "dst": ["tag:server"], + "ip": ["22", "80", "443"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -258,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -269,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -353,12 +371,48 @@ "fd7a:115c:a1e0::c537:c845" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.108.74.26", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 443, "Last": 443 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 443, + "Last": 443 + } + } ] } ], @@ -377,12 +431,48 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] } @@ -423,8 +513,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -434,7 +530,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -469,8 +569,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -479,7 +585,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -509,8 +619,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -553,8 +669,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -563,7 +685,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -622,8 +748,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -633,7 +765,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -702,8 +838,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -713,7 +855,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -782,8 +928,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -793,7 +945,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_11B.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_11B.json index 9ad8004c..9fd6b7b7 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_11B.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_11B.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["group:admins", "webserver"], "dst": ["tag:server"], "ip": ["80-443"] }], + "grants_section": [ + { + "src": ["group:admins", "webserver"], + "dst": ["tag:server"], + "ip": ["80-443"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -309,8 +317,20 @@ { "SrcIPs": ["100.108.74.26", "100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 443 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 443 + } + } ] } ], @@ -320,8 +340,20 @@ "Srcs": ["100.108.74.26/32", "100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 443 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 443 + } + } ], "Caps": [] } @@ -383,8 +415,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -393,7 +431,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -542,8 +584,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -553,7 +601,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_11C_NAIVE.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_11C_NAIVE.json index 7085806d..9b2cbb45 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_11C_NAIVE.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_11C_NAIVE.json @@ -39,7 +39,11 @@ ] }, "grants_section": [ - { "src": ["tag:client", "tag:prod"], "dst": ["tag:server", "tag:router"], "ip": ["22", "80-443", "5432", "3306"] } + { + "src": ["tag:client", "tag:prod"], + "dst": ["tag:server", "tag:router"], + "ip": ["22", "80-443", "5432", "3306"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -63,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -176,14 +182,62 @@ { "SrcIPs": ["100.103.8.15", "100.83.200.69", "fd7a:115c:a1e0::5b37:80f", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.92.142.61", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.92.142.61", "Ports": { "First": 80, "Last": 443 } }, - { "IP": "100.92.142.61", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "100.92.142.61", "Ports": { "First": 3306, "Last": 3306 } }, - { "IP": "fd7a:115c:a1e0::3e37:8e3d", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::3e37:8e3d", "Ports": { "First": 80, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::3e37:8e3d", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "fd7a:115c:a1e0::3e37:8e3d", "Ports": { "First": 3306, "Last": 3306 } } + { + "IP": "100.92.142.61", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.92.142.61", + "Ports": { + "First": 80, + "Last": 443 + } + }, + { + "IP": "100.92.142.61", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "100.92.142.61", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "IP": "fd7a:115c:a1e0::3e37:8e3d", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::3e37:8e3d", + "Ports": { + "First": 80, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::3e37:8e3d", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "fd7a:115c:a1e0::3e37:8e3d", + "Ports": { + "First": 3306, + "Last": 3306 + } + } ] } ], @@ -198,14 +252,62 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.92.142.61/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.92.142.61/32", "Ports": { "First": 80, "Last": 443 } }, - { "Net": "100.92.142.61/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "100.92.142.61/32", "Ports": { "First": 3306, "Last": 3306 } }, - { "Net": "fd7a:115c:a1e0::3e37:8e3d/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::3e37:8e3d/128", "Ports": { "First": 80, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::3e37:8e3d/128", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "fd7a:115c:a1e0::3e37:8e3d/128", "Ports": { "First": 3306, "Last": 3306 } } + { + "Net": "100.92.142.61/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.92.142.61/32", + "Ports": { + "First": 80, + "Last": 443 + } + }, + { + "Net": "100.92.142.61/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "100.92.142.61/32", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "Net": "fd7a:115c:a1e0::3e37:8e3d/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::3e37:8e3d/128", + "Ports": { + "First": 80, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::3e37:8e3d/128", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "fd7a:115c:a1e0::3e37:8e3d/128", + "Ports": { + "First": 3306, + "Last": 3306 + } + } ], "Caps": [] } @@ -241,8 +343,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -252,7 +360,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -281,8 +393,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -292,7 +410,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -356,8 +478,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -367,7 +495,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -401,8 +533,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -412,7 +550,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -471,8 +613,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -482,7 +630,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -516,8 +668,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -527,7 +685,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -557,14 +719,62 @@ { "SrcIPs": ["100.103.8.15", "100.83.200.69", "fd7a:115c:a1e0::5b37:80f", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 443 } }, - { "IP": "100.108.74.26", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "100.108.74.26", "Ports": { "First": 3306, "Last": 3306 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 3306, "Last": 3306 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 443 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 3306, + "Last": 3306 + } + } ] } ], @@ -579,14 +789,62 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 443 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 3306, "Last": 3306 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 3306, "Last": 3306 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 443 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 3306, + "Last": 3306 + } + } ], "Caps": [] } @@ -627,8 +885,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -638,7 +902,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -667,8 +935,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -678,7 +952,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_11D.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_11D.json index 83f6e4f7..4543e9ba 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_11D.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_11D.json @@ -39,7 +39,11 @@ ] }, "grants_section": [ - { "src": ["autogroup:tagged", "autogroup:member"], "dst": ["tag:server", "tag:router"], "ip": ["*", "5432"] } + { + "src": ["autogroup:tagged", "autogroup:member"], + "dst": ["tag:server", "tag:router"], + "ip": ["*", "5432"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -63,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -155,8 +161,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -166,7 +178,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -205,8 +221,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -216,7 +238,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -263,10 +289,34 @@ "fd7a:115c:a1e0::c537:c845" ], "DstPorts": [ - { "IP": "100.92.142.61", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "100.92.142.61", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "fd7a:115c:a1e0::3e37:8e3d", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::3e37:8e3d", "Ports": { "First": 5432, "Last": 5432 } } + { + "IP": "100.92.142.61", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "100.92.142.61", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "fd7a:115c:a1e0::3e37:8e3d", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::3e37:8e3d", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ] } ], @@ -293,10 +343,34 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.92.142.61/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "100.92.142.61/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "fd7a:115c:a1e0::3e37:8e3d/128", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::3e37:8e3d/128", "Ports": { "First": 5432, "Last": 5432 } } + { + "Net": "100.92.142.61/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "100.92.142.61/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "fd7a:115c:a1e0::3e37:8e3d/128", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::3e37:8e3d/128", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ], "Caps": [] } @@ -327,8 +401,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -338,7 +418,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -367,8 +451,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -378,7 +468,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -407,8 +501,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -418,7 +518,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -447,8 +551,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -458,7 +568,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -488,8 +602,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -498,7 +618,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -528,8 +652,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -572,8 +702,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -582,7 +718,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -626,8 +766,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -637,7 +783,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -671,8 +821,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -682,7 +838,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -741,8 +901,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -752,7 +918,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -786,8 +956,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -797,7 +973,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -844,10 +1024,34 @@ "fd7a:115c:a1e0::c537:c845" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "100.108.74.26", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 5432, "Last": 5432 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ] } ], @@ -874,10 +1078,34 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 5432, "Last": 5432 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ], "Caps": [] } @@ -908,8 +1136,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -919,7 +1153,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -948,8 +1186,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -959,7 +1203,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -988,8 +1236,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -999,7 +1253,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1028,8 +1286,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1039,7 +1303,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1069,8 +1337,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1079,7 +1353,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1109,8 +1387,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1153,8 +1437,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1163,7 +1453,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1207,8 +1501,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1218,7 +1518,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1257,8 +1561,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1268,7 +1578,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1322,8 +1636,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1333,7 +1653,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1372,8 +1696,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1383,7 +1713,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1437,8 +1771,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1448,7 +1788,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1487,8 +1831,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1498,7 +1848,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_12A.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_12A.json index 496f5b99..d0902b0b 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_12A.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_12A.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["internal", "tag:client"], "dst": ["tag:server"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["internal", "tag:client"], + "dst": ["tag:server"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -213,8 +221,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -224,7 +238,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -293,8 +311,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -304,7 +328,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -379,8 +407,20 @@ { "SrcIPs": ["10.0.0.0/8", "100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -390,8 +430,20 @@ "Srcs": ["10.0.0.0/8", "100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -427,8 +479,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -439,7 +497,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -468,8 +530,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -479,7 +547,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_12B.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_12B.json index cf683ed7..3266838d 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_12B.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_12B.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["tag:client"], "dst": ["internal", "tag:server"], "ip": ["22", "80"] }], + "grants_section": [ + { + "src": ["tag:client"], + "dst": ["internal", "tag:server"], + "ip": ["22", "80"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -174,8 +182,20 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "10.0.0.0/8", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "10.0.0.0/8", "Ports": { "First": 80, "Last": 80 } } + { + "IP": "10.0.0.0/8", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "10.0.0.0/8", + "Ports": { + "First": 80, + "Last": 80 + } + } ] } ], @@ -185,8 +205,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "10.0.0.0/8", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "10.0.0.0/8", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "10.0.0.0/8", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "10.0.0.0/8", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] } @@ -222,8 +254,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -233,7 +271,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -302,8 +344,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -314,7 +362,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -348,8 +400,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -359,7 +417,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -434,10 +496,34 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 80 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 80 + } + } ] } ], @@ -447,10 +533,34 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] } @@ -491,8 +601,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -502,7 +618,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_13E.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_13E.json index 51836bae..f7bb237a 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_13E.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_13E.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["autogroup:member"], "dst": ["autogroup:self"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["autogroup:member"], + "dst": ["autogroup:self"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -354,8 +362,20 @@ { "SrcIPs": ["100.110.121.96", "fd7a:115c:a1e0::1737:7960"], "DstPorts": [ - { "IP": "100.110.121.96", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::1737:7960", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.110.121.96", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::1737:7960", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -365,8 +385,20 @@ "Srcs": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.110.121.96/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::1737:7960/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.110.121.96/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::1737:7960/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -418,8 +450,20 @@ { "SrcIPs": ["100.103.90.82", "fd7a:115c:a1e0::9e37:5a52"], "DstPorts": [ - { "IP": "100.103.90.82", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::9e37:5a52", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.103.90.82", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::9e37:5a52", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -429,8 +473,20 @@ "Srcs": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.103.90.82/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::9e37:5a52/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.103.90.82/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::9e37:5a52/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -482,8 +538,20 @@ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], "DstPorts": [ - { "IP": "100.90.199.68", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.90.199.68", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -493,8 +561,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.90.199.68/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_13F.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_13F.json index b919e90c..d8fd5fe7 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_13F.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_13F.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["kratail2tid@passkey"], "dst": ["autogroup:self"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["kratail2tid@passkey"], + "dst": ["autogroup:self"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -444,8 +452,20 @@ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], "DstPorts": [ - { "IP": "100.90.199.68", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.90.199.68", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -455,8 +475,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.90.199.68/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_13G.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_13G.json index 9af14e3c..f25ad7c7 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_13G.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_13G.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["group:admins"], "dst": ["autogroup:self"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["group:admins"], + "dst": ["autogroup:self"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -444,8 +452,20 @@ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], "DstPorts": [ - { "IP": "100.90.199.68", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.90.199.68", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -455,8 +475,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.90.199.68/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14A.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14A.json index 60c5d124..62010f95 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14A.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14A.json @@ -44,8 +44,16 @@ ] }, "grants_section": [ - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["22"] }, - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["80"] } + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["22"] + }, + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["80"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -69,7 +77,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -266,8 +276,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -277,7 +293,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -352,10 +372,34 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 80 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 80 + } + } ] } ], @@ -365,10 +409,34 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] } @@ -409,8 +477,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -420,7 +494,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14B.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14B.json index d372981c..6c07faa2 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14B.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14B.json @@ -44,8 +44,16 @@ ] }, "grants_section": [ - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["22"] }, - { "src": ["tag:prod"], "dst": ["tag:server"], "ip": ["22"] } + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["22"] + }, + { + "src": ["tag:prod"], + "dst": ["tag:server"], + "ip": ["22"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -69,7 +77,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -266,8 +276,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -277,7 +293,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -346,8 +366,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -357,7 +383,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -387,15 +417,39 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] }, { "SrcIPs": ["100.103.8.15", "fd7a:115c:a1e0::5b37:80f"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -405,8 +459,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] }, @@ -415,8 +481,20 @@ "Srcs": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -457,8 +535,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -468,7 +552,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -497,8 +585,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -508,7 +602,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14C.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14C.json index eefb18bc..8bb14cdd 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14C.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14C.json @@ -44,8 +44,16 @@ ] }, "grants_section": [ - { "src": ["*"], "dst": ["*"], "ip": ["*"] }, - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["22"] } + { + "src": ["*"], + "dst": ["*"], + "ip": ["*"] + }, + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["22"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -69,7 +77,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -141,7 +151,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -166,8 +184,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -198,8 +228,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -210,7 +246,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -239,8 +279,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -250,7 +296,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -279,8 +329,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -290,7 +346,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -319,8 +379,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -330,7 +396,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -360,8 +430,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -370,7 +446,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -400,8 +480,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -444,8 +530,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -454,7 +546,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -473,7 +569,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -498,8 +602,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -530,8 +646,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -541,7 +663,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -570,8 +696,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -581,7 +713,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -610,8 +746,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -621,7 +763,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -650,8 +796,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -661,7 +813,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -691,8 +847,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -701,7 +863,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -731,8 +897,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -775,8 +947,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -785,7 +963,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -804,7 +986,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -829,8 +1019,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -861,8 +1063,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -872,7 +1080,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -901,8 +1113,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -913,7 +1131,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -942,8 +1164,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -953,7 +1181,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -982,8 +1214,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -993,7 +1231,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1023,8 +1265,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1033,7 +1281,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1063,8 +1315,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1107,8 +1365,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1117,7 +1381,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1136,7 +1404,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1161,8 +1437,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1193,8 +1481,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1204,7 +1498,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1233,8 +1531,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1245,7 +1549,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1274,8 +1582,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1285,7 +1599,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1314,8 +1632,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1325,7 +1649,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1355,8 +1683,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1365,7 +1699,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1395,8 +1733,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1439,8 +1783,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1449,7 +1799,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1468,13 +1822,33 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] }, { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -1500,8 +1874,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -1510,8 +1896,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -1542,8 +1940,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1553,7 +1957,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1582,8 +1990,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1594,7 +2008,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1623,8 +2041,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1634,7 +2058,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1663,8 +2091,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1674,7 +2108,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1704,8 +2142,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1714,7 +2158,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1744,8 +2192,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1788,8 +2242,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1798,7 +2258,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1817,7 +2281,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1842,8 +2314,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1874,8 +2358,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1885,7 +2375,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1914,8 +2408,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1926,7 +2426,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1955,8 +2459,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1966,7 +2476,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1995,8 +2509,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2006,7 +2526,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2035,8 +2559,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2046,7 +2576,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2076,8 +2610,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2120,8 +2660,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2130,7 +2676,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2149,7 +2699,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2174,8 +2732,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2206,8 +2776,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2217,7 +2793,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2246,8 +2826,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2258,7 +2844,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2287,8 +2877,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2298,7 +2894,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2327,8 +2927,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2338,7 +2944,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2367,8 +2977,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2378,7 +2994,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2408,8 +3028,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2418,7 +3044,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2448,8 +3078,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2458,7 +3094,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2477,7 +3117,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2502,8 +3150,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2534,8 +3194,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2545,7 +3211,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2574,8 +3244,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2586,7 +3262,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2615,8 +3295,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2626,7 +3312,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2655,8 +3345,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2666,7 +3362,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2695,8 +3395,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2706,7 +3412,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2736,8 +3446,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2746,7 +3462,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2776,8 +3496,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14D.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14D.json index 2b41b140..f4d97a7a 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14D.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14D.json @@ -49,9 +49,21 @@ ] }, "grants_section": [ - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["22"] }, - { "src": ["tag:prod"], "dst": ["tag:server"], "ip": ["80"] }, - { "src": ["tag:router"], "dst": ["tag:server"], "ip": ["443"] } + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["22"] + }, + { + "src": ["tag:prod"], + "dst": ["tag:server"], + "ip": ["80"] + }, + { + "src": ["tag:router"], + "dst": ["tag:server"], + "ip": ["443"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -75,7 +87,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -227,8 +241,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -238,7 +258,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -307,8 +331,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -318,7 +348,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -387,8 +421,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -398,7 +438,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -428,22 +472,58 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] }, { "SrcIPs": ["100.103.8.15", "fd7a:115c:a1e0::5b37:80f"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 80 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 80 + } + } ] }, { "SrcIPs": ["100.92.142.61", "fd7a:115c:a1e0::3e37:8e3d"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 443, "Last": 443 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 443, + "Last": 443 + } + } ] } ], @@ -453,8 +533,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] }, @@ -463,8 +555,20 @@ "Srcs": ["100.103.8.15/32", "fd7a:115c:a1e0::5b37:80f/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] }, @@ -473,8 +577,20 @@ "Srcs": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] } @@ -510,8 +626,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -521,7 +643,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -550,8 +676,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -561,7 +693,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -590,8 +726,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -601,7 +743,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14E.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14E.json index 900f2644..b7a3b3a1 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14E.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14E.json @@ -49,9 +49,21 @@ ] }, "grants_section": [ - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["22"] }, - { "src": ["tag:client"], "dst": ["tag:prod"], "ip": ["5432"] }, - { "src": ["tag:client"], "dst": ["tag:router"], "ip": ["80"] } + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["22"] + }, + { + "src": ["tag:client"], + "dst": ["tag:prod"], + "ip": ["5432"] + }, + { + "src": ["tag:client"], + "dst": ["tag:router"], + "ip": ["80"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -75,7 +87,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -188,8 +202,20 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.92.142.61", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::3e37:8e3d", "Ports": { "First": 80, "Last": 80 } } + { + "IP": "100.92.142.61", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::3e37:8e3d", + "Ports": { + "First": 80, + "Last": 80 + } + } ] } ], @@ -199,8 +225,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.92.142.61/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::3e37:8e3d/128", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "100.92.142.61/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::3e37:8e3d/128", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] } @@ -236,8 +274,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -247,7 +291,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -316,8 +364,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -327,7 +381,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -356,8 +414,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -367,7 +431,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -396,8 +464,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -407,7 +481,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -437,8 +515,20 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.103.8.15", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 5432, "Last": 5432 } } + { + "IP": "100.103.8.15", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ] } ], @@ -448,8 +538,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.103.8.15/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 5432, "Last": 5432 } } + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ], "Caps": [] } @@ -490,8 +592,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -501,7 +609,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -536,8 +648,20 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -547,8 +671,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -589,8 +725,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -600,7 +742,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14F.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14F.json index 798f21c4..d15c2b15 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14F.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14F.json @@ -44,8 +44,16 @@ ] }, "grants_section": [ - { "src": ["autogroup:tagged"], "dst": ["*"], "ip": ["*"] }, - { "src": ["autogroup:member"], "dst": ["*"], "ip": ["*"] } + { + "src": ["autogroup:tagged"], + "dst": ["*"], + "ip": ["*"] + }, + { + "src": ["autogroup:member"], + "dst": ["*"], + "ip": ["*"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -69,7 +77,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -147,7 +157,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] }, { "SrcIPs": [ @@ -158,7 +176,15 @@ "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::9e37:5a52" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -178,8 +204,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -195,8 +233,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -227,8 +277,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -239,7 +295,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -268,8 +328,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -279,7 +345,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -308,8 +378,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -319,7 +395,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -348,8 +428,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -359,7 +445,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -389,8 +479,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -399,7 +495,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -429,8 +529,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -473,8 +579,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -483,7 +595,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -508,7 +624,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] }, { "SrcIPs": [ @@ -519,7 +643,15 @@ "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::9e37:5a52" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -539,8 +671,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -556,8 +700,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -588,8 +744,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -599,7 +761,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -628,8 +794,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -639,7 +811,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -668,8 +844,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -679,7 +861,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -708,8 +894,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -719,7 +911,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -749,8 +945,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -759,7 +961,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -789,8 +995,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -833,8 +1045,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -843,7 +1061,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -868,7 +1090,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] }, { "SrcIPs": [ @@ -879,7 +1109,15 @@ "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::9e37:5a52" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -899,8 +1137,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -916,8 +1166,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -948,8 +1210,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -959,7 +1227,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -988,8 +1260,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1000,7 +1278,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1029,8 +1311,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1040,7 +1328,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1069,8 +1361,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1080,7 +1378,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1110,8 +1412,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1120,7 +1428,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1150,8 +1462,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1194,8 +1512,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1204,7 +1528,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1229,7 +1557,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] }, { "SrcIPs": [ @@ -1240,7 +1576,15 @@ "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::9e37:5a52" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1260,8 +1604,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -1277,8 +1633,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1309,8 +1677,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1320,7 +1694,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1349,8 +1727,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1361,7 +1745,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1390,8 +1778,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1401,7 +1795,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1430,8 +1828,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1441,7 +1845,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1471,8 +1879,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1481,7 +1895,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1511,8 +1929,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1555,8 +1979,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1565,7 +1995,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1590,7 +2024,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] }, { "SrcIPs": [ @@ -1601,7 +2043,15 @@ "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::9e37:5a52" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1621,8 +2071,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -1638,8 +2100,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1670,8 +2144,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1681,7 +2161,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1710,8 +2194,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1722,7 +2212,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1751,8 +2245,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1762,7 +2262,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1791,8 +2295,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1802,7 +2312,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1832,8 +2346,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1842,7 +2362,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1872,8 +2396,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1916,8 +2446,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1926,7 +2462,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1951,7 +2491,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] }, { "SrcIPs": [ @@ -1962,7 +2510,15 @@ "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::9e37:5a52" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1982,8 +2538,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -1999,8 +2567,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2031,8 +2611,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2042,7 +2628,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2071,8 +2661,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2083,7 +2679,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2112,8 +2712,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2123,7 +2729,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2152,8 +2762,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2163,7 +2779,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2192,8 +2812,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2203,7 +2829,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2233,8 +2863,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2277,8 +2913,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2287,7 +2929,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2312,7 +2958,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] }, { "SrcIPs": [ @@ -2323,7 +2977,15 @@ "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::9e37:5a52" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2343,8 +3005,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -2360,8 +3034,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2392,8 +3078,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2403,7 +3095,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2432,8 +3128,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2444,7 +3146,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2473,8 +3179,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2484,7 +3196,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2513,8 +3229,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2524,7 +3246,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2553,8 +3279,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2564,7 +3296,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2594,8 +3330,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2604,7 +3346,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2634,8 +3380,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2644,7 +3396,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2669,7 +3425,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] }, { "SrcIPs": [ @@ -2680,7 +3444,15 @@ "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::9e37:5a52" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2700,8 +3472,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] }, @@ -2717,8 +3501,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2749,8 +3545,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2760,7 +3562,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2789,8 +3595,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2801,7 +3613,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2830,8 +3646,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2841,7 +3663,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2870,8 +3696,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2881,7 +3713,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2910,8 +3746,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2921,7 +3763,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2951,8 +3797,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2961,7 +3813,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2991,8 +3847,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14G.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14G.json index 3550c540..9ee4b399 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14G.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14G.json @@ -44,8 +44,16 @@ ] }, "grants_section": [ - { "src": ["autogroup:member", "group:admins", "kratail2tid@passkey"], "dst": ["tag:server"], "ip": ["22"] }, - { "src": ["tag:server", "webserver", "100.108.74.26"], "dst": ["group:admins"], "ip": ["80"] } + { + "src": ["autogroup:member", "group:admins", "kratail2tid@passkey"], + "dst": ["tag:server"], + "ip": ["22"] + }, + { + "src": ["tag:server", "webserver", "100.108.74.26"], + "dst": ["group:admins"], + "ip": ["80"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -69,7 +77,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -324,8 +334,20 @@ "fd7a:115c:a1e0::9e37:5a52" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -342,8 +364,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -395,8 +429,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -405,7 +445,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -435,8 +479,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -479,8 +529,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -489,7 +545,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -548,8 +608,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -559,7 +625,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -628,8 +698,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -639,7 +715,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -664,8 +744,20 @@ { "SrcIPs": ["100.108.74.26", "fd7a:115c:a1e0::b901:4a87"], "DstPorts": [ - { "IP": "100.90.199.68", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 80, "Last": 80 } } + { + "IP": "100.90.199.68", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 80, + "Last": 80 + } + } ] } ], @@ -675,8 +767,20 @@ "Srcs": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.90.199.68/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] } @@ -727,8 +831,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -738,7 +848,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14H.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14H.json index 2d4154b1..9e6f5264 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14H.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14H.json @@ -44,8 +44,16 @@ ] }, "grants_section": [ - { "src": ["tag:client"], "dst": ["*"], "ip": ["*"] }, - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["22"] } + { + "src": ["tag:client"], + "dst": ["*"], + "ip": ["*"] + }, + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["22"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -69,7 +77,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -136,7 +146,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -145,8 +163,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -182,8 +212,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -193,7 +229,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -232,7 +272,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -241,8 +289,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -278,8 +338,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -289,7 +355,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -328,7 +398,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -337,8 +415,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -369,8 +459,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -380,7 +476,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -409,8 +509,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -421,7 +527,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -450,8 +560,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -461,7 +577,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -490,8 +610,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -501,7 +627,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -531,8 +661,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -541,7 +677,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -571,8 +711,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -615,8 +761,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -625,7 +777,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -639,7 +795,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -648,8 +812,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -690,8 +866,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -701,7 +883,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -736,9 +922,27 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "*", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -748,10 +952,34 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -792,8 +1020,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -803,7 +1037,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -837,7 +1075,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -846,8 +1092,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -888,8 +1146,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -899,7 +1163,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -933,7 +1201,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -942,8 +1218,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -984,8 +1272,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -995,7 +1289,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1029,7 +1327,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1038,8 +1344,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1080,8 +1398,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1091,7 +1415,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14I.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14I.json index 7560fa29..7a892023 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14I.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_14I.json @@ -49,9 +49,21 @@ ] }, "grants_section": [ - { "src": ["*"], "dst": ["tag:server"], "ip": ["22"] }, - { "src": ["*"], "dst": ["tag:prod"], "ip": ["5432"] }, - { "src": ["*"], "dst": ["*"], "ip": ["80"] } + { + "src": ["*"], + "dst": ["tag:server"], + "ip": ["22"] + }, + { + "src": ["*"], + "dst": ["tag:prod"], + "ip": ["5432"] + }, + { + "src": ["*"], + "dst": ["*"], + "ip": ["80"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -75,7 +87,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -147,7 +161,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 80, "Last": 80 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 80, + "Last": 80 + } + } + ] } ], "packet_filter_matches": [ @@ -172,8 +194,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "::/0", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] } @@ -204,8 +238,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -216,7 +256,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -245,8 +289,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -256,7 +306,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -285,8 +339,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -296,7 +356,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -325,8 +389,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -336,7 +406,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -366,8 +440,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -376,7 +456,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -406,8 +490,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -450,8 +540,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -460,7 +556,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -479,7 +579,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 80, "Last": 80 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 80, + "Last": 80 + } + } + ] } ], "packet_filter_matches": [ @@ -504,8 +612,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "::/0", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] } @@ -536,8 +656,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -547,7 +673,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -576,8 +706,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -587,7 +723,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -616,8 +756,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -627,7 +773,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -656,8 +806,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -667,7 +823,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -697,8 +857,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -707,7 +873,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -737,8 +907,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -781,8 +957,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -791,7 +973,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -810,7 +996,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 80, "Last": 80 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 80, + "Last": 80 + } + } + ] } ], "packet_filter_matches": [ @@ -835,8 +1029,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "::/0", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] } @@ -867,8 +1073,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -878,7 +1090,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -907,8 +1123,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -919,7 +1141,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -948,8 +1174,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -959,7 +1191,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -988,8 +1224,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -999,7 +1241,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1029,8 +1275,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1039,7 +1291,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1069,8 +1325,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1113,8 +1375,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1123,7 +1391,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1143,9 +1415,27 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.103.8.15", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "*", "Ports": { "First": 80, "Last": 80 } } + { + "IP": "100.103.8.15", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "*", + "Ports": { + "First": 80, + "Last": 80 + } + } ] } ], @@ -1171,10 +1461,34 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.103.8.15/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "0.0.0.0/0", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "::/0", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] } @@ -1205,8 +1519,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1216,7 +1536,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1245,8 +1569,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1257,7 +1587,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1286,8 +1620,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1297,7 +1637,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1326,8 +1670,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1337,7 +1687,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1367,8 +1721,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1377,7 +1737,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1407,8 +1771,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1451,8 +1821,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1461,7 +1837,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1481,9 +1861,27 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "*", "Ports": { "First": 80, "Last": 80 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "*", + "Ports": { + "First": 80, + "Last": 80 + } + } ] } ], @@ -1509,10 +1907,34 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "0.0.0.0/0", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "::/0", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] } @@ -1543,8 +1965,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1554,7 +1982,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1583,8 +2015,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1595,7 +2033,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1624,8 +2066,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1635,7 +2083,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1664,8 +2116,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1675,7 +2133,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1705,8 +2167,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1715,7 +2183,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1745,8 +2217,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1789,8 +2267,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1799,7 +2283,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1818,7 +2306,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 80, "Last": 80 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 80, + "Last": 80 + } + } + ] } ], "packet_filter_matches": [ @@ -1843,8 +2339,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "::/0", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] } @@ -1875,8 +2383,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1886,7 +2400,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1915,8 +2433,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1927,7 +2451,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1956,8 +2484,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1967,7 +2501,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1996,8 +2534,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2007,7 +2551,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2036,8 +2584,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2047,7 +2601,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2077,8 +2635,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2121,8 +2685,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2131,7 +2701,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2150,7 +2724,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 80, "Last": 80 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 80, + "Last": 80 + } + } + ] } ], "packet_filter_matches": [ @@ -2175,8 +2757,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "::/0", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] } @@ -2207,8 +2801,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2218,7 +2818,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2247,8 +2851,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2259,7 +2869,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2288,8 +2902,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2299,7 +2919,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2328,8 +2952,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2339,7 +2969,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2368,8 +3002,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2379,7 +3019,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2409,8 +3053,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2419,7 +3069,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2449,8 +3103,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2459,7 +3119,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2478,7 +3142,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 80, "Last": 80 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 80, + "Last": 80 + } + } + ] } ], "packet_filter_matches": [ @@ -2503,8 +3175,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "::/0", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] } @@ -2535,8 +3219,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2546,7 +3236,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2575,8 +3269,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2587,7 +3287,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2616,8 +3320,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2627,7 +3337,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2656,8 +3370,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2667,7 +3387,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2696,8 +3420,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2707,7 +3437,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2737,8 +3471,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2747,7 +3487,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2777,8 +3521,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_1A.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_1A.json index 45014008..3f81a47a 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_1A.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_1A.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["autogroup:member", "tag:client"], "dst": ["tag:server"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["autogroup:member", "tag:client"], + "dst": ["tag:server"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -258,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -269,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -353,8 +371,20 @@ "fd7a:115c:a1e0::c537:c845" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -373,8 +403,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -415,8 +457,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -426,7 +474,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -461,8 +513,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -471,7 +529,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -501,8 +563,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -545,8 +613,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -555,7 +629,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -614,8 +692,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -625,7 +709,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -694,8 +782,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -705,7 +799,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -774,8 +872,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -785,7 +889,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_1B.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_1B.json index 9c05bffc..8036ad2b 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_1B.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_1B.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["autogroup:tagged", "autogroup:member"], "dst": ["tag:server"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["autogroup:tagged", "autogroup:member"], + "dst": ["tag:server"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -168,8 +176,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -179,7 +193,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -248,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -259,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -328,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -339,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -408,8 +446,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -419,7 +463,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -466,8 +514,20 @@ "fd7a:115c:a1e0::c537:c845" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -494,8 +554,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -526,8 +598,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -537,7 +615,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -566,8 +648,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -577,7 +665,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -606,8 +698,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -617,7 +715,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -646,8 +748,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -657,7 +765,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -687,8 +799,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -697,7 +815,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -727,8 +849,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -771,8 +899,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -781,7 +915,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -840,8 +978,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -851,7 +995,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -920,8 +1068,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -931,7 +1085,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1000,8 +1158,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1011,7 +1175,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_1C.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_1C.json index ba657c21..9f3f4715 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_1C.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_1C.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["group:admins", "tag:client"], "dst": ["tag:server"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["group:admins", "tag:client"], + "dst": ["tag:server"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -258,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -269,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -344,8 +362,20 @@ { "SrcIPs": ["100.83.200.69", "100.90.199.68", "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -360,8 +390,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -402,8 +444,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -413,7 +461,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -458,8 +510,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -468,7 +526,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -617,8 +679,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -628,7 +696,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_1D.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_1D.json index 523d66e0..38aa290e 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_1D.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_1D.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["kratail2tid@passkey", "tag:client"], "dst": ["tag:server"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["kratail2tid@passkey", "tag:client"], + "dst": ["tag:server"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -258,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -269,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -344,8 +362,20 @@ { "SrcIPs": ["100.83.200.69", "100.90.199.68", "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -360,8 +390,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -402,8 +444,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -413,7 +461,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -458,8 +510,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -468,7 +526,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -617,8 +679,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -628,7 +696,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_1E.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_1E.json index 44d6125a..fc9f43d7 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_1E.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_1E.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["100.90.199.68", "tag:client"], "dst": ["tag:server"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["100.90.199.68", "tag:client"], + "dst": ["tag:server"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -258,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -269,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -344,8 +362,20 @@ { "SrcIPs": ["100.83.200.69", "100.90.199.68", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -355,8 +385,20 @@ "Srcs": ["100.83.200.69/32", "100.90.199.68/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -397,8 +439,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -408,7 +456,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -453,8 +505,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -463,7 +521,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -612,8 +674,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -623,7 +691,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_2A_CORRECT.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_2A_CORRECT.json index aadffe4b..9f654e76 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_2A_CORRECT.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_2A_CORRECT.json @@ -44,8 +44,16 @@ ] }, "grants_section": [ - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["22"] }, - { "src": ["tag:client"], "dst": ["tag:prod"], "ip": ["5432"] } + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["22"] + }, + { + "src": ["tag:client"], + "dst": ["tag:prod"], + "ip": ["5432"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -69,7 +77,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -261,8 +271,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -272,7 +288,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -301,8 +321,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -312,7 +338,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -342,8 +372,20 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.103.8.15", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 5432, "Last": 5432 } } + { + "IP": "100.103.8.15", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ] } ], @@ -353,8 +395,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.103.8.15/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 5432, "Last": 5432 } } + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ], "Caps": [] } @@ -395,8 +449,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -406,7 +466,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -441,8 +505,20 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -452,8 +528,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -494,8 +582,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -505,7 +599,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_2A_NAIVE.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_2A_NAIVE.json index 7f71c466..11ae75a1 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_2A_NAIVE.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_2A_NAIVE.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["tag:client"], "dst": ["tag:server", "tag:prod"], "ip": ["22", "5432"] }], + "grants_section": [ + { + "src": ["tag:client"], + "dst": ["tag:server", "tag:prod"], + "ip": ["22", "5432"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -253,8 +261,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -264,7 +278,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -293,8 +311,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -304,7 +328,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -334,10 +362,34 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.103.8.15", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.103.8.15", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 5432, "Last": 5432 } } + { + "IP": "100.103.8.15", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ] } ], @@ -347,10 +399,34 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.103.8.15/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 5432, "Last": 5432 } } + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ], "Caps": [] } @@ -391,8 +467,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -402,7 +484,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -437,10 +523,34 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 5432, "Last": 5432 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ] } ], @@ -450,10 +560,34 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 5432, "Last": 5432 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ], "Caps": [] } @@ -494,8 +628,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -505,7 +645,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_2B_CORRECT.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_2B_CORRECT.json index 688b02fe..fa1e143c 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_2B_CORRECT.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_2B_CORRECT.json @@ -44,8 +44,16 @@ ] }, "grants_section": [ - { "src": ["tag:client"], "dst": ["tag:server"], "ip": ["22"] }, - { "src": ["tag:client"], "dst": ["webserver"], "ip": ["80"] } + { + "src": ["tag:client"], + "dst": ["tag:server"], + "ip": ["22"] + }, + { + "src": ["tag:client"], + "dst": ["webserver"], + "ip": ["80"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -69,7 +77,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -266,8 +276,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -277,7 +293,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -352,9 +372,27 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + } ] } ], @@ -364,9 +402,27 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] } @@ -407,8 +463,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -418,7 +480,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_2B_NAIVE.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_2B_NAIVE.json index 6c565dce..ebbe1c1f 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_2B_NAIVE.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_2B_NAIVE.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["tag:client"], "dst": ["tag:server", "webserver"], "ip": ["22", "80"] }], + "grants_section": [ + { + "src": ["tag:client"], + "dst": ["tag:server", "webserver"], + "ip": ["22", "80"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -258,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -269,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -344,12 +362,48 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + } ] } ], @@ -359,12 +413,48 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] } @@ -405,8 +495,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -416,7 +512,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_2C.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_2C.json index 0035b078..04925427 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_2C.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_2C.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["tag:client"], "dst": ["webserver", "prodbox"], "ip": ["22", "5432"] }], + "grants_section": [ + { + "src": ["tag:client"], + "dst": ["webserver", "prodbox"], + "ip": ["22", "5432"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -253,8 +261,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -264,7 +278,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -293,8 +311,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -304,7 +328,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -334,8 +362,20 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.103.8.15", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.103.8.15", "Ports": { "First": 5432, "Last": 5432 } } + { + "IP": "100.103.8.15", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ] } ], @@ -345,8 +385,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.103.8.15/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 5432, "Last": 5432 } } + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ], "Caps": [] } @@ -387,8 +439,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -398,7 +456,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -433,8 +495,20 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 5432, "Last": 5432 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ] } ], @@ -444,8 +518,20 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 5432, "Last": 5432 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ], "Caps": [] } @@ -486,8 +572,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -497,7 +589,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_3A.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_3A.json index 5486d107..ec43dbb7 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_3A.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_3A.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["tag:server", "webserver"], "dst": ["tag:client"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["tag:server", "webserver"], + "dst": ["tag:client"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -219,8 +227,20 @@ { "SrcIPs": ["100.108.74.26", "fd7a:115c:a1e0::b901:4a87"], "DstPorts": [ - { "IP": "100.83.200.69", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::c537:c845", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.83.200.69", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::c537:c845", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -230,8 +250,20 @@ "Srcs": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.83.200.69/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::c537:c845/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.83.200.69/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::c537:c845/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -277,8 +309,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -288,7 +326,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -397,8 +439,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -408,7 +456,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_3B.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_3B.json index 236c21c8..99fe507f 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_3B.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_3B.json @@ -39,7 +39,11 @@ ] }, "grants_section": [ - { "src": ["autogroup:member", "kratail2tid@passkey", "group:admins"], "dst": ["tag:server"], "ip": ["22"] } + { + "src": ["autogroup:member", "kratail2tid@passkey", "group:admins"], + "dst": ["tag:server"], + "ip": ["22"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -63,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -318,8 +324,20 @@ "fd7a:115c:a1e0::9e37:5a52" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -336,8 +354,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -389,8 +419,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -399,7 +435,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -429,8 +469,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -473,8 +519,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -483,7 +535,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -542,8 +598,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -553,7 +615,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -622,8 +688,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -633,7 +705,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -702,8 +778,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -713,7 +795,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_3C.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_3C.json index 0aedd135..3abc2559 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_3C.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_3C.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["tag:client"], "dst": ["tag:server", "webserver"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["tag:client"], + "dst": ["tag:server", "webserver"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -258,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -269,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -344,9 +362,27 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -356,9 +392,27 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -399,8 +453,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -410,7 +470,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4A.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4A.json index d25f2c62..d233145f 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4A.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4A.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["autogroup:member"], "dst": ["tag:server"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["autogroup:member"], + "dst": ["tag:server"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -316,8 +324,20 @@ "fd7a:115c:a1e0::9e37:5a52" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -334,8 +354,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -387,8 +419,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -397,7 +435,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -427,8 +469,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -471,8 +519,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -481,7 +535,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -540,8 +598,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -551,7 +615,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -620,8 +688,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -631,7 +705,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -700,8 +778,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -711,7 +795,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4B.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4B.json index cc4c34c9..3268d4b5 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4B.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4B.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["autogroup:tagged"], "dst": ["kratail2tid@passkey"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["autogroup:tagged"], + "dst": ["kratail2tid@passkey"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -184,8 +192,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -194,7 +208,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -264,8 +282,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -274,7 +298,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -344,8 +372,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -354,7 +388,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -424,8 +462,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -434,7 +478,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -504,8 +552,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -514,7 +568,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -630,8 +688,20 @@ "fd7a:115c:a1e0::c537:c845" ], "DstPorts": [ - { "IP": "100.90.199.68", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.90.199.68", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -652,8 +722,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.90.199.68/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -684,8 +766,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -695,7 +783,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -724,8 +816,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -735,7 +833,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -764,8 +866,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -775,7 +883,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -804,8 +916,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -815,7 +933,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -844,8 +966,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -855,7 +983,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4C.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4C.json index a230baee..df9f2cc1 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4C.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4C.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["group:admins"], "dst": ["webserver"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["group:admins"], + "dst": ["webserver"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -308,7 +316,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], - "DstPorts": [{ "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }] + "DstPorts": [ + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + } + ] } ], "packet_filter_matches": [ @@ -316,7 +332,15 @@ "IPProto": [6, 17, 1, 58], "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, - "Dsts": [{ "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }], + "Dsts": [ + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + } + ], "Caps": [] } ], @@ -377,8 +401,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -387,7 +417,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -536,8 +570,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -547,7 +587,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4D.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4D.json index 3a0b2586..3800b23c 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4D.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4D.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["webserver"], "dst": ["group:admins"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["webserver"], + "dst": ["group:admins"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -364,8 +372,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -374,7 +388,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -479,8 +497,20 @@ { "SrcIPs": ["100.108.74.26"], "DstPorts": [ - { "IP": "100.90.199.68", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.90.199.68", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -490,8 +520,20 @@ "Srcs": ["100.108.74.26/32"], "SrcCaps": null, "Dsts": [ - { "Net": "100.90.199.68/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -542,8 +584,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -553,7 +601,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4E.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4E.json index 96984e95..324cc166 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4E.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4E.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["autogroup:member"], "dst": ["autogroup:self"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["autogroup:member"], + "dst": ["autogroup:self"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -354,8 +362,20 @@ { "SrcIPs": ["100.110.121.96", "fd7a:115c:a1e0::1737:7960"], "DstPorts": [ - { "IP": "100.110.121.96", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::1737:7960", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.110.121.96", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::1737:7960", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -365,8 +385,20 @@ "Srcs": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.110.121.96/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::1737:7960/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.110.121.96/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::1737:7960/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -418,8 +450,20 @@ { "SrcIPs": ["100.103.90.82", "fd7a:115c:a1e0::9e37:5a52"], "DstPorts": [ - { "IP": "100.103.90.82", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::9e37:5a52", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.103.90.82", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::9e37:5a52", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -429,8 +473,20 @@ "Srcs": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.103.90.82/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::9e37:5a52/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.103.90.82/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::9e37:5a52/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -482,8 +538,20 @@ { "SrcIPs": ["100.90.199.68", "fd7a:115c:a1e0::2d01:c747"], "DstPorts": [ - { "IP": "100.90.199.68", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.90.199.68", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -493,8 +561,20 @@ "Srcs": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.90.199.68/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4F.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4F.json index 1c3f4f46..9821d6dc 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4F.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4F.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["100.90.199.68"], "dst": ["tag:server"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["100.90.199.68"], + "dst": ["tag:server"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -309,8 +317,20 @@ { "SrcIPs": ["100.90.199.68"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -320,8 +340,20 @@ "Srcs": ["100.90.199.68/32"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -383,8 +415,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -393,7 +431,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -542,8 +584,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -553,7 +601,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4G.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4G.json index 24c6cc74..0412bec6 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4G.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_4G.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["tag:client"], "dst": ["100.108.74.26"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["tag:client"], + "dst": ["100.108.74.26"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -258,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -269,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -343,7 +361,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], - "DstPorts": [{ "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }] + "DstPorts": [ + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + } + ] } ], "packet_filter_matches": [ @@ -351,7 +377,15 @@ "IPProto": [6, 17, 1, 58], "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, - "Dsts": [{ "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }], + "Dsts": [ + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + } + ], "Caps": [] } ], @@ -391,8 +425,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -402,7 +442,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_5A.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_5A.json index eaf9ae24..ffb9160a 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_5A.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_5A.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["tag:client", "tag:prod"], "dst": ["tag:server"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["tag:client", "tag:prod"], + "dst": ["tag:server"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -258,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -269,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -338,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -349,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -379,8 +407,20 @@ { "SrcIPs": ["100.103.8.15", "100.83.200.69", "fd7a:115c:a1e0::5b37:80f", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -395,8 +435,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -437,8 +489,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -448,7 +506,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -477,8 +539,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -488,7 +556,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_5B.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_5B.json index 198db612..472ca412 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_5B.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_5B.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["tag:prod", "tag:client"], "dst": ["tag:server"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["tag:prod", "tag:client"], + "dst": ["tag:server"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -258,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -269,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -338,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -349,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -379,8 +407,20 @@ { "SrcIPs": ["100.103.8.15", "100.83.200.69", "fd7a:115c:a1e0::5b37:80f", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -395,8 +435,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -437,8 +489,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -448,7 +506,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -477,8 +539,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -488,7 +556,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_5C_NAIVE.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_5C_NAIVE.json index 5a3f357d..91ba3fef 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_5C_NAIVE.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_5C_NAIVE.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["tag:client"], "dst": ["tag:server", "tag:prod"], "ip": ["22", "80"] }], + "grants_section": [ + { + "src": ["tag:client"], + "dst": ["tag:server", "tag:prod"], + "ip": ["22", "80"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -253,8 +261,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -264,7 +278,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -293,8 +311,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -304,7 +328,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -334,10 +362,34 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.103.8.15", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.103.8.15", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 80, "Last": 80 } } + { + "IP": "100.103.8.15", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 80, + "Last": 80 + } + } ] } ], @@ -347,10 +399,34 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.103.8.15/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] } @@ -391,8 +467,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -402,7 +484,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -437,10 +523,34 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 80 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 80 + } + } ] } ], @@ -450,10 +560,34 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] } @@ -494,8 +628,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -505,7 +645,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_6A.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_6A.json index 72936b58..46db3802 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_6A.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_6A.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["webserver", "prodbox"], "ip": ["22", "5432"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["webserver", "prodbox"], + "ip": ["22", "5432"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -163,8 +171,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -174,7 +188,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -203,8 +221,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -214,7 +238,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -278,8 +306,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -289,7 +323,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -318,8 +356,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -329,7 +373,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -393,8 +441,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -404,7 +458,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -433,8 +491,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -444,7 +508,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -479,8 +547,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.103.8.15", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.103.8.15", "Ports": { "First": 5432, "Last": 5432 } } + { + "IP": "100.103.8.15", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ] } ], @@ -506,8 +586,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.103.8.15/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 5432, "Last": 5432 } } + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ], "Caps": [] } @@ -538,8 +630,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -549,7 +647,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -578,8 +680,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -590,7 +698,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -619,8 +731,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -630,7 +748,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -659,8 +781,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -670,7 +798,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -700,8 +832,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -710,7 +848,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -740,8 +882,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -784,8 +932,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -794,7 +948,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -814,8 +972,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 5432, "Last": 5432 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ] } ], @@ -841,8 +1011,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 5432, "Last": 5432 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + } ], "Caps": [] } @@ -873,8 +1055,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -884,7 +1072,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -913,8 +1105,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -925,7 +1123,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -954,8 +1156,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -965,7 +1173,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -994,8 +1206,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1005,7 +1223,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1035,8 +1257,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1045,7 +1273,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1075,8 +1307,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1119,8 +1357,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1129,7 +1373,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1183,8 +1431,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1194,7 +1448,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1223,8 +1481,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1234,7 +1498,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1298,8 +1566,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1309,7 +1583,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1338,8 +1616,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1349,7 +1633,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1413,8 +1701,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1424,7 +1718,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1453,8 +1751,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1464,7 +1768,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_6B.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_6B.json index ca684d3d..44ca7696 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_6B.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_6B.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["group:empty"], "dst": ["tag:server"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["group:empty"], + "dst": ["tag:server"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_6C.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_6C.json index 4784e40a..99f8de51 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_6C.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_6C.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["internal"], "dst": ["tag:server"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["internal"], + "dst": ["tag:server"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -213,8 +221,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -224,7 +238,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -344,8 +362,20 @@ { "SrcIPs": ["10.0.0.0/8"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -355,8 +385,20 @@ "Srcs": ["10.0.0.0/8"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -392,8 +434,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -404,7 +452,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_6D.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_6D.json index 95ed4d02..a1b8cd3c 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_6D.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_6D.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["tag:client"], "dst": ["internal"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["tag:client"], + "dst": ["internal"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -173,7 +181,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], - "DstPorts": [{ "IP": "10.0.0.0/8", "Ports": { "First": 22, "Last": 22 } }] + "DstPorts": [ + { + "IP": "10.0.0.0/8", + "Ports": { + "First": 22, + "Last": 22 + } + } + ] } ], "packet_filter_matches": [ @@ -181,7 +197,15 @@ "IPProto": [6, 17, 1, 58], "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, - "Dsts": [{ "Net": "10.0.0.0/8", "Ports": { "First": 22, "Last": 22 } }], + "Dsts": [ + { + "Net": "10.0.0.0/8", + "Ports": { + "First": 22, + "Last": 22 + } + } + ], "Caps": [] } ], @@ -216,8 +240,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -227,7 +257,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -296,8 +330,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -308,7 +348,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_7A.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_7A.json index 2dfe44a0..65de3f4e 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_7A.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_7A.json @@ -83,7 +83,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -190,8 +192,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -201,7 +209,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -270,8 +282,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -281,7 +299,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -350,8 +372,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -361,7 +389,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -430,8 +462,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -441,7 +479,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -492,8 +534,20 @@ "fd7a:115c:a1e0::c537:c845" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -535,8 +589,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -567,8 +633,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -578,7 +650,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -607,8 +683,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -619,7 +701,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -648,8 +734,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -659,7 +751,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -688,8 +784,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -699,7 +801,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -729,8 +835,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -739,7 +851,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -769,8 +885,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -813,8 +935,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -823,7 +951,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -882,8 +1014,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -893,7 +1031,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -962,8 +1104,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -973,7 +1121,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1042,8 +1194,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1053,7 +1211,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_7B_NAIVE.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_7B_NAIVE.json index d92c607e..e4a7e26d 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_7B_NAIVE.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_7B_NAIVE.json @@ -83,7 +83,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -275,8 +277,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -286,7 +294,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -315,8 +327,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -326,7 +344,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -366,8 +388,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -376,7 +404,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -391,27 +423,153 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.103.8.15", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.103.8.15", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "100.103.8.15", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.103.8.15", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "100.103.8.15", "Ports": { "First": 8080, "Last": 8080 } }, - { "IP": "100.103.8.15", "Ports": { "First": 3000, "Last": 3000 } }, - { "IP": "100.103.8.15", "Ports": { "First": 9000, "Last": 9000 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 8080, "Last": 8080 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 3000, "Last": 3000 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 9000, "Last": 9000 } }, - { "IP": "100.103.8.15", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.103.8.15", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "100.103.8.15", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.103.8.15", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "100.103.8.15", "Ports": { "First": 8080, "Last": 8080 } }, - { "IP": "100.103.8.15", "Ports": { "First": 3000, "Last": 3000 } }, - { "IP": "100.103.8.15", "Ports": { "First": 9000, "Last": 9000 } } + { + "IP": "100.103.8.15", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 3000, + "Last": 3000 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 9000, + "Last": 9000 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 3000, + "Last": 3000 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 9000, + "Last": 9000 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 3000, + "Last": 3000 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 9000, + "Last": 9000 + } + } ] } ], @@ -421,27 +579,153 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.103.8.15/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 8080, "Last": 8080 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 3000, "Last": 3000 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 9000, "Last": 9000 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 8080, "Last": 8080 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 3000, "Last": 3000 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 9000, "Last": 9000 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 8080, "Last": 8080 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 3000, "Last": 3000 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 9000, "Last": 9000 } } + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 3000, + "Last": 3000 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 9000, + "Last": 9000 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 3000, + "Last": 3000 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 9000, + "Last": 9000 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 3000, + "Last": 3000 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 9000, + "Last": 9000 + } + } ], "Caps": [] } @@ -482,8 +766,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -493,7 +783,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -528,34 +822,202 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.108.74.26", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "100.108.74.26", "Ports": { "First": 8080, "Last": 8080 } }, - { "IP": "100.108.74.26", "Ports": { "First": 3000, "Last": 3000 } }, - { "IP": "100.108.74.26", "Ports": { "First": 9000, "Last": 9000 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 8080, "Last": 8080 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 3000, "Last": 3000 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 9000, "Last": 9000 } }, - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.108.74.26", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "100.108.74.26", "Ports": { "First": 8080, "Last": 8080 } }, - { "IP": "100.108.74.26", "Ports": { "First": 3000, "Last": 3000 } }, - { "IP": "100.108.74.26", "Ports": { "First": 9000, "Last": 9000 } }, - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.108.74.26", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "100.108.74.26", "Ports": { "First": 8080, "Last": 8080 } }, - { "IP": "100.108.74.26", "Ports": { "First": 3000, "Last": 3000 } }, - { "IP": "100.108.74.26", "Ports": { "First": 9000, "Last": 9000 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 3000, + "Last": 3000 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 9000, + "Last": 9000 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 3000, + "Last": 3000 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 9000, + "Last": 9000 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 3000, + "Last": 3000 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 9000, + "Last": 9000 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 3000, + "Last": 3000 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 9000, + "Last": 9000 + } + } ] } ], @@ -565,34 +1027,202 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 8080, "Last": 8080 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 3000, "Last": 3000 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 9000, "Last": 9000 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 8080, "Last": 8080 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 3000, "Last": 3000 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 9000, "Last": 9000 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 8080, "Last": 8080 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 3000, "Last": 3000 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 9000, "Last": 9000 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 8080, "Last": 8080 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 3000, "Last": 3000 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 9000, "Last": 9000 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 3000, + "Last": 3000 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 9000, + "Last": 9000 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 3000, + "Last": 3000 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 9000, + "Last": 9000 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 3000, + "Last": 3000 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 9000, + "Last": 9000 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 3000, + "Last": 3000 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 9000, + "Last": 9000 + } + } ], "Caps": [] } @@ -633,8 +1263,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -644,7 +1280,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -769,34 +1409,202 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.90.199.68", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.90.199.68", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "100.90.199.68", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.90.199.68", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "100.90.199.68", "Ports": { "First": 8080, "Last": 8080 } }, - { "IP": "100.90.199.68", "Ports": { "First": 3000, "Last": 3000 } }, - { "IP": "100.90.199.68", "Ports": { "First": 9000, "Last": 9000 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 8080, "Last": 8080 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 3000, "Last": 3000 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 9000, "Last": 9000 } }, - { "IP": "100.90.199.68", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.90.199.68", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "100.90.199.68", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.90.199.68", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "100.90.199.68", "Ports": { "First": 8080, "Last": 8080 } }, - { "IP": "100.90.199.68", "Ports": { "First": 3000, "Last": 3000 } }, - { "IP": "100.90.199.68", "Ports": { "First": 9000, "Last": 9000 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 8080, "Last": 8080 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 3000, "Last": 3000 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 9000, "Last": 9000 } } + { + "IP": "100.90.199.68", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.90.199.68", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "100.90.199.68", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.90.199.68", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "100.90.199.68", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "IP": "100.90.199.68", + "Ports": { + "First": 3000, + "Last": 3000 + } + }, + { + "IP": "100.90.199.68", + "Ports": { + "First": 9000, + "Last": 9000 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 3000, + "Last": 3000 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 9000, + "Last": 9000 + } + }, + { + "IP": "100.90.199.68", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.90.199.68", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "100.90.199.68", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.90.199.68", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "100.90.199.68", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "IP": "100.90.199.68", + "Ports": { + "First": 3000, + "Last": 3000 + } + }, + { + "IP": "100.90.199.68", + "Ports": { + "First": 9000, + "Last": 9000 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 3000, + "Last": 3000 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 9000, + "Last": 9000 + } + } ] } ], @@ -806,34 +1614,202 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.90.199.68/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.90.199.68/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "100.90.199.68/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.90.199.68/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "100.90.199.68/32", "Ports": { "First": 8080, "Last": 8080 } }, - { "Net": "100.90.199.68/32", "Ports": { "First": 3000, "Last": 3000 } }, - { "Net": "100.90.199.68/32", "Ports": { "First": 9000, "Last": 9000 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 8080, "Last": 8080 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 3000, "Last": 3000 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 9000, "Last": 9000 } }, - { "Net": "100.90.199.68/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.90.199.68/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "100.90.199.68/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.90.199.68/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "100.90.199.68/32", "Ports": { "First": 8080, "Last": 8080 } }, - { "Net": "100.90.199.68/32", "Ports": { "First": 3000, "Last": 3000 } }, - { "Net": "100.90.199.68/32", "Ports": { "First": 9000, "Last": 9000 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 8080, "Last": 8080 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 3000, "Last": 3000 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 9000, "Last": 9000 } } + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 3000, + "Last": 3000 + } + }, + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 9000, + "Last": 9000 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 3000, + "Last": 3000 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 9000, + "Last": 9000 + } + }, + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 3000, + "Last": 3000 + } + }, + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 9000, + "Last": 9000 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 3000, + "Last": 3000 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 9000, + "Last": 9000 + } + } ], "Caps": [] } @@ -874,8 +1850,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -885,7 +1867,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_7C.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_7C.json index ec8886b6..4296bfb7 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_7C.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_7C.json @@ -89,7 +89,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -173,7 +175,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -199,8 +209,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -231,8 +253,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -243,7 +271,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -272,8 +304,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -283,7 +321,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -312,8 +354,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -323,7 +371,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -352,8 +404,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -363,7 +421,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -393,8 +455,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -403,7 +471,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -433,8 +505,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -477,8 +555,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -487,7 +571,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -518,7 +606,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -544,8 +640,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -576,8 +684,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -587,7 +701,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -616,8 +734,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -627,7 +751,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -656,8 +784,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -667,7 +801,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -696,8 +834,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -707,7 +851,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -737,8 +885,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -747,7 +901,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -777,8 +935,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -821,8 +985,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -831,7 +1001,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -862,7 +1036,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -888,8 +1070,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -920,8 +1114,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -931,7 +1131,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -960,8 +1164,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -972,7 +1182,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1001,8 +1215,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1012,7 +1232,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1041,8 +1265,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1052,7 +1282,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1082,8 +1316,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1092,7 +1332,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1122,8 +1366,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1166,8 +1416,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1176,7 +1432,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1207,7 +1467,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1233,8 +1501,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1265,8 +1545,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1276,7 +1562,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1305,8 +1595,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1317,7 +1613,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1346,8 +1646,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1357,7 +1663,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1386,8 +1696,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1397,7 +1713,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1427,8 +1747,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1437,7 +1763,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1467,8 +1797,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1511,8 +1847,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1521,7 +1863,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1552,7 +1898,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1578,8 +1932,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1610,8 +1976,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1621,7 +1993,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1650,8 +2026,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1662,7 +2044,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1691,8 +2077,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1702,7 +2094,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1731,8 +2127,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1742,7 +2144,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1772,8 +2178,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1782,7 +2194,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1812,8 +2228,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1856,8 +2278,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1866,7 +2294,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1897,7 +2329,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1923,8 +2363,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1955,8 +2407,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1966,7 +2424,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1995,8 +2457,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2007,7 +2475,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2036,8 +2508,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2047,7 +2525,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2076,8 +2558,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2087,7 +2575,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2116,8 +2608,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2127,7 +2625,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2157,8 +2659,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2201,8 +2709,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2211,7 +2725,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2242,7 +2760,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2268,8 +2794,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2300,8 +2838,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2311,7 +2855,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2340,8 +2888,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2352,7 +2906,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2381,8 +2939,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2392,7 +2956,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2421,8 +2989,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2432,7 +3006,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2461,8 +3039,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2472,7 +3056,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2502,8 +3090,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2512,7 +3106,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2542,8 +3140,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2552,7 +3156,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2583,7 +3191,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2609,8 +3225,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2641,8 +3269,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2652,7 +3286,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2681,8 +3319,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2693,7 +3337,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2722,8 +3370,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2733,7 +3387,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2762,8 +3420,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2773,7 +3437,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2802,8 +3470,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2813,7 +3487,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2843,8 +3521,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2853,7 +3537,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2883,8 +3571,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_7D_NAIVE.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_7D_NAIVE.json index 47dc94cf..ad806cdc 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_7D_NAIVE.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_7D_NAIVE.json @@ -67,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -159,8 +161,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -170,7 +178,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -199,8 +211,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -210,7 +228,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -239,8 +261,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -250,7 +278,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -279,8 +311,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -290,7 +328,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -325,18 +367,90 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.92.142.61", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.92.142.61", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.92.142.61", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "100.92.142.61", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "100.92.142.61", "Ports": { "First": 3306, "Last": 3306 } }, - { "IP": "100.92.142.61", "Ports": { "First": 8080, "Last": 8080 } }, - { "IP": "fd7a:115c:a1e0::3e37:8e3d", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::3e37:8e3d", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::3e37:8e3d", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::3e37:8e3d", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "fd7a:115c:a1e0::3e37:8e3d", "Ports": { "First": 3306, "Last": 3306 } }, - { "IP": "fd7a:115c:a1e0::3e37:8e3d", "Ports": { "First": 8080, "Last": 8080 } } + { + "IP": "100.92.142.61", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.92.142.61", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.92.142.61", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "100.92.142.61", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "100.92.142.61", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "IP": "100.92.142.61", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "IP": "fd7a:115c:a1e0::3e37:8e3d", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::3e37:8e3d", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::3e37:8e3d", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::3e37:8e3d", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "fd7a:115c:a1e0::3e37:8e3d", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "IP": "fd7a:115c:a1e0::3e37:8e3d", + "Ports": { + "First": 8080, + "Last": 8080 + } + } ] } ], @@ -362,18 +476,90 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.92.142.61/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.92.142.61/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.92.142.61/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "100.92.142.61/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "100.92.142.61/32", "Ports": { "First": 3306, "Last": 3306 } }, - { "Net": "100.92.142.61/32", "Ports": { "First": 8080, "Last": 8080 } }, - { "Net": "fd7a:115c:a1e0::3e37:8e3d/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::3e37:8e3d/128", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::3e37:8e3d/128", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::3e37:8e3d/128", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "fd7a:115c:a1e0::3e37:8e3d/128", "Ports": { "First": 3306, "Last": 3306 } }, - { "Net": "fd7a:115c:a1e0::3e37:8e3d/128", "Ports": { "First": 8080, "Last": 8080 } } + { + "Net": "100.92.142.61/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.92.142.61/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.92.142.61/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "100.92.142.61/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "100.92.142.61/32", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "Net": "100.92.142.61/32", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "Net": "fd7a:115c:a1e0::3e37:8e3d/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::3e37:8e3d/128", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::3e37:8e3d/128", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::3e37:8e3d/128", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "fd7a:115c:a1e0::3e37:8e3d/128", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "Net": "fd7a:115c:a1e0::3e37:8e3d/128", + "Ports": { + "First": 8080, + "Last": 8080 + } + } ], "Caps": [] } @@ -404,8 +590,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -415,7 +607,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -444,8 +640,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -455,7 +657,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -484,8 +690,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -495,7 +707,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -524,8 +740,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -535,7 +757,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -565,8 +791,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -575,7 +807,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -605,8 +841,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -649,8 +891,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -659,7 +907,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -679,18 +931,90 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.83.200.69", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.83.200.69", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.83.200.69", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "100.83.200.69", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "100.83.200.69", "Ports": { "First": 3306, "Last": 3306 } }, - { "IP": "100.83.200.69", "Ports": { "First": 8080, "Last": 8080 } }, - { "IP": "fd7a:115c:a1e0::c537:c845", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::c537:c845", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::c537:c845", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::c537:c845", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "fd7a:115c:a1e0::c537:c845", "Ports": { "First": 3306, "Last": 3306 } }, - { "IP": "fd7a:115c:a1e0::c537:c845", "Ports": { "First": 8080, "Last": 8080 } } + { + "IP": "100.83.200.69", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.83.200.69", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.83.200.69", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "100.83.200.69", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "100.83.200.69", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "IP": "100.83.200.69", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "IP": "fd7a:115c:a1e0::c537:c845", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::c537:c845", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::c537:c845", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::c537:c845", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "fd7a:115c:a1e0::c537:c845", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "IP": "fd7a:115c:a1e0::c537:c845", + "Ports": { + "First": 8080, + "Last": 8080 + } + } ] } ], @@ -716,18 +1040,90 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.83.200.69/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.83.200.69/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.83.200.69/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "100.83.200.69/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "100.83.200.69/32", "Ports": { "First": 3306, "Last": 3306 } }, - { "Net": "100.83.200.69/32", "Ports": { "First": 8080, "Last": 8080 } }, - { "Net": "fd7a:115c:a1e0::c537:c845/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::c537:c845/128", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::c537:c845/128", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::c537:c845/128", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "fd7a:115c:a1e0::c537:c845/128", "Ports": { "First": 3306, "Last": 3306 } }, - { "Net": "fd7a:115c:a1e0::c537:c845/128", "Ports": { "First": 8080, "Last": 8080 } } + { + "Net": "100.83.200.69/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.83.200.69/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.83.200.69/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "100.83.200.69/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "100.83.200.69/32", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "Net": "100.83.200.69/32", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "Net": "fd7a:115c:a1e0::c537:c845/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::c537:c845/128", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::c537:c845/128", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::c537:c845/128", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "fd7a:115c:a1e0::c537:c845/128", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "Net": "fd7a:115c:a1e0::c537:c845/128", + "Ports": { + "First": 8080, + "Last": 8080 + } + } ], "Caps": [] } @@ -758,8 +1154,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -769,7 +1171,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -798,8 +1204,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -810,7 +1222,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -839,8 +1255,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -850,7 +1272,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -879,8 +1305,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -890,7 +1322,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -920,8 +1356,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -930,7 +1372,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -960,8 +1406,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1004,8 +1456,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1014,7 +1472,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1034,24 +1496,132 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.103.8.15", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.103.8.15", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.103.8.15", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "100.103.8.15", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "100.103.8.15", "Ports": { "First": 3306, "Last": 3306 } }, - { "IP": "100.103.8.15", "Ports": { "First": 8080, "Last": 8080 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 3306, "Last": 3306 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 8080, "Last": 8080 } }, - { "IP": "100.103.8.15", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.103.8.15", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.103.8.15", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "100.103.8.15", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "100.103.8.15", "Ports": { "First": 3306, "Last": 3306 } }, - { "IP": "100.103.8.15", "Ports": { "First": 8080, "Last": 8080 } } + { + "IP": "100.103.8.15", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "IP": "100.103.8.15", + "Ports": { + "First": 8080, + "Last": 8080 + } + } ] } ], @@ -1077,24 +1647,132 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.103.8.15/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 3306, "Last": 3306 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 8080, "Last": 8080 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 3306, "Last": 3306 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 8080, "Last": 8080 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 3306, "Last": 3306 } }, - { "Net": "100.103.8.15/32", "Ports": { "First": 8080, "Last": 8080 } } + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 8080, + "Last": 8080 + } + } ], "Caps": [] } @@ -1125,8 +1803,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1136,7 +1820,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1165,8 +1853,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1177,7 +1871,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1206,8 +1904,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1217,7 +1921,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1246,8 +1954,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1257,7 +1971,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1287,8 +2005,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1297,7 +2021,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1327,8 +2055,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1371,8 +2105,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1381,7 +2121,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1401,24 +2145,132 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.108.74.26", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "100.108.74.26", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "100.108.74.26", "Ports": { "First": 3306, "Last": 3306 } }, - { "IP": "100.108.74.26", "Ports": { "First": 8080, "Last": 8080 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 3306, "Last": 3306 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 8080, "Last": 8080 } }, - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "100.108.74.26", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "100.108.74.26", "Ports": { "First": 5432, "Last": 5432 } }, - { "IP": "100.108.74.26", "Ports": { "First": 3306, "Last": 3306 } }, - { "IP": "100.108.74.26", "Ports": { "First": 8080, "Last": 8080 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 8080, + "Last": 8080 + } + } ] } ], @@ -1444,24 +2296,132 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 3306, "Last": 3306 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 8080, "Last": 8080 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 3306, "Last": 3306 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 8080, "Last": 8080 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 5432, "Last": 5432 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 3306, "Last": 3306 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 8080, "Last": 8080 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 8080, + "Last": 8080 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 5432, + "Last": 5432 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 3306, + "Last": 3306 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 8080, + "Last": 8080 + } + } ], "Caps": [] } @@ -1492,8 +2452,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1503,7 +2469,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1532,8 +2502,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1544,7 +2520,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1573,8 +2553,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1584,7 +2570,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1613,8 +2603,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1624,7 +2620,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1654,8 +2654,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1664,7 +2670,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1694,8 +2704,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1738,8 +2754,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1748,7 +2770,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1792,8 +2818,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1803,7 +2835,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1832,8 +2868,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1843,7 +2885,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1872,8 +2918,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1883,7 +2935,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1912,8 +2968,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1923,7 +2985,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1977,8 +3043,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1988,7 +3060,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2017,8 +3093,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2028,7 +3110,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2057,8 +3143,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2068,7 +3160,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2097,8 +3193,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2108,7 +3210,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2162,8 +3268,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2173,7 +3285,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2202,8 +3318,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2213,7 +3335,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2242,8 +3368,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2253,7 +3385,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2282,8 +3418,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2293,7 +3435,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_8A.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_8A.json index 0b5754de..0f37e367 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_8A.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_8A.json @@ -67,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -322,8 +324,20 @@ "fd7a:115c:a1e0::9e37:5a52" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -340,8 +354,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -393,8 +419,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -403,7 +435,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -433,8 +469,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -477,8 +519,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -487,7 +535,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -546,8 +598,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -557,7 +615,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -626,8 +688,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -637,7 +705,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -706,8 +778,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -717,7 +795,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_8B.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_8B.json index d1aee8b8..4409621e 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_8B.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_8B.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["tag:server", "webserver", "100.108.74.26"], "dst": ["tag:client"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["tag:server", "webserver", "100.108.74.26"], + "dst": ["tag:client"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -219,8 +227,20 @@ { "SrcIPs": ["100.108.74.26", "fd7a:115c:a1e0::b901:4a87"], "DstPorts": [ - { "IP": "100.83.200.69", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::c537:c845", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.83.200.69", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::c537:c845", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -230,8 +250,20 @@ "Srcs": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.83.200.69/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::c537:c845/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.83.200.69/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::c537:c845/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -277,8 +309,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -288,7 +326,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -397,8 +439,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -408,7 +456,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_8C.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_8C.json index 3d9c218a..82cb1e90 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_8C.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_8C.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["tag:client"], "dst": ["tag:server", "webserver", "100.108.74.26"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["tag:client"], + "dst": ["tag:server", "webserver", "100.108.74.26"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -258,8 +266,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -269,7 +283,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -344,10 +362,34 @@ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -357,10 +399,34 @@ "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -401,8 +467,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -412,7 +484,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_9A.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_9A.json index da45f50e..8bf01306 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_9A.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_9A.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["tag:server", "tag:client", "tag:prod", "tag:router"], "dst": ["*"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["tag:server", "tag:client", "tag:prod", "tag:router"], + "dst": ["*"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -137,7 +145,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -155,8 +171,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -187,8 +215,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -198,7 +232,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -227,8 +265,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -238,7 +282,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -267,8 +315,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -278,7 +332,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -307,8 +365,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -318,7 +382,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -356,7 +424,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -374,8 +450,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -406,8 +494,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -417,7 +511,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -446,8 +544,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -457,7 +561,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -486,8 +594,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -497,7 +611,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -526,8 +644,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -537,7 +661,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -567,8 +695,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -577,7 +711,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -607,8 +745,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -651,8 +795,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -661,7 +811,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -684,7 +838,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -702,8 +864,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -734,8 +908,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -745,7 +925,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -774,8 +958,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -786,7 +976,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -815,8 +1009,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -826,7 +1026,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -855,8 +1059,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -866,7 +1076,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -896,8 +1110,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -906,7 +1126,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -936,8 +1160,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -980,8 +1210,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -990,7 +1226,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1013,7 +1253,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1031,8 +1279,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1063,8 +1323,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1074,7 +1340,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1103,8 +1373,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1115,7 +1391,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1144,8 +1424,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1155,7 +1441,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1184,8 +1474,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1195,7 +1491,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1225,8 +1525,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1235,7 +1541,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1265,8 +1575,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1309,8 +1625,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1319,7 +1641,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1342,7 +1668,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1360,8 +1694,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1392,8 +1738,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1403,7 +1755,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1432,8 +1788,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1444,7 +1806,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1473,8 +1839,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1484,7 +1856,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1513,8 +1889,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1524,7 +1906,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1554,8 +1940,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1564,7 +1956,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1594,8 +1990,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1638,8 +2040,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1648,7 +2056,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1671,7 +2083,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1689,8 +2109,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1726,8 +2158,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1737,7 +2175,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1766,8 +2208,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1777,7 +2225,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1806,8 +2258,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1817,7 +2275,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1846,8 +2308,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1857,7 +2325,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1890,7 +2362,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1908,8 +2388,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1945,8 +2437,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1956,7 +2454,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1985,8 +2487,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1996,7 +2504,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2025,8 +2537,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2036,7 +2554,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2065,8 +2587,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2076,7 +2604,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2109,7 +2641,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2127,8 +2667,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2164,8 +2716,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2175,7 +2733,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2204,8 +2766,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2215,7 +2783,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2244,8 +2816,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2255,7 +2833,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2284,8 +2866,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2295,7 +2883,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_9B.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_9B.json index fda0df77..017dc390 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_9B.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_9B.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["tag:server", "tag:client", "tag:prod", "tag:router"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["tag:server", "tag:client", "tag:prod", "tag:router"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -153,8 +161,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -164,7 +178,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -193,8 +211,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -204,7 +228,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -233,8 +261,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -244,7 +278,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -273,8 +311,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -284,7 +328,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -319,8 +367,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.92.142.61", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::3e37:8e3d", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.92.142.61", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::3e37:8e3d", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -346,8 +406,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.92.142.61/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::3e37:8e3d/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.92.142.61/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::3e37:8e3d/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -378,8 +450,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -389,7 +467,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -418,8 +500,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -429,7 +517,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -458,8 +550,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -469,7 +567,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -498,8 +600,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -509,7 +617,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -539,8 +651,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -549,7 +667,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -579,8 +701,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -623,8 +751,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -633,7 +767,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -653,8 +791,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.83.200.69", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::c537:c845", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.83.200.69", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::c537:c845", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -680,8 +830,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.83.200.69/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::c537:c845/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.83.200.69/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::c537:c845/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -712,8 +874,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -723,7 +891,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -752,8 +924,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -764,7 +942,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -793,8 +975,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -804,7 +992,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -833,8 +1025,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -844,7 +1042,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -874,8 +1076,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -884,7 +1092,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -914,8 +1126,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -958,8 +1176,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -968,7 +1192,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -988,8 +1216,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.103.8.15", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::5b37:80f", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.103.8.15", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::5b37:80f", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -1015,8 +1255,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.103.8.15/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::5b37:80f/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.103.8.15/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::5b37:80f/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -1047,8 +1299,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1058,7 +1316,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1087,8 +1349,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1099,7 +1367,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1128,8 +1400,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1139,7 +1417,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1168,8 +1450,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1179,7 +1467,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1209,8 +1501,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1219,7 +1517,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1249,8 +1551,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1293,8 +1601,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1303,7 +1617,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1323,8 +1641,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.108.74.26", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "fd7a:115c:a1e0::b901:4a87", "Ports": { "First": 22, "Last": 22 } } + { + "IP": "100.108.74.26", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "fd7a:115c:a1e0::b901:4a87", + "Ports": { + "First": 22, + "Last": 22 + } + } ] } ], @@ -1350,8 +1680,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.108.74.26/32", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "fd7a:115c:a1e0::b901:4a87/128", "Ports": { "First": 22, "Last": 22 } } + { + "Net": "100.108.74.26/32", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "fd7a:115c:a1e0::b901:4a87/128", + "Ports": { + "First": 22, + "Last": 22 + } + } ], "Caps": [] } @@ -1382,8 +1724,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1393,7 +1741,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1422,8 +1774,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1434,7 +1792,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1463,8 +1825,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1474,7 +1842,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1503,8 +1875,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1514,7 +1892,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1544,8 +1926,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1554,7 +1942,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1584,8 +1976,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1628,8 +2026,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1638,7 +2042,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1682,8 +2090,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1693,7 +2107,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1722,8 +2140,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1733,7 +2157,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1762,8 +2190,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1773,7 +2207,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1802,8 +2240,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1813,7 +2257,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1867,8 +2315,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1878,7 +2332,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1907,8 +2365,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1918,7 +2382,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1947,8 +2415,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1958,7 +2432,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1987,8 +2465,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1998,7 +2482,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2052,8 +2540,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2063,7 +2557,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2092,8 +2590,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2103,7 +2607,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2132,8 +2640,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2143,7 +2657,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2172,8 +2690,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2183,7 +2707,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_9C.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_9C.json index ec4b0688..c04be363 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_9C.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P09_9C.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["autogroup:member", "autogroup:tagged"], "dst": ["*"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["autogroup:member", "autogroup:tagged"], + "dst": ["*"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -145,7 +153,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -171,8 +187,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -203,8 +231,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -215,7 +249,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -244,8 +282,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -255,7 +299,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -284,8 +332,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -295,7 +349,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -324,8 +382,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -335,7 +399,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -365,8 +433,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -375,7 +449,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -405,8 +483,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -449,8 +533,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -459,7 +549,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -490,7 +584,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -516,8 +618,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -548,8 +662,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -559,7 +679,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -588,8 +712,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -599,7 +729,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -628,8 +762,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -639,7 +779,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -668,8 +812,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -679,7 +829,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -709,8 +863,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -719,7 +879,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -749,8 +913,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -793,8 +963,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -803,7 +979,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -834,7 +1014,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -860,8 +1048,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -892,8 +1092,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -903,7 +1109,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -932,8 +1142,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -944,7 +1160,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -973,8 +1193,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -984,7 +1210,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1013,8 +1243,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1024,7 +1260,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1054,8 +1294,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1064,7 +1310,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1094,8 +1344,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1138,8 +1394,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1148,7 +1410,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1179,7 +1445,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1205,8 +1479,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1237,8 +1523,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1248,7 +1540,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1277,8 +1573,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1289,7 +1591,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1318,8 +1624,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1329,7 +1641,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1358,8 +1674,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1369,7 +1691,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1399,8 +1725,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1409,7 +1741,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1439,8 +1775,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1483,8 +1825,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1493,7 +1841,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1524,7 +1876,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1550,8 +1910,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1582,8 +1954,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1593,7 +1971,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1622,8 +2004,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1634,7 +2022,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1663,8 +2055,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1674,7 +2072,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1703,8 +2105,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1714,7 +2122,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1744,8 +2156,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1754,7 +2172,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1784,8 +2206,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1828,8 +2256,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1838,7 +2272,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1869,7 +2307,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1895,8 +2341,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1927,8 +2385,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1938,7 +2402,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1967,8 +2435,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1979,7 +2453,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2008,8 +2486,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2019,7 +2503,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2048,8 +2536,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2059,7 +2553,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2088,8 +2586,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2099,7 +2603,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2129,8 +2637,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2173,8 +2687,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2183,7 +2703,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2214,7 +2738,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2240,8 +2772,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2272,8 +2816,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2283,7 +2833,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2312,8 +2866,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2324,7 +2884,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2353,8 +2917,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2364,7 +2934,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2393,8 +2967,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2404,7 +2984,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2433,8 +3017,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2444,7 +3034,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2474,8 +3068,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2484,7 +3084,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2514,8 +3118,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2524,7 +3134,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2555,7 +3169,15 @@ "fd7a:115c:a1e0::b901:4a87", "fd7a:115c:a1e0::c537:c845" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2581,8 +3203,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2613,8 +3247,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2624,7 +3264,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2653,8 +3297,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2665,7 +3315,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2694,8 +3348,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2705,7 +3365,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2734,8 +3398,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2745,7 +3415,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2774,8 +3448,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2785,7 +3465,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2815,8 +3499,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2825,7 +3515,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2855,8 +3549,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P10_1.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P10_1.json index 863d0de0..15eaa859 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P10_1.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P10_1.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["*"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["*"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -133,7 +141,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -158,8 +174,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -190,8 +218,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -202,7 +236,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -231,8 +269,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -242,7 +286,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -271,8 +319,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -282,7 +336,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -311,8 +369,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -322,7 +386,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -352,8 +420,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -362,7 +436,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -392,8 +470,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -436,8 +520,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -446,7 +536,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -465,7 +559,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -490,8 +592,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -522,8 +636,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -533,7 +653,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -562,8 +686,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -573,7 +703,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -602,8 +736,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -613,7 +753,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -642,8 +786,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -653,7 +803,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -683,8 +837,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -693,7 +853,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -723,8 +887,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -767,8 +937,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -777,7 +953,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -796,7 +976,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -821,8 +1009,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -853,8 +1053,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -864,7 +1070,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -893,8 +1103,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -905,7 +1121,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -934,8 +1154,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -945,7 +1171,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -974,8 +1204,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -985,7 +1221,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1015,8 +1255,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1025,7 +1271,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1055,8 +1305,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1099,8 +1355,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1109,7 +1371,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1128,7 +1394,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1153,8 +1427,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1185,8 +1471,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1196,7 +1488,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1225,8 +1521,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1237,7 +1539,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1266,8 +1572,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1277,7 +1589,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1306,8 +1622,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1317,7 +1639,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1347,8 +1673,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1357,7 +1689,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1387,8 +1723,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1431,8 +1773,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1441,7 +1789,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1460,7 +1812,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1485,8 +1845,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1517,8 +1889,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1528,7 +1906,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1557,8 +1939,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1569,7 +1957,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1598,8 +1990,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1609,7 +2007,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1638,8 +2040,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1649,7 +2057,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1679,8 +2091,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1689,7 +2107,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1719,8 +2141,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1763,8 +2191,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1773,7 +2207,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1792,7 +2230,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1817,8 +2263,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1849,8 +2307,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1860,7 +2324,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1889,8 +2357,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1901,7 +2375,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1930,8 +2408,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1941,7 +2425,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1970,8 +2458,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1981,7 +2475,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2010,8 +2508,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2021,7 +2525,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2051,8 +2559,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2095,8 +2609,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2105,7 +2625,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2124,7 +2648,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2149,8 +2681,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2181,8 +2725,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2192,7 +2742,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2221,8 +2775,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2233,7 +2793,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2262,8 +2826,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2273,7 +2843,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2302,8 +2876,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2313,7 +2893,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2342,8 +2926,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2353,7 +2943,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2383,8 +2977,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2393,7 +2993,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2423,8 +3027,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2433,7 +3043,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2452,7 +3066,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2477,8 +3099,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2509,8 +3143,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2520,7 +3160,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2549,8 +3193,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2561,7 +3211,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2590,8 +3244,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2601,7 +3261,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2630,8 +3294,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2641,7 +3311,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2670,8 +3344,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2681,7 +3361,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2711,8 +3395,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2721,7 +3411,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2751,8 +3445,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P10_2.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P10_2.json index df662b5a..be277a9a 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P10_2.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P10_2.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["tag:router"], "dst": ["tag:router"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["tag:router"], + "dst": ["tag:router"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -174,8 +182,20 @@ { "SrcIPs": ["100.92.142.61", "fd7a:115c:a1e0::3e37:8e3d"], "DstPorts": [ - { "IP": "100.92.142.61", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::3e37:8e3d", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.92.142.61", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::3e37:8e3d", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -185,8 +205,20 @@ "Srcs": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.92.142.61/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::3e37:8e3d/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.92.142.61/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::3e37:8e3d/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P10_3.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P10_3.json index 1824b9bc..1090c1f4 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P10_3.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P10_3.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["10.33.0.0/16"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["10.33.0.0/16"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -153,8 +161,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -165,7 +179,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -214,7 +232,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "10.33.0.0/16", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "10.33.0.0/16", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -238,7 +264,15 @@ "fd7a:115c:a1e0::/48" ], "SrcCaps": null, - "Dsts": [{ "Net": "10.33.0.0/16", "Ports": { "First": 0, "Last": 65535 } }], + "Dsts": [ + { + "Net": "10.33.0.0/16", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ], "Caps": [] } ], @@ -268,8 +302,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -279,7 +319,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -308,8 +352,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -319,7 +369,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -348,8 +402,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -359,7 +419,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -388,8 +452,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -399,7 +469,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -429,8 +503,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -439,7 +519,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -469,8 +553,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -513,8 +603,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -523,7 +619,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -567,8 +667,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -579,7 +685,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -648,8 +758,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -660,7 +776,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -729,8 +849,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -741,7 +867,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -810,8 +940,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -822,7 +958,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -891,8 +1031,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -903,7 +1049,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -972,8 +1122,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -984,7 +1140,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P10_4.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P10_4.json index d80c0328..a864c904 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P10_4.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P10_4.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["autogroup:member"], "dst": ["10.33.0.0/16"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["autogroup:member"], + "dst": ["10.33.0.0/16"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -180,7 +188,15 @@ "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::9e37:5a52" ], - "DstPorts": [{ "IP": "10.33.0.0/16", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "10.33.0.0/16", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -195,7 +211,15 @@ "fd7a:115c:a1e0::9e37:5a52/128" ], "SrcCaps": null, - "Dsts": [{ "Net": "10.33.0.0/16", "Ports": { "First": 0, "Last": 65535 } }], + "Dsts": [ + { + "Net": "10.33.0.0/16", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ], "Caps": [] } ], @@ -246,8 +270,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -256,7 +286,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -286,8 +320,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -330,8 +370,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -340,7 +386,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -519,8 +569,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -531,7 +587,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -600,8 +660,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -612,7 +678,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -681,8 +751,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -693,7 +769,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P11_1.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P11_1.json index b9604d03..9d682987 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P11_1.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P11_1.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["*"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["*"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -133,7 +141,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -158,8 +174,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -190,8 +218,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -202,7 +236,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -231,8 +269,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -242,7 +286,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -271,8 +319,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -282,7 +336,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -311,8 +369,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -322,7 +386,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -352,8 +420,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -362,7 +436,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -392,8 +470,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -436,8 +520,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -446,7 +536,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -465,7 +559,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -490,8 +592,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -522,8 +636,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -533,7 +653,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -562,8 +686,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -573,7 +703,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -602,8 +736,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -613,7 +753,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -642,8 +786,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -653,7 +803,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -683,8 +837,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -693,7 +853,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -723,8 +887,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -767,8 +937,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -777,7 +953,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -796,7 +976,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -821,8 +1009,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -853,8 +1053,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -864,7 +1070,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -893,8 +1103,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -905,7 +1121,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -934,8 +1154,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -945,7 +1171,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -974,8 +1204,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -985,7 +1221,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1015,8 +1255,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1025,7 +1271,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1055,8 +1305,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1099,8 +1355,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1109,7 +1371,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1128,7 +1394,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1153,8 +1427,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1185,8 +1471,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1196,7 +1488,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1225,8 +1521,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1237,7 +1539,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1266,8 +1572,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1277,7 +1589,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1306,8 +1622,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1317,7 +1639,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1347,8 +1673,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1357,7 +1689,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1387,8 +1723,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1431,8 +1773,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1441,7 +1789,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1460,7 +1812,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1485,8 +1845,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1517,8 +1889,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1528,7 +1906,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1557,8 +1939,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1569,7 +1957,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1598,8 +1990,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1609,7 +2007,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1638,8 +2040,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1649,7 +2057,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1679,8 +2091,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1689,7 +2107,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -1719,8 +2141,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1763,8 +2191,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1773,7 +2207,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -1792,7 +2230,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -1817,8 +2263,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -1849,8 +2307,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1860,7 +2324,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1889,8 +2357,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1901,7 +2375,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1930,8 +2408,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -1941,7 +2425,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1970,8 +2458,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1981,7 +2475,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2010,8 +2508,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2021,7 +2525,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2051,8 +2559,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -2095,8 +2609,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2105,7 +2625,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2124,7 +2648,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2149,8 +2681,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2181,8 +2725,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2192,7 +2742,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2221,8 +2775,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2233,7 +2793,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2262,8 +2826,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2273,7 +2843,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2302,8 +2876,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2313,7 +2893,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2342,8 +2926,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2353,7 +2943,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2383,8 +2977,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2393,7 +2993,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2423,8 +3027,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -2433,7 +3043,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -2452,7 +3066,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "*", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "*", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -2477,8 +3099,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "0.0.0.0/0", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "::/0", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "0.0.0.0/0", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "::/0", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -2509,8 +3143,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -2520,7 +3160,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2549,8 +3193,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -2561,7 +3211,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2590,8 +3244,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -2601,7 +3261,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2630,8 +3294,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -2641,7 +3311,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2670,8 +3344,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -2681,7 +3361,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -2711,8 +3395,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -2721,7 +3411,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -2751,8 +3445,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P11_2.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P11_2.json index 67a60576..361157ee 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P11_2.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P11_2.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["tag:exit"], "dst": ["tag:exit"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["tag:exit"], + "dst": ["tag:exit"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -129,8 +137,20 @@ { "SrcIPs": ["100.85.66.106", "fd7a:115c:a1e0::7c37:426a"], "DstPorts": [ - { "IP": "100.85.66.106", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::7c37:426a", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.85.66.106", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::7c37:426a", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -140,8 +160,20 @@ "Srcs": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], "SrcCaps": null, "Dsts": [ - { "Net": "100.85.66.106/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::7c37:426a/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.85.66.106/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::7c37:426a/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P11_3.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P11_3.json index cd2097de..e3be84f8 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P11_3.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P11_3.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["autogroup:member"], "dst": ["autogroup:internet"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["autogroup:member"], + "dst": ["autogroup:internet"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P13_1.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P13_1.json index a6fa376a..a9853249 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P13_1.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P13_1.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["autogroup:member"], "dst": ["10.33.0.0/16"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["autogroup:member"], + "dst": ["10.33.0.0/16"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -180,7 +188,15 @@ "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::9e37:5a52" ], - "DstPorts": [{ "IP": "10.33.0.0/16", "Ports": { "First": 22, "Last": 22 } }] + "DstPorts": [ + { + "IP": "10.33.0.0/16", + "Ports": { + "First": 22, + "Last": 22 + } + } + ] } ], "packet_filter_matches": [ @@ -195,7 +211,15 @@ "fd7a:115c:a1e0::9e37:5a52/128" ], "SrcCaps": null, - "Dsts": [{ "Net": "10.33.0.0/16", "Ports": { "First": 22, "Last": 22 } }], + "Dsts": [ + { + "Net": "10.33.0.0/16", + "Ports": { + "First": 22, + "Last": 22 + } + } + ], "Caps": [] } ], @@ -246,8 +270,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -256,7 +286,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -286,8 +320,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -330,8 +370,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -340,7 +386,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -519,8 +569,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -531,7 +587,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -600,8 +660,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -612,7 +678,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -681,8 +751,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -693,7 +769,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P13_2.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P13_2.json index 9e5983eb..5ed7a60b 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P13_2.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P13_2.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["10.33.0.0/16"], "ip": ["80-443"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["10.33.0.0/16"], + "ip": ["80-443"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -153,8 +161,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -165,7 +179,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -214,7 +232,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "10.33.0.0/16", "Ports": { "First": 80, "Last": 443 } }] + "DstPorts": [ + { + "IP": "10.33.0.0/16", + "Ports": { + "First": 80, + "Last": 443 + } + } + ] } ], "packet_filter_matches": [ @@ -238,7 +264,15 @@ "fd7a:115c:a1e0::/48" ], "SrcCaps": null, - "Dsts": [{ "Net": "10.33.0.0/16", "Ports": { "First": 80, "Last": 443 } }], + "Dsts": [ + { + "Net": "10.33.0.0/16", + "Ports": { + "First": 80, + "Last": 443 + } + } + ], "Caps": [] } ], @@ -268,8 +302,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -279,7 +319,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -308,8 +352,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -319,7 +369,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -348,8 +402,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -359,7 +419,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -388,8 +452,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -399,7 +469,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -429,8 +503,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -439,7 +519,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -469,8 +553,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -513,8 +603,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -523,7 +619,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -567,8 +667,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -579,7 +685,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -648,8 +758,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -660,7 +776,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -729,8 +849,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -741,7 +867,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -810,8 +940,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -822,7 +958,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -891,8 +1031,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -903,7 +1049,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -972,8 +1122,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -984,7 +1140,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P13_3.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P13_3.json index dfc06439..12a9f94e 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P13_3.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P13_3.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["10.33.0.0/16"], "ip": ["22", "80", "443"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["10.33.0.0/16"], + "ip": ["22", "80", "443"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -153,8 +161,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -165,7 +179,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -215,9 +233,27 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "10.33.0.0/16", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "10.33.0.0/16", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "10.33.0.0/16", "Ports": { "First": 443, "Last": 443 } } + { + "IP": "10.33.0.0/16", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "10.33.0.0/16", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "10.33.0.0/16", + "Ports": { + "First": 443, + "Last": 443 + } + } ] } ], @@ -243,9 +279,27 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "10.33.0.0/16", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "10.33.0.0/16", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "10.33.0.0/16", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "10.33.0.0/16", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "10.33.0.0/16", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "10.33.0.0/16", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] } @@ -276,8 +330,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -287,7 +347,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -316,8 +380,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -327,7 +397,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -356,8 +430,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -367,7 +447,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -396,8 +480,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -407,7 +497,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -437,8 +531,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -447,7 +547,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -477,8 +581,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -521,8 +631,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -531,7 +647,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -575,8 +695,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -587,7 +713,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -656,8 +786,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -668,7 +804,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -737,8 +877,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -749,7 +895,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -818,8 +968,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -830,7 +986,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -899,8 +1059,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -911,7 +1077,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -980,8 +1150,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -992,7 +1168,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P13_4.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P13_4.json index 5df6f0e5..7b24e60e 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P13_4.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P13_4.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["10.33.0.0/16"], "dst": ["autogroup:member"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["10.33.0.0/16"], + "dst": ["autogroup:member"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -219,8 +227,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -229,7 +243,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -259,8 +277,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -303,8 +327,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -313,7 +343,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -463,8 +497,20 @@ { "SrcIPs": ["10.33.0.0/16"], "DstPorts": [ - { "IP": "100.110.121.96", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::1737:7960", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.110.121.96", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::1737:7960", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -474,8 +520,20 @@ "Srcs": ["10.33.0.0/16"], "SrcCaps": null, "Dsts": [ - { "Net": "100.110.121.96/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::1737:7960/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.110.121.96/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::1737:7960/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -511,8 +569,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -523,7 +587,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -563,8 +631,20 @@ { "SrcIPs": ["10.33.0.0/16"], "DstPorts": [ - { "IP": "100.103.90.82", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::9e37:5a52", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.103.90.82", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::9e37:5a52", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -574,8 +654,20 @@ "Srcs": ["10.33.0.0/16"], "SrcCaps": null, "Dsts": [ - { "Net": "100.103.90.82/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::9e37:5a52/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.103.90.82/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::9e37:5a52/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -611,8 +703,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -623,7 +721,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -663,8 +765,20 @@ { "SrcIPs": ["10.33.0.0/16"], "DstPorts": [ - { "IP": "100.90.199.68", "Ports": { "First": 0, "Last": 65535 } }, - { "IP": "fd7a:115c:a1e0::2d01:c747", "Ports": { "First": 0, "Last": 65535 } } + { + "IP": "100.90.199.68", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "IP": "fd7a:115c:a1e0::2d01:c747", + "Ports": { + "First": 0, + "Last": 65535 + } + } ] } ], @@ -674,8 +788,20 @@ "Srcs": ["10.33.0.0/16"], "SrcCaps": null, "Dsts": [ - { "Net": "100.90.199.68/32", "Ports": { "First": 0, "Last": 65535 } }, - { "Net": "fd7a:115c:a1e0::2d01:c747/128", "Ports": { "First": 0, "Last": 65535 } } + { + "Net": "100.90.199.68/32", + "Ports": { + "First": 0, + "Last": 65535 + } + }, + { + "Net": "fd7a:115c:a1e0::2d01:c747/128", + "Ports": { + "First": 0, + "Last": 65535 + } + } ], "Caps": [] } @@ -711,8 +837,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -723,7 +855,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_1.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_1.json index bb17a193..49a66270 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_1.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_1.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["autogroup:member"], "dst": ["10.33.1.0/24"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["autogroup:member"], + "dst": ["10.33.1.0/24"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -180,7 +188,15 @@ "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::9e37:5a52" ], - "DstPorts": [{ "IP": "10.33.1.0/24", "Ports": { "First": 22, "Last": 22 } }] + "DstPorts": [ + { + "IP": "10.33.1.0/24", + "Ports": { + "First": 22, + "Last": 22 + } + } + ] } ], "packet_filter_matches": [ @@ -195,7 +211,15 @@ "fd7a:115c:a1e0::9e37:5a52/128" ], "SrcCaps": null, - "Dsts": [{ "Net": "10.33.1.0/24", "Ports": { "First": 22, "Last": 22 } }], + "Dsts": [ + { + "Net": "10.33.1.0/24", + "Ports": { + "First": 22, + "Last": 22 + } + } + ], "Caps": [] } ], @@ -246,8 +270,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -256,7 +286,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -286,8 +320,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -330,8 +370,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -340,7 +386,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -519,8 +569,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -531,7 +587,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -600,8 +660,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -612,7 +678,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -681,8 +751,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -693,7 +769,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_2.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_2.json index 8273c891..9baf31ee 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_2.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_2.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["autogroup:member"], "dst": ["10.1.0.0/16"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["autogroup:member"], + "dst": ["10.1.0.0/16"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_3.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_3.json index edb137ab..7dd00200 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_3.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_3.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["autogroup:member"], "dst": ["10.32.0.0/14"], "ip": ["22"] }], + "grants_section": [ + { + "src": ["autogroup:member"], + "dst": ["10.32.0.0/14"], + "ip": ["22"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -180,7 +188,15 @@ "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::9e37:5a52" ], - "DstPorts": [{ "IP": "10.32.0.0/14", "Ports": { "First": 22, "Last": 22 } }] + "DstPorts": [ + { + "IP": "10.32.0.0/14", + "Ports": { + "First": 22, + "Last": 22 + } + } + ] } ], "packet_filter_matches": [ @@ -195,7 +211,15 @@ "fd7a:115c:a1e0::9e37:5a52/128" ], "SrcCaps": null, - "Dsts": [{ "Net": "10.32.0.0/14", "Ports": { "First": 22, "Last": 22 } }], + "Dsts": [ + { + "Net": "10.32.0.0/14", + "Ports": { + "First": 22, + "Last": 22 + } + } + ], "Caps": [] } ], @@ -246,8 +270,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -256,7 +286,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -286,8 +320,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -330,8 +370,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -340,7 +386,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -519,8 +569,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -531,7 +587,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -600,8 +660,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -612,7 +678,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -681,8 +751,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -693,7 +769,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_4.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_4.json index 8cf8a9ee..6d9ba03d 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_4.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_4.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["autogroup:member"], "dst": ["8.8.8.0/24"], "ip": ["53"] }], + "grants_section": [ + { + "src": ["autogroup:member"], + "dst": ["8.8.8.0/24"], + "ip": ["53"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_5.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_5.json index eb880715..defa3543 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_5.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_5.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["autogroup:member"], "dst": ["10.32.0.100/32"], "ip": ["80"] }], + "grants_section": [ + { + "src": ["autogroup:member"], + "dst": ["10.32.0.100/32"], + "ip": ["80"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_6.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_6.json index b9c4a253..625d6f4a 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_6.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-P15_6.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["autogroup:member"], "dst": ["fd00:1::/64"], "ip": ["443"] }], + "grants_section": [ + { + "src": ["autogroup:member"], + "dst": ["fd00:1::/64"], + "ip": ["443"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-V02.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-V02.json index 8ebdb4f9..b55ac114 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-V02.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-V02.json @@ -45,7 +45,17 @@ ] }, "grants_section": [ - { "src": ["*"], "dst": ["tag:exit"], "app": { "example.com/cap/exit-control": [{ "mode": "full" }] } } + { + "src": ["*"], + "dst": ["tag:exit"], + "app": { + "example.com/cap/exit-control": [ + { + "mode": "full" + } + ] + } + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -69,7 +79,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -144,7 +156,13 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "example.com/cap/exit-control": [{ "mode": "full" }] } + "CapMap": { + "example.com/cap/exit-control": [ + { + "mode": "full" + } + ] + } } ] } @@ -172,11 +190,23 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "example.com/cap/exit-control", "Values": [{ "mode": "full" }] }, + { + "Dst": "100.85.66.106/32", + "Cap": "example.com/cap/exit-control", + "Values": [ + { + "mode": "full" + } + ] + }, { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "example.com/cap/exit-control", - "Values": [{ "mode": "full" }] + "Values": [ + { + "mode": "full" + } + ] } ] } @@ -207,8 +237,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -219,8 +255,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/exit-control": [{ "mode": "full" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/exit-control": [ + { + "mode": "full" + } + ] + } } }, "100.83.200.69": { @@ -248,8 +294,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -259,8 +311,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/exit-control": [{ "mode": "full" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/exit-control": [ + { + "mode": "full" + } + ] + } } }, "100.103.8.15": { @@ -288,8 +350,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -299,8 +367,18 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/exit-control": [{ "mode": "full" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/exit-control": [ + { + "mode": "full" + } + ] + } } }, "100.108.74.26": { @@ -328,8 +406,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -339,8 +423,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/exit-control": [{ "mode": "full" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/exit-control": [ + { + "mode": "full" + } + ] + } } }, "100.110.121.96": { @@ -369,8 +463,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -379,8 +479,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/exit-control": [{ "mode": "full" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/exit-control": [ + { + "mode": "full" + } + ] + } } }, "100.103.90.82": { @@ -409,8 +519,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -424,7 +540,13 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/exit-control": [{ "mode": "full" }] } + "CapMap": { + "example.com/cap/exit-control": [ + { + "mode": "full" + } + ] + } } }, "100.90.199.68": { @@ -453,8 +575,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -463,8 +591,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/exit-control": [{ "mode": "full" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/exit-control": [ + { + "mode": "full" + } + ] + } } } } @@ -502,8 +640,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -513,7 +657,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -582,8 +730,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -593,7 +747,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -662,8 +820,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -673,7 +837,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -742,8 +910,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -753,7 +927,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -822,8 +1000,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -833,7 +1017,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -902,8 +1090,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -913,7 +1107,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -982,8 +1180,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -993,7 +1197,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-V03.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-V03.json index b3b46e8a..b1cb7c50 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-V03.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-V03.json @@ -45,7 +45,17 @@ ] }, "grants_section": [ - { "src": ["*"], "dst": ["tag:router"], "app": { "example.com/cap/router-admin": [{ "role": "admin" }] } } + { + "src": ["*"], + "dst": ["tag:router"], + "app": { + "example.com/cap/router-admin": [ + { + "role": "admin" + } + ] + } + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -69,7 +79,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -161,8 +173,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -172,7 +190,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -224,7 +246,13 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "example.com/cap/router-admin": [{ "role": "admin" }] } + "CapMap": { + "example.com/cap/router-admin": [ + { + "role": "admin" + } + ] + } } ] } @@ -252,11 +280,23 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "example.com/cap/router-admin", "Values": [{ "role": "admin" }] }, + { + "Dst": "100.92.142.61/32", + "Cap": "example.com/cap/router-admin", + "Values": [ + { + "role": "admin" + } + ] + }, { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "example.com/cap/router-admin", - "Values": [{ "role": "admin" }] + "Values": [ + { + "role": "admin" + } + ] } ] } @@ -287,8 +327,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -298,8 +344,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/router-admin": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/router-admin": [ + { + "role": "admin" + } + ] + } } }, "100.83.200.69": { @@ -327,8 +383,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -338,8 +400,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/router-admin": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/router-admin": [ + { + "role": "admin" + } + ] + } } }, "100.103.8.15": { @@ -367,8 +439,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -378,8 +456,18 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/router-admin": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/router-admin": [ + { + "role": "admin" + } + ] + } } }, "100.108.74.26": { @@ -407,8 +495,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -418,8 +512,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/router-admin": [{ "role": "admin" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/router-admin": [ + { + "role": "admin" + } + ] + } } }, "100.110.121.96": { @@ -448,8 +552,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -458,8 +568,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/router-admin": [{ "role": "admin" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/router-admin": [ + { + "role": "admin" + } + ] + } } }, "100.103.90.82": { @@ -488,8 +608,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -503,7 +629,13 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/router-admin": [{ "role": "admin" }] } + "CapMap": { + "example.com/cap/router-admin": [ + { + "role": "admin" + } + ] + } } }, "100.90.199.68": { @@ -532,8 +664,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -542,8 +680,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/router-admin": [{ "role": "admin" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/router-admin": [ + { + "role": "admin" + } + ] + } } } } @@ -586,8 +734,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -597,7 +751,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -666,8 +824,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -677,7 +841,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -746,8 +914,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -757,7 +931,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -826,8 +1004,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -837,7 +1021,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -906,8 +1094,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -917,7 +1111,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -986,8 +1184,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -997,7 +1201,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-V06.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-V06.json index fbda0bb2..1acada16 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-V06.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-V06.json @@ -45,7 +45,17 @@ ] }, "grants_section": [ - { "src": ["*"], "dst": ["tag:server", "tag:exit"], "app": { "example.com/cap/multi-dst": [{ "scope": "both" }] } } + { + "src": ["*"], + "dst": ["tag:server", "tag:exit"], + "app": { + "example.com/cap/multi-dst": [ + { + "scope": "both" + } + ] + } + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -69,7 +79,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -144,7 +156,13 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "example.com/cap/multi-dst": [{ "scope": "both" }] } + "CapMap": { + "example.com/cap/multi-dst": [ + { + "scope": "both" + } + ] + } } ] } @@ -172,11 +190,23 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "example.com/cap/multi-dst", "Values": [{ "scope": "both" }] }, + { + "Dst": "100.85.66.106/32", + "Cap": "example.com/cap/multi-dst", + "Values": [ + { + "scope": "both" + } + ] + }, { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "example.com/cap/multi-dst", - "Values": [{ "scope": "both" }] + "Values": [ + { + "scope": "both" + } + ] } ] } @@ -207,8 +237,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -219,8 +255,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/multi-dst": [{ "scope": "both" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/multi-dst": [ + { + "scope": "both" + } + ] + } } }, "100.83.200.69": { @@ -248,8 +294,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -259,8 +311,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/multi-dst": [{ "scope": "both" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/multi-dst": [ + { + "scope": "both" + } + ] + } } }, "100.103.8.15": { @@ -288,8 +350,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -299,8 +367,18 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/multi-dst": [{ "scope": "both" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/multi-dst": [ + { + "scope": "both" + } + ] + } } }, "100.108.74.26": { @@ -328,8 +406,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -339,8 +423,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/multi-dst": [{ "scope": "both" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/multi-dst": [ + { + "scope": "both" + } + ] + } } }, "100.110.121.96": { @@ -369,8 +463,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -379,8 +479,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/multi-dst": [{ "scope": "both" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/multi-dst": [ + { + "scope": "both" + } + ] + } } }, "100.103.90.82": { @@ -409,8 +519,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -424,7 +540,13 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/multi-dst": [{ "scope": "both" }] } + "CapMap": { + "example.com/cap/multi-dst": [ + { + "scope": "both" + } + ] + } } }, "100.90.199.68": { @@ -453,8 +575,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -463,8 +591,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/multi-dst": [{ "scope": "both" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/multi-dst": [ + { + "scope": "both" + } + ] + } } } } @@ -502,8 +640,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -513,7 +657,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -552,8 +700,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -563,7 +717,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -617,8 +775,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -628,7 +792,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -667,8 +835,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -678,7 +852,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -732,8 +910,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -743,7 +927,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -782,8 +970,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -793,7 +987,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -830,7 +1028,13 @@ "CapGrant": [ { "Dsts": ["100.108.74.26/32", "fd7a:115c:a1e0::b901:4a87/128"], - "CapMap": { "example.com/cap/multi-dst": [{ "scope": "both" }] } + "CapMap": { + "example.com/cap/multi-dst": [ + { + "scope": "both" + } + ] + } } ] } @@ -858,11 +1062,23 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.108.74.26/32", "Cap": "example.com/cap/multi-dst", "Values": [{ "scope": "both" }] }, + { + "Dst": "100.108.74.26/32", + "Cap": "example.com/cap/multi-dst", + "Values": [ + { + "scope": "both" + } + ] + }, { "Dst": "fd7a:115c:a1e0::b901:4a87/128", "Cap": "example.com/cap/multi-dst", - "Values": [{ "scope": "both" }] + "Values": [ + { + "scope": "both" + } + ] } ] } @@ -893,8 +1109,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -904,8 +1126,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/multi-dst": [{ "scope": "both" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/multi-dst": [ + { + "scope": "both" + } + ] + } } }, "100.92.142.61": { @@ -933,8 +1165,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -945,8 +1183,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/multi-dst": [{ "scope": "both" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/multi-dst": [ + { + "scope": "both" + } + ] + } } }, "100.83.200.69": { @@ -974,8 +1222,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -985,8 +1239,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/multi-dst": [{ "scope": "both" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/multi-dst": [ + { + "scope": "both" + } + ] + } } }, "100.103.8.15": { @@ -1014,8 +1278,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -1025,8 +1295,18 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/multi-dst": [{ "scope": "both" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/multi-dst": [ + { + "scope": "both" + } + ] + } } }, "100.110.121.96": { @@ -1055,8 +1335,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -1065,8 +1351,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/multi-dst": [{ "scope": "both" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/multi-dst": [ + { + "scope": "both" + } + ] + } } }, "100.103.90.82": { @@ -1095,8 +1391,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -1110,7 +1412,13 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/multi-dst": [{ "scope": "both" }] } + "CapMap": { + "example.com/cap/multi-dst": [ + { + "scope": "both" + } + ] + } } }, "100.90.199.68": { @@ -1139,8 +1447,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -1149,8 +1463,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/multi-dst": [{ "scope": "both" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/multi-dst": [ + { + "scope": "both" + } + ] + } } } } @@ -1188,8 +1512,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1199,7 +1529,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1243,8 +1577,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1254,7 +1594,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1303,8 +1647,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1314,7 +1664,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1358,8 +1712,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1369,7 +1729,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1418,8 +1782,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1429,7 +1799,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1473,8 +1847,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -1484,7 +1864,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-V07.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-V07.json index eab8a5f3..824fc4f1 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-V07.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-V07.json @@ -38,7 +38,13 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["autogroup:internet"], "ip": ["tcp:443"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["autogroup:internet"], + "ip": ["tcp:443"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -61,7 +67,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-V09.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-V09.json index ac192bd1..192301f9 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-V09.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-V09.json @@ -50,7 +50,13 @@ "src": ["*"], "dst": ["tag:exit"], "ip": ["tcp:443"], - "app": { "example.com/cap/exit-mixed": [{ "mode": "proxy" }] } + "app": { + "example.com/cap/exit-mixed": [ + { + "mode": "proxy" + } + ] + } } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", @@ -75,7 +81,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -148,8 +156,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.85.66.106", "Ports": { "First": 443, "Last": 443 } }, - { "IP": "fd7a:115c:a1e0::7c37:426a", "Ports": { "First": 443, "Last": 443 } } + { + "IP": "100.85.66.106", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "IP": "fd7a:115c:a1e0::7c37:426a", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "IPProto": [6] }, @@ -163,7 +183,13 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "example.com/cap/exit-mixed": [{ "mode": "proxy" }] } + "CapMap": { + "example.com/cap/exit-mixed": [ + { + "mode": "proxy" + } + ] + } } ] } @@ -190,8 +216,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.85.66.106/32", "Ports": { "First": 443, "Last": 443 } }, - { "Net": "fd7a:115c:a1e0::7c37:426a/128", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "100.85.66.106/32", + "Ports": { + "First": 443, + "Last": 443 + } + }, + { + "Net": "fd7a:115c:a1e0::7c37:426a/128", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] }, @@ -217,11 +255,23 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.85.66.106/32", "Cap": "example.com/cap/exit-mixed", "Values": [{ "mode": "proxy" }] }, + { + "Dst": "100.85.66.106/32", + "Cap": "example.com/cap/exit-mixed", + "Values": [ + { + "mode": "proxy" + } + ] + }, { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "example.com/cap/exit-mixed", - "Values": [{ "mode": "proxy" }] + "Values": [ + { + "mode": "proxy" + } + ] } ] } @@ -252,8 +302,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -264,8 +320,18 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/exit-mixed": [{ "mode": "proxy" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/exit-mixed": [ + { + "mode": "proxy" + } + ] + } } }, "100.83.200.69": { @@ -293,8 +359,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -304,8 +376,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/exit-mixed": [{ "mode": "proxy" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/exit-mixed": [ + { + "mode": "proxy" + } + ] + } } }, "100.103.8.15": { @@ -333,8 +415,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -344,8 +432,18 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/exit-mixed": [{ "mode": "proxy" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/exit-mixed": [ + { + "mode": "proxy" + } + ] + } } }, "100.108.74.26": { @@ -373,8 +471,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -384,8 +488,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/exit-mixed": [{ "mode": "proxy" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/exit-mixed": [ + { + "mode": "proxy" + } + ] + } } }, "100.110.121.96": { @@ -414,8 +528,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -424,8 +544,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/exit-mixed": [{ "mode": "proxy" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/exit-mixed": [ + { + "mode": "proxy" + } + ] + } } }, "100.103.90.82": { @@ -454,8 +584,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -469,7 +605,13 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/exit-mixed": [{ "mode": "proxy" }] } + "CapMap": { + "example.com/cap/exit-mixed": [ + { + "mode": "proxy" + } + ] + } } }, "100.90.199.68": { @@ -498,8 +640,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -508,8 +656,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/exit-mixed": [{ "mode": "proxy" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/exit-mixed": [ + { + "mode": "proxy" + } + ] + } } } } @@ -547,8 +705,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -558,7 +722,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -627,8 +795,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -638,7 +812,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -707,8 +885,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -718,7 +902,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -787,8 +975,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -798,7 +992,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -867,8 +1065,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -878,7 +1082,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -947,8 +1155,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -958,7 +1172,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1027,8 +1245,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -1038,7 +1262,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-V10.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-V10.json index e708a7aa..bd6a9325 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-V10.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-V10.json @@ -50,7 +50,13 @@ "src": ["*"], "dst": ["tag:router"], "ip": ["tcp:80"], - "app": { "example.com/cap/router-mixed": [{ "role": "viewer" }] } + "app": { + "example.com/cap/router-mixed": [ + { + "role": "viewer" + } + ] + } } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", @@ -75,7 +81,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -167,8 +175,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -178,7 +192,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -228,8 +246,20 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "100.92.142.61", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "fd7a:115c:a1e0::3e37:8e3d", "Ports": { "First": 80, "Last": 80 } } + { + "IP": "100.92.142.61", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "fd7a:115c:a1e0::3e37:8e3d", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "IPProto": [6] }, @@ -243,7 +273,13 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "example.com/cap/router-mixed": [{ "role": "viewer" }] } + "CapMap": { + "example.com/cap/router-mixed": [ + { + "role": "viewer" + } + ] + } } ] } @@ -270,8 +306,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "100.92.142.61/32", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "fd7a:115c:a1e0::3e37:8e3d/128", "Ports": { "First": 80, "Last": 80 } } + { + "Net": "100.92.142.61/32", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "fd7a:115c:a1e0::3e37:8e3d/128", + "Ports": { + "First": 80, + "Last": 80 + } + } ], "Caps": [] }, @@ -297,11 +345,23 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.92.142.61/32", "Cap": "example.com/cap/router-mixed", "Values": [{ "role": "viewer" }] }, + { + "Dst": "100.92.142.61/32", + "Cap": "example.com/cap/router-mixed", + "Values": [ + { + "role": "viewer" + } + ] + }, { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "example.com/cap/router-mixed", - "Values": [{ "role": "viewer" }] + "Values": [ + { + "role": "viewer" + } + ] } ] } @@ -332,8 +392,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -343,8 +409,18 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/router-mixed": [{ "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/router-mixed": [ + { + "role": "viewer" + } + ] + } } }, "100.83.200.69": { @@ -372,8 +448,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -383,8 +465,18 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/router-mixed": [{ "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/router-mixed": [ + { + "role": "viewer" + } + ] + } } }, "100.103.8.15": { @@ -412,8 +504,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -423,8 +521,18 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/router-mixed": [{ "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/router-mixed": [ + { + "role": "viewer" + } + ] + } } }, "100.108.74.26": { @@ -452,8 +560,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -463,8 +577,18 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "example.com/cap/router-mixed": [{ "role": "viewer" }] } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "example.com/cap/router-mixed": [ + { + "role": "viewer" + } + ] + } } }, "100.110.121.96": { @@ -493,8 +617,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -503,8 +633,18 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "example.com/cap/router-mixed": [{ "role": "viewer" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "example.com/cap/router-mixed": [ + { + "role": "viewer" + } + ] + } } }, "100.103.90.82": { @@ -533,8 +673,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -548,7 +694,13 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "example.com/cap/router-mixed": [{ "role": "viewer" }] } + "CapMap": { + "example.com/cap/router-mixed": [ + { + "role": "viewer" + } + ] + } } }, "100.90.199.68": { @@ -577,8 +729,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -587,8 +745,18 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "example.com/cap/router-mixed": [{ "role": "viewer" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "example.com/cap/router-mixed": [ + { + "role": "viewer" + } + ] + } } } } @@ -631,8 +799,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -642,7 +816,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -711,8 +889,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -722,7 +906,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -791,8 +979,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -802,7 +996,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -871,8 +1069,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -882,7 +1086,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -951,8 +1159,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -962,7 +1176,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -1031,8 +1249,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -1042,7 +1266,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-V11.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-V11.json index 86e54308..ec8c9ab3 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-V11.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-V11.json @@ -39,7 +39,14 @@ } ] }, - "grants_section": [{ "src": ["tag:client"], "dst": ["10.33.0.0/16"], "via": ["tag:router"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["tag:client"], + "dst": ["10.33.0.0/16"], + "via": ["tag:router"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -62,7 +69,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -174,7 +183,15 @@ "packet_filter_rules": [ { "SrcIPs": ["100.83.200.69", "fd7a:115c:a1e0::c537:c845"], - "DstPorts": [{ "IP": "10.33.0.0/16", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "10.33.0.0/16", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -182,7 +199,15 @@ "IPProto": [6, 17, 1, 58], "Srcs": ["100.83.200.69/32", "fd7a:115c:a1e0::c537:c845/128"], "SrcCaps": null, - "Dsts": [{ "Net": "10.33.0.0/16", "Ports": { "First": 0, "Last": 65535 } }], + "Dsts": [ + { + "Net": "10.33.0.0/16", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ], "Caps": [] } ], @@ -217,8 +242,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -228,7 +259,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -297,8 +332,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -309,7 +350,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-V12.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-V12.json index a96746d0..7ad4c51b 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-V12.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-V12.json @@ -39,7 +39,14 @@ } ] }, - "grants_section": [{ "src": ["autogroup:member"], "dst": ["10.33.0.0/16"], "via": ["tag:router"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["autogroup:member"], + "dst": ["10.33.0.0/16"], + "via": ["tag:router"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -62,7 +69,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -181,7 +190,15 @@ "fd7a:115c:a1e0::2d01:c747", "fd7a:115c:a1e0::9e37:5a52" ], - "DstPorts": [{ "IP": "10.33.0.0/16", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "10.33.0.0/16", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -196,7 +213,15 @@ "fd7a:115c:a1e0::9e37:5a52/128" ], "SrcCaps": null, - "Dsts": [{ "Net": "10.33.0.0/16", "Ports": { "First": 0, "Last": 65535 } }], + "Dsts": [ + { + "Net": "10.33.0.0/16", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ], "Caps": [] } ], @@ -247,8 +272,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -257,7 +288,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -287,8 +322,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -331,8 +372,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -341,7 +388,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -520,8 +571,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -532,7 +589,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -601,8 +662,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -613,7 +680,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -682,8 +753,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -694,7 +771,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-V13.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-V13.json index 9e12260c..85e0d058 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-V13.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-V13.json @@ -40,7 +40,12 @@ ] }, "grants_section": [ - { "src": ["group:developers"], "dst": ["10.33.0.0/16"], "via": ["tag:router"], "ip": ["tcp:80", "tcp:443"] } + { + "src": ["group:developers"], + "dst": ["10.33.0.0/16"], + "via": ["tag:router"], + "ip": ["tcp:80", "tcp:443"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -64,7 +69,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -177,8 +184,20 @@ { "SrcIPs": ["100.110.121.96", "100.90.199.68", "fd7a:115c:a1e0::1737:7960", "fd7a:115c:a1e0::2d01:c747"], "DstPorts": [ - { "IP": "10.33.0.0/16", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "10.33.0.0/16", "Ports": { "First": 443, "Last": 443 } } + { + "IP": "10.33.0.0/16", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "10.33.0.0/16", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "IPProto": [6] } @@ -194,8 +213,20 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "10.33.0.0/16", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "10.33.0.0/16", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "10.33.0.0/16", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "10.33.0.0/16", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] } @@ -247,8 +278,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -257,7 +294,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -292,8 +333,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -302,7 +349,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -481,8 +532,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -493,7 +550,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -607,8 +668,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -619,7 +686,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-V17.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-V17.json index 9abe54c9..4751548c 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-V17.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-V17.json @@ -39,7 +39,14 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["10.33.0.0/16", "192.168.1.0/24"], "via": ["tag:router"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["10.33.0.0/16", "192.168.1.0/24"], + "via": ["tag:router"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -62,7 +69,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -154,8 +163,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -166,7 +181,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -215,7 +234,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "10.33.0.0/16", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "10.33.0.0/16", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -239,7 +266,15 @@ "fd7a:115c:a1e0::/48" ], "SrcCaps": null, - "Dsts": [{ "Net": "10.33.0.0/16", "Ports": { "First": 0, "Last": 65535 } }], + "Dsts": [ + { + "Net": "10.33.0.0/16", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ], "Caps": [] } ], @@ -269,8 +304,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -280,7 +321,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -309,8 +354,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -320,7 +371,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -349,8 +404,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -360,7 +421,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -389,8 +454,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -400,7 +471,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -430,8 +505,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -440,7 +521,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -470,8 +555,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -514,8 +605,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -524,7 +621,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -568,8 +669,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -580,7 +687,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -649,8 +760,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -661,7 +778,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -730,8 +851,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -742,7 +869,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -811,8 +942,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -823,7 +960,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -892,8 +1033,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -904,7 +1051,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -973,8 +1124,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -985,7 +1142,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-V19.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-V19.json index 720fc287..65224277 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-V19.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-V19.json @@ -49,7 +49,14 @@ { "src": ["autogroup:member"], "dst": ["tag:exit"], - "app": { "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] } + "app": { + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] + } } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", @@ -74,7 +81,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -151,7 +160,14 @@ "CapGrant": [ { "Dsts": ["100.85.66.106/32", "fd7a:115c:a1e0::7c37:426a/128"], - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] } + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] + } } ] } @@ -173,12 +189,22 @@ { "Dst": "100.85.66.106/32", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] }, { "Dst": "fd7a:115c:a1e0::7c37:426a/128", "Cap": "tailscale.com/cap/drive", - "Values": [{ "shares": ["*"], "access": "rw" }] + "Values": [ + { + "shares": ["*"], + "access": "rw" + } + ] } ] } @@ -230,8 +256,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -240,8 +272,19 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] + } } }, "100.103.90.82": { @@ -270,8 +313,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -285,7 +334,14 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] } + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] + } } }, "100.90.199.68": { @@ -314,8 +370,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -324,8 +386,19 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "tailscale.com/cap/drive": [{ "shares": ["*"], "access": "rw" }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "tailscale.com/cap/drive": [ + { + "shares": ["*"], + "access": "rw" + } + ] + } } } } @@ -521,7 +594,9 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -533,8 +608,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.110.121.96/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::1737:7960/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -564,8 +647,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -575,8 +664,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } }, "100.92.142.61": { @@ -622,7 +717,9 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -634,8 +731,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.103.90.82/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::9e37:5a52/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -665,8 +770,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -676,8 +787,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } }, "100.92.142.61": { @@ -723,7 +840,9 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } ] } @@ -735,8 +854,16 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "tailscale.com/cap/drive-sharer", "Values": null }, - { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "tailscale.com/cap/drive-sharer", "Values": null } + { + "Dst": "100.90.199.68/32", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + }, + { + "Dst": "fd7a:115c:a1e0::2d01:c747/128", + "Cap": "tailscale.com/cap/drive-sharer", + "Values": null + } ] } ], @@ -766,8 +893,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -777,8 +910,14 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, - "CapMap": { "tailscale.com/cap/drive-sharer": null } + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, + "CapMap": { + "tailscale.com/cap/drive-sharer": null + } } }, "100.92.142.61": { diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-V20.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-V20.json index 791989b3..cc7f9ed1 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-V20.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-V20.json @@ -50,7 +50,15 @@ { "src": ["autogroup:member"], "dst": ["tag:router"], - "app": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "app": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", @@ -75,7 +83,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -197,7 +207,15 @@ "CapGrant": [ { "Dsts": ["100.92.142.61/32", "fd7a:115c:a1e0::3e37:8e3d/128"], - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } ] } @@ -219,12 +237,24 @@ { "Dst": "100.92.142.61/32", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] }, { "Dst": "fd7a:115c:a1e0::3e37:8e3d/128", "Cap": "tailscale.com/cap/kubernetes", - "Values": [{ "impersonate": { "groups": ["system:masters"] } }] + "Values": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] } ] } @@ -276,8 +306,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -286,8 +322,20 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } }, "100.103.90.82": { @@ -316,8 +364,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -331,7 +385,15 @@ "LoginName": "monitorpasskeykradalby@passkey", "DisplayName": "monitorpasskeykradalby" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } }, "100.90.199.68": { @@ -360,8 +422,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -370,8 +438,20 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, - "CapMap": { "tailscale.com/cap/kubernetes": [{ "impersonate": { "groups": ["system:masters"] } }] } + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, + "CapMap": { + "tailscale.com/cap/kubernetes": [ + { + "impersonate": { + "groups": ["system:masters"] + } + } + ] + } } } } @@ -549,8 +629,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -560,7 +646,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -629,8 +719,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -640,7 +736,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -709,8 +809,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -720,7 +826,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-V21.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-V21.json index 894844ff..1842269f 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-V21.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-V21.json @@ -39,7 +39,14 @@ } ] }, - "grants_section": [{ "src": ["*"], "dst": ["10.33.0.0/16"], "via": ["tag:router", "tag:exit"], "ip": ["*"] }], + "grants_section": [ + { + "src": ["*"], + "dst": ["10.33.0.0/16"], + "via": ["tag:router", "tag:exit"], + "ip": ["*"] + } + ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", "api_response_code": 200 @@ -62,7 +69,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -154,8 +163,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -166,7 +181,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -215,7 +234,15 @@ "100.64.0.0-100.115.91.255", "fd7a:115c:a1e0::/48" ], - "DstPorts": [{ "IP": "10.33.0.0/16", "Ports": { "First": 0, "Last": 65535 } }] + "DstPorts": [ + { + "IP": "10.33.0.0/16", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ] } ], "packet_filter_matches": [ @@ -239,7 +266,15 @@ "fd7a:115c:a1e0::/48" ], "SrcCaps": null, - "Dsts": [{ "Net": "10.33.0.0/16", "Ports": { "First": 0, "Last": 65535 } }], + "Dsts": [ + { + "Net": "10.33.0.0/16", + "Ports": { + "First": 0, + "Last": 65535 + } + } + ], "Caps": [] } ], @@ -269,8 +304,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -280,7 +321,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -309,8 +354,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -320,7 +371,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -349,8 +404,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -360,7 +421,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -389,8 +454,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -400,7 +471,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -430,8 +505,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -440,7 +521,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -470,8 +555,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -514,8 +605,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -524,7 +621,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -568,8 +669,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -580,7 +687,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -649,8 +760,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -661,7 +778,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -730,8 +851,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -742,7 +869,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -811,8 +942,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -823,7 +960,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -892,8 +1033,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -904,7 +1051,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -973,8 +1124,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -985,7 +1142,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-V23.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-V23.json index 8621ad1e..802888d3 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-V23.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-V23.json @@ -40,7 +40,12 @@ ] }, "grants_section": [ - { "src": ["*"], "dst": ["10.33.0.0/16"], "via": ["tag:router"], "ip": ["tcp:22", "tcp:80", "tcp:443"] } + { + "src": ["*"], + "dst": ["10.33.0.0/16"], + "via": ["tag:router"], + "ip": ["tcp:22", "tcp:80", "tcp:443"] + } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", "api_method": "POST", @@ -64,7 +69,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -156,8 +163,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -168,7 +181,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -218,9 +235,27 @@ "fd7a:115c:a1e0::/48" ], "DstPorts": [ - { "IP": "10.33.0.0/16", "Ports": { "First": 22, "Last": 22 } }, - { "IP": "10.33.0.0/16", "Ports": { "First": 80, "Last": 80 } }, - { "IP": "10.33.0.0/16", "Ports": { "First": 443, "Last": 443 } } + { + "IP": "10.33.0.0/16", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "IP": "10.33.0.0/16", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "IP": "10.33.0.0/16", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "IPProto": [6] } @@ -247,9 +282,27 @@ ], "SrcCaps": null, "Dsts": [ - { "Net": "10.33.0.0/16", "Ports": { "First": 22, "Last": 22 } }, - { "Net": "10.33.0.0/16", "Ports": { "First": 80, "Last": 80 } }, - { "Net": "10.33.0.0/16", "Ports": { "First": 443, "Last": 443 } } + { + "Net": "10.33.0.0/16", + "Ports": { + "First": 22, + "Last": 22 + } + }, + { + "Net": "10.33.0.0/16", + "Ports": { + "First": 80, + "Last": 80 + } + }, + { + "Net": "10.33.0.0/16", + "Ports": { + "First": 443, + "Last": 443 + } + } ], "Caps": [] } @@ -280,8 +333,14 @@ "OS": "linux", "Hostname": "exit-node", "Services": [ - { "Proto": "peerapi4", "Port": 37000 }, - { "Proto": "peerapi6", "Port": 37000 } + { + "Proto": "peerapi4", + "Port": 37000 + }, + { + "Proto": "peerapi6", + "Port": 37000 + } ] }, "Created": "2026-02-23T00:13:20.566112173Z", @@ -291,7 +350,11 @@ "ComputedName": "exit-node", "ComputedNameWithHost": "exit-node" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -320,8 +383,14 @@ "OS": "linux", "Hostname": "tagged-client", "Services": [ - { "Proto": "peerapi4", "Port": 41378 }, - { "Proto": "peerapi6", "Port": 41378 } + { + "Proto": "peerapi4", + "Port": 41378 + }, + { + "Proto": "peerapi6", + "Port": 41378 + } ] }, "Created": "2026-02-23T00:13:11.017324028Z", @@ -331,7 +400,11 @@ "ComputedName": "tagged-client", "ComputedNameWithHost": "tagged-client" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -360,8 +433,14 @@ "OS": "linux", "Hostname": "tagged-prod", "Services": [ - { "Proto": "peerapi4", "Port": 37678 }, - { "Proto": "peerapi6", "Port": 37678 } + { + "Proto": "peerapi4", + "Port": 37678 + }, + { + "Proto": "peerapi6", + "Port": 37678 + } ] }, "Created": "2026-02-20T14:03:12.89283153Z", @@ -371,7 +450,11 @@ "ComputedName": "tagged-prod", "ComputedNameWithHost": "tagged-prod" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -400,8 +483,14 @@ "OS": "linux", "Hostname": "tagged-server", "Services": [ - { "Proto": "peerapi4", "Port": 46499 }, - { "Proto": "peerapi6", "Port": 46499 } + { + "Proto": "peerapi4", + "Port": 46499 + }, + { + "Proto": "peerapi6", + "Port": 46499 + } ] }, "Created": "2026-01-23T10:10:26.365653609Z", @@ -411,7 +500,11 @@ "ComputedName": "tagged-server", "ComputedNameWithHost": "tagged-server" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -441,8 +534,14 @@ "OS": "linux", "Hostname": "user-kris", "Services": [ - { "Proto": "peerapi4", "Port": 40159 }, - { "Proto": "peerapi6", "Port": 40159 } + { + "Proto": "peerapi4", + "Port": 40159 + }, + { + "Proto": "peerapi6", + "Port": 40159 + } ] }, "Created": "2026-02-20T14:09:34.803901523Z", @@ -451,7 +550,11 @@ "ComputedName": "user-kris", "ComputedNameWithHost": "user-kris" }, - "UserProfile": { "ID": 4538565228176803, "LoginName": "kristoffer@dalby.cc", "DisplayName": "kristoffer" }, + "UserProfile": { + "ID": 4538565228176803, + "LoginName": "kristoffer@dalby.cc", + "DisplayName": "kristoffer" + }, "CapMap": null } }, @@ -481,8 +584,14 @@ "OS": "linux", "Hostname": "user-mon", "Services": [ - { "Proto": "peerapi4", "Port": 33201 }, - { "Proto": "peerapi6", "Port": 33201 } + { + "Proto": "peerapi4", + "Port": 33201 + }, + { + "Proto": "peerapi6", + "Port": 33201 + } ] }, "Created": "2026-02-20T14:09:00.203639664Z", @@ -525,8 +634,14 @@ "OS": "linux", "Hostname": "user1", "Services": [ - { "Proto": "peerapi4", "Port": 46708 }, - { "Proto": "peerapi6", "Port": 46708 } + { + "Proto": "peerapi4", + "Port": 46708 + }, + { + "Proto": "peerapi6", + "Port": 46708 + } ] }, "Created": "2026-01-23T10:04:13.531671894Z", @@ -535,7 +650,11 @@ "ComputedName": "user1", "ComputedNameWithHost": "user1" }, - "UserProfile": { "ID": 4156223528223174, "LoginName": "kratail2tid@passkey", "DisplayName": "kratail2tid" }, + "UserProfile": { + "ID": 4156223528223174, + "LoginName": "kratail2tid@passkey", + "DisplayName": "kratail2tid" + }, "CapMap": null } } @@ -579,8 +698,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -591,7 +716,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -660,8 +789,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -672,7 +807,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -741,8 +880,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -753,7 +898,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -822,8 +971,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -834,7 +989,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -903,8 +1062,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -915,7 +1080,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, @@ -984,8 +1153,14 @@ "OS": "linux", "Hostname": "subnet-router", "Services": [ - { "Proto": "peerapi4", "Port": 63250 }, - { "Proto": "peerapi6", "Port": 63250 } + { + "Proto": "peerapi4", + "Port": 63250 + }, + { + "Proto": "peerapi6", + "Port": 63250 + } ] }, "Created": "2026-02-23T00:13:15.731478784Z", @@ -996,7 +1171,11 @@ "ComputedName": "subnet-router", "ComputedNameWithHost": "subnet-router" }, - "UserProfile": { "ID": 1260082990019555, "LoginName": "tagged-devices", "DisplayName": "Tagged Devices" }, + "UserProfile": { + "ID": 1260082990019555, + "LoginName": "tagged-devices", + "DisplayName": "Tagged Devices" + }, "CapMap": null } }, diff --git a/hscontrol/policy/v2/testdata/grant_results/GRANT-V25.json b/hscontrol/policy/v2/testdata/grant_results/GRANT-V25.json index 1372c2ca..d0fc2e43 100644 --- a/hscontrol/policy/v2/testdata/grant_results/GRANT-V25.json +++ b/hscontrol/policy/v2/testdata/grant_results/GRANT-V25.json @@ -48,7 +48,13 @@ { "src": ["autogroup:member"], "dst": ["autogroup:self"], - "app": { "example.com/cap/self-test": [{ "level": "basic" }] } + "app": { + "example.com/cap/self-test": [ + { + "level": "basic" + } + ] + } } ], "api_endpoint": "https://api.tailscale.com/api/v2/tailnet/kratail2tid%40passkey/acl", @@ -73,7 +79,9 @@ "user_id": 7489538288452506, "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "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", @@ -368,7 +376,13 @@ "CapGrant": [ { "Dsts": ["100.110.121.96/32", "fd7a:115c:a1e0::1737:7960/128"], - "CapMap": { "example.com/cap/self-test": [{ "level": "basic" }] } + "CapMap": { + "example.com/cap/self-test": [ + { + "level": "basic" + } + ] + } } ] } @@ -380,11 +394,23 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.110.121.96/32", "Cap": "example.com/cap/self-test", "Values": [{ "level": "basic" }] }, + { + "Dst": "100.110.121.96/32", + "Cap": "example.com/cap/self-test", + "Values": [ + { + "level": "basic" + } + ] + }, { "Dst": "fd7a:115c:a1e0::1737:7960/128", "Cap": "example.com/cap/self-test", - "Values": [{ "level": "basic" }] + "Values": [ + { + "level": "basic" + } + ] } ] } @@ -438,7 +464,13 @@ "CapGrant": [ { "Dsts": ["100.103.90.82/32", "fd7a:115c:a1e0::9e37:5a52/128"], - "CapMap": { "example.com/cap/self-test": [{ "level": "basic" }] } + "CapMap": { + "example.com/cap/self-test": [ + { + "level": "basic" + } + ] + } } ] } @@ -450,11 +482,23 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.103.90.82/32", "Cap": "example.com/cap/self-test", "Values": [{ "level": "basic" }] }, + { + "Dst": "100.103.90.82/32", + "Cap": "example.com/cap/self-test", + "Values": [ + { + "level": "basic" + } + ] + }, { "Dst": "fd7a:115c:a1e0::9e37:5a52/128", "Cap": "example.com/cap/self-test", - "Values": [{ "level": "basic" }] + "Values": [ + { + "level": "basic" + } + ] } ] } @@ -508,7 +552,13 @@ "CapGrant": [ { "Dsts": ["100.90.199.68/32", "fd7a:115c:a1e0::2d01:c747/128"], - "CapMap": { "example.com/cap/self-test": [{ "level": "basic" }] } + "CapMap": { + "example.com/cap/self-test": [ + { + "level": "basic" + } + ] + } } ] } @@ -520,11 +570,23 @@ "SrcCaps": null, "Dsts": [], "Caps": [ - { "Dst": "100.90.199.68/32", "Cap": "example.com/cap/self-test", "Values": [{ "level": "basic" }] }, + { + "Dst": "100.90.199.68/32", + "Cap": "example.com/cap/self-test", + "Values": [ + { + "level": "basic" + } + ] + }, { "Dst": "fd7a:115c:a1e0::2d01:c747/128", "Cap": "example.com/cap/self-test", - "Values": [{ "level": "basic" }] + "Values": [ + { + "level": "basic" + } + ] } ] } diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-a1_wildcard_acl_includes_routes_in_srcips.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-a1_wildcard_acl_includes_routes_in_srcips.json index 46146358..75475d5f 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-a1_wildcard_acl_includes_routes_in_srcips.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-a1_wildcard_acl_includes_routes_in_srcips.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-a2_tag_based_acl_excludes_routes.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-a2_tag_based_acl_excludes_routes.json index 179a0055..49552317 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-a2_tag_based_acl_excludes_routes.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-a2_tag_based_acl_excludes_routes.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-a3_explicit_subnet_filter_to_router.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-a3_explicit_subnet_filter_to_router.json index 732d79bb..50d19b0e 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-a3_explicit_subnet_filter_to_router.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-a3_explicit_subnet_filter_to_router.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-a3b_autogroup_member_to_subnet.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-a3b_autogroup_member_to_subnet.json index 61926732..1dfec777 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-a3b_autogroup_member_to_subnet.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-a3b_autogroup_member_to_subnet.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-a4_multiple_routes_same_router.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-a4_multiple_routes_same_router.json index c2ec24db..21740b1b 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-a4_multiple_routes_same_router.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-a4_multiple_routes_same_router.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-a5_host_alias_to_subnet.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-a5_host_alias_to_subnet.json index 44a586cb..ebcb4786 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-a5_host_alias_to_subnet.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-a5_host_alias_to_subnet.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-b10_exit_routes_not_in_primaryroutes.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-b10_exit_routes_not_in_primaryroutes.json index a42c0802..0a2fb9a4 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-b10_exit_routes_not_in_primaryroutes.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-b10_exit_routes_not_in_primaryroutes.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-b1_exit_routes_not_in_srcips.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-b1_exit_routes_not_in_srcips.json index b4fd7fba..c850a807 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-b1_exit_routes_not_in_srcips.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-b1_exit_routes_not_in_srcips.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-b2_tag_exit_excludes_exit_routes.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-b2_tag_exit_excludes_exit_routes.json index aacbbe2e..f071ba25 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-b2_tag_exit_excludes_exit_routes.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-b2_tag_exit_excludes_exit_routes.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-b3_exit_node_advertises_routes.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-b3_exit_node_advertises_routes.json index 11db46b8..a857caa2 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-b3_exit_node_advertises_routes.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-b3_exit_node_advertises_routes.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-b4_multi_router_has_both_route_types.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-b4_multi_router_has_both_route_types.json index 166ffe73..ef2c519b 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-b4_multi_router_has_both_route_types.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-b4_multi_router_has_both_route_types.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-b5_exit_with_wildcard_dst.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-b5_exit_with_wildcard_dst.json index 3cb201b9..e4bdee3d 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-b5_exit_with_wildcard_dst.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-b5_exit_with_wildcard_dst.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-b6_exit_node_option_field.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-b6_exit_node_option_field.json index 97a8a2ab..d09f3079 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-b6_exit_node_option_field.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-b6_exit_node_option_field.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-b7_multiple_exit_nodes.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-b7_multiple_exit_nodes.json index 301e5de5..5588fcf4 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-b7_multiple_exit_nodes.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-b7_multiple_exit_nodes.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-b8_autogroup_internet_no_filters.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-b8_autogroup_internet_no_filters.json index e43aec05..24a18fbb 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-b8_autogroup_internet_no_filters.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-b8_autogroup_internet_no_filters.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-b9_exit_routes_in_allowedips.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-b9_exit_routes_in_allowedips.json index 249aff93..4c0dea3b 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-b9_exit_routes_in_allowedips.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-b9_exit_routes_in_allowedips.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-d10_auto_approval_retroactive.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-d10_auto_approval_retroactive.json index 35c4899a..a2631ae0 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-d10_auto_approval_retroactive.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-d10_auto_approval_retroactive.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-d11_overlapping_auto_approvers.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-d11_overlapping_auto_approvers.json index 140f3bd8..97e94456 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-d11_overlapping_auto_approvers.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-d11_overlapping_auto_approvers.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-d1_basic_route_auto_approval.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-d1_basic_route_auto_approval.json index dd9b4431..6f70d274 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-d1_basic_route_auto_approval.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-d1_basic_route_auto_approval.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-d2_nested_prefix_approval.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-d2_nested_prefix_approval.json index 171746a9..53b1e8c6 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-d2_nested_prefix_approval.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-d2_nested_prefix_approval.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-d3_exact_prefix_approval.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-d3_exact_prefix_approval.json index d6c23070..04d41b79 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-d3_exact_prefix_approval.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-d3_exact_prefix_approval.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-d4_prefix_not_covered.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-d4_prefix_not_covered.json index a0705d4c..22267774 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-d4_prefix_not_covered.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-d4_prefix_not_covered.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-d5_wrong_tag_not_approved.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-d5_wrong_tag_not_approved.json index ba74c733..fd79becb 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-d5_wrong_tag_not_approved.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-d5_wrong_tag_not_approved.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-d6_exit_node_auto_approval.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-d6_exit_node_auto_approval.json index e2621403..58117dca 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-d6_exit_node_auto_approval.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-d6_exit_node_auto_approval.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-d7_exit_auto_approval_wrong_tag.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-d7_exit_auto_approval_wrong_tag.json index 0dc2fc22..7a12b2f9 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-d7_exit_auto_approval_wrong_tag.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-d7_exit_auto_approval_wrong_tag.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-d8_auto_approval_acl_interaction.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-d8_auto_approval_acl_interaction.json index 5cbe4d20..44f9adf8 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-d8_auto_approval_acl_interaction.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-d8_auto_approval_acl_interaction.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-d9_auto_approval_triggers_on_advertise.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-d9_auto_approval_triggers_on_advertise.json index a99afd67..b0722e2d 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-d9_auto_approval_triggers_on_advertise.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-d9_auto_approval_triggers_on_advertise.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-e1_ha_two_routers_same_subnet.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-e1_ha_two_routers_same_subnet.json index 147f37ec..2e84bb76 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-e1_ha_two_routers_same_subnet.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-e1_ha_two_routers_same_subnet.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-e2_ha_primary_in_allowedips.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-e2_ha_primary_in_allowedips.json index 7a1bef7c..0247e9d3 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-e2_ha_primary_in_allowedips.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-e2_ha_primary_in_allowedips.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-e3_ha_secondary_no_route_in_allowedips.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-e3_ha_secondary_no_route_in_allowedips.json index a1967538..e711deb1 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-e3_ha_secondary_no_route_in_allowedips.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-e3_ha_secondary_no_route_in_allowedips.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-e4_ha_both_get_filters_host_alias.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-e4_ha_both_get_filters_host_alias.json index 31874a95..38b1c38c 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-e4_ha_both_get_filters_host_alias.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-e4_ha_both_get_filters_host_alias.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-e5_first_advertiser_is_primary.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-e5_first_advertiser_is_primary.json index 0376befc..41babe10 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-e5_first_advertiser_is_primary.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-e5_first_advertiser_is_primary.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-f1_filter_on_destination_not_source.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-f1_filter_on_destination_not_source.json index 7a7c7dc9..256237ec 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-f1_filter_on_destination_not_source.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-f1_filter_on_destination_not_source.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-f2_subnet_as_acl_source.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-f2_subnet_as_acl_source.json index 5b98afb8..86abae9b 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-f2_subnet_as_acl_source.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-f2_subnet_as_acl_source.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-f3_wildcard_src_specific_dst.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-f3_wildcard_src_specific_dst.json index 907143de..8dd0abe6 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-f3_wildcard_src_specific_dst.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-f3_wildcard_src_specific_dst.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-f4_specific_src_wildcard_dst.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-f4_specific_src_wildcard_dst.json index b9beef80..b41010ff 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-f4_specific_src_wildcard_dst.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-f4_specific_src_wildcard_dst.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-f5_bidirectional_subnet_access.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-f5_bidirectional_subnet_access.json index 7cb0119f..a3c55539 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-f5_bidirectional_subnet_access.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-f5_bidirectional_subnet_access.json @@ -56,37 +56,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-f6_filter_srcips_expansion.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-f6_filter_srcips_expansion.json index 1a6b7ce5..f191ae3f 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-f6_filter_srcips_expansion.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-f6_filter_srcips_expansion.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-f7_filter_dstports_shows_acl_cidr.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-f7_filter_dstports_shows_acl_cidr.json index 0c2b0a9e..18b4284b 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-f7_filter_dstports_shows_acl_cidr.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-f7_filter_dstports_shows_acl_cidr.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-f8_route_enabled_acl_denies.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-f8_route_enabled_acl_denies.json index b3068be0..e8113746 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-f8_route_enabled_acl_denies.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-f8_route_enabled_acl_denies.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-f9_route_disabled_acl_allows.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-f9_route_disabled_acl_allows.json index b6af23d1..7b495d45 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-f9_route_disabled_acl_allows.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-f9_route_disabled_acl_allows.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-g1_port_restriction_subnet.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-g1_port_restriction_subnet.json index 5f0494a4..f90f5f66 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-g1_port_restriction_subnet.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-g1_port_restriction_subnet.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-g2_port_range_subnet.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-g2_port_range_subnet.json index 909377f0..faf6e921 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-g2_port_range_subnet.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-g2_port_range_subnet.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-g3_multiple_ports_subnet.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-g3_multiple_ports_subnet.json index 16fe82ac..5fdc7fd9 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-g3_multiple_ports_subnet.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-g3_multiple_ports_subnet.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-g4_protocol_icmp_subnet.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-g4_protocol_icmp_subnet.json index 2bbb5b37..0c50a85e 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-g4_protocol_icmp_subnet.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-g4_protocol_icmp_subnet.json @@ -52,37 +52,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-g5_protocol_tcp_only.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-g5_protocol_tcp_only.json index a17515eb..0ae337ce 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-g5_protocol_tcp_only.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-g5_protocol_tcp_only.json @@ -52,37 +52,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-g6_protocol_udp_only.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-g6_protocol_udp_only.json index 1d38c23e..6f74e2e6 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-g6_protocol_udp_only.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-g6_protocol_udp_only.json @@ -52,37 +52,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-g7_all_ports_wildcard.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-g7_all_ports_wildcard.json index b210a82a..13c1ade5 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-g7_all_ports_wildcard.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-g7_all_ports_wildcard.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-g8_default_ipproto.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-g8_default_ipproto.json index cf510d19..a02e66af 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-g8_default_ipproto.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-g8_default_ipproto.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-h10_very_small_prefix.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-h10_very_small_prefix.json index 29d997ac..78ee84c8 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-h10_very_small_prefix.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-h10_very_small_prefix.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-h11_ipv6_small_prefix.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-h11_ipv6_small_prefix.json index 4e0126ec..35f45c1b 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-h11_ipv6_small_prefix.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-h11_ipv6_small_prefix.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-h1_wildcard_srcips_format.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-h1_wildcard_srcips_format.json index 21bd80a5..e602db12 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-h1_wildcard_srcips_format.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-h1_wildcard_srcips_format.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-h2_wildcard_dstports_format.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-h2_wildcard_dstports_format.json index 2b055074..bb34ae88 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-h2_wildcard_dstports_format.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-h2_wildcard_dstports_format.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-h3_cgnat_range_expansion.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-h3_cgnat_range_expansion.json index 0a813f6c..49857f2f 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-h3_cgnat_range_expansion.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-h3_cgnat_range_expansion.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-h4_ipv6_range_in_srcips.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-h4_ipv6_range_in_srcips.json index 8d60118f..ce796e26 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-h4_ipv6_range_in_srcips.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-h4_ipv6_range_in_srcips.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-h5_subnet_overlaps_cgnat.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-h5_subnet_overlaps_cgnat.json index e999e39a..f9b1f1be 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-h5_subnet_overlaps_cgnat.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-h5_subnet_overlaps_cgnat.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-h6_loopback_routes_not_distributed.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-h6_loopback_routes_not_distributed.json index aa221e85..abaed0be 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-h6_loopback_routes_not_distributed.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-h6_loopback_routes_not_distributed.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-h7_two_nodes_same_subnet.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-h7_two_nodes_same_subnet.json index 1e4ec0e3..c41dabaa 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-h7_two_nodes_same_subnet.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-h7_two_nodes_same_subnet.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-h8_cgnat_overlap_blocked.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-h8_cgnat_overlap_blocked.json index 56a8b68d..aca95c52 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-h8_cgnat_overlap_blocked.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-h8_cgnat_overlap_blocked.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-h9_large_prefix_works.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-h9_large_prefix_works.json index 7006b5b9..4ba1c93c 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-h9_large_prefix_works.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-h9_large_prefix_works.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-i1_ipv6_subnet_route.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-i1_ipv6_subnet_route.json index 7c4d98f8..7853c87a 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-i1_ipv6_subnet_route.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-i1_ipv6_subnet_route.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-i2_ipv6_exit_route.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-i2_ipv6_exit_route.json index 0b78700e..f773a010 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-i2_ipv6_exit_route.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-i2_ipv6_exit_route.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-i3_ipv6_in_wildcard_srcips.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-i3_ipv6_in_wildcard_srcips.json index a38dd7c6..4e3a85b5 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-i3_ipv6_in_wildcard_srcips.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-i3_ipv6_in_wildcard_srcips.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-i4_ipv6_specific_acl.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-i4_ipv6_specific_acl.json index 38195910..3d5ab3ce 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-i4_ipv6_specific_acl.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-i4_ipv6_specific_acl.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-i5_ipv6_parent_child_routes.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-i5_ipv6_parent_child_routes.json index 2c75e750..73b425b8 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-i5_ipv6_parent_child_routes.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-i5_ipv6_parent_child_routes.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-i6_dual_stack_node.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-i6_dual_stack_node.json index 185e7116..34eabe05 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-i6_dual_stack_node.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-i6_dual_stack_node.json @@ -56,37 +56,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-i7_ipv6_exit_coverage.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-i7_ipv6_exit_coverage.json index d4539ac0..37941edc 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-i7_ipv6_exit_coverage.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-i7_ipv6_exit_coverage.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o10_acl_dest_covered_by_multiple.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o10_acl_dest_covered_by_multiple.json index 1f06fdd5..f4ab75ac 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o10_acl_dest_covered_by_multiple.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o10_acl_dest_covered_by_multiple.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o11_acl_dest_not_covered.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o11_acl_dest_not_covered.json index 7a7347c3..8ff7bf47 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o11_acl_dest_not_covered.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o11_acl_dest_not_covered.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o12_filter_dest_is_acl_cidr.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o12_filter_dest_is_acl_cidr.json index 5d560eb8..085417ec 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o12_filter_dest_is_acl_cidr.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o12_filter_dest_is_acl_cidr.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o1_overlapping_routes_not_merged.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o1_overlapping_routes_not_merged.json index 15820382..a56aa161 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o1_overlapping_routes_not_merged.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o1_overlapping_routes_not_merged.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o2_ha_routers_both_get_filter.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o2_ha_routers_both_get_filter.json index 6a5af3e7..f8cedc7e 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o2_ha_routers_both_get_filter.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o2_ha_routers_both_get_filter.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o3_parent_child_different_nodes.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o3_parent_child_different_nodes.json index 5911c08c..de3a20d5 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o3_parent_child_different_nodes.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o3_parent_child_different_nodes.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o4_three_way_hierarchy.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o4_three_way_hierarchy.json index 05fada14..3b6a5711 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o4_three_way_hierarchy.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o4_three_way_hierarchy.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o5_sibling_routes_with_parent_acl.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o5_sibling_routes_with_parent_acl.json index 41497386..d81e9aca 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o5_sibling_routes_with_parent_acl.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o5_sibling_routes_with_parent_acl.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o6_exit_route_expands_filter_dist.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o6_exit_route_expands_filter_dist.json index 73ac8f83..010fc6f4 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o6_exit_route_expands_filter_dist.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o6_exit_route_expands_filter_dist.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o7_specific_ip_targeting.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o7_specific_ip_targeting.json index c952cb5e..ef57da1c 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o7_specific_ip_targeting.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o7_specific_ip_targeting.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o8_same_node_overlapping_routes.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o8_same_node_overlapping_routes.json index 50ff4a0b..217fdf9a 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o8_same_node_overlapping_routes.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o8_same_node_overlapping_routes.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o9_different_nodes_same_route.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o9_different_nodes_same_route.json index 6f3487f6..964f1274 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-o9_different_nodes_same_route.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-o9_different_nodes_same_route.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-r1_exit_covers_external_dest.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-r1_exit_covers_external_dest.json index d57387bd..81c52f49 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-r1_exit_covers_external_dest.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-r1_exit_covers_external_dest.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-r2_parent_route_covers_child_dest.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-r2_parent_route_covers_child_dest.json index 949d5e6f..373e4ad5 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-r2_parent_route_covers_child_dest.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-r2_parent_route_covers_child_dest.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-r3_sibling_routes_no_coverage.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-r3_sibling_routes_no_coverage.json index 5b07d60f..26b861cf 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-r3_sibling_routes_no_coverage.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-r3_sibling_routes_no_coverage.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-r4_exact_match_route.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-r4_exact_match_route.json index e35066d5..95a8d507 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-r4_exact_match_route.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-r4_exact_match_route.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-r5_route_coverage_check_logic.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-r5_route_coverage_check_logic.json index 6ed33318..7b25d772 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-r5_route_coverage_check_logic.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-r5_route_coverage_check_logic.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-r6_ipv6_route_coverage.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-r6_ipv6_route_coverage.json index 69ba9e54..0e5f5e12 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-r6_ipv6_route_coverage.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-r6_ipv6_route_coverage.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-r7_exit_ipv6_coverage.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-r7_exit_ipv6_coverage.json index df313669..bc8286d5 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-r7_exit_ipv6_coverage.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-r7_exit_ipv6_coverage.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-r8_mixed_ipv4_ipv6_coverage.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-r8_mixed_ipv4_ipv6_coverage.json index a6bf9586..74210ffd 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-r8_mixed_ipv4_ipv6_coverage.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-r8_mixed_ipv4_ipv6_coverage.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-t1_tags_resolve_to_ips_not_routes.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-t1_tags_resolve_to_ips_not_routes.json index 5670c46b..e6dd662e 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-t1_tags_resolve_to_ips_not_routes.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-t1_tags_resolve_to_ips_not_routes.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-t2_tag_to_tag_with_exit.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-t2_tag_to_tag_with_exit.json index a3199340..459867e6 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-t2_tag_to_tag_with_exit.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-t2_tag_to_tag_with_exit.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-t3_tag_src_includes_all_tagged.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-t3_tag_src_includes_all_tagged.json index 2a9aa8d1..f39aeab8 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-t3_tag_src_includes_all_tagged.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-t3_tag_src_includes_all_tagged.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-t4_tag_dst_includes_all_tagged.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-t4_tag_dst_includes_all_tagged.json index d937f639..b44810d6 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-t4_tag_dst_includes_all_tagged.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-t4_tag_dst_includes_all_tagged.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client", diff --git a/hscontrol/policy/v2/testdata/routes_results/ROUTES-t5_multi_tag_node_in_both.json b/hscontrol/policy/v2/testdata/routes_results/ROUTES-t5_multi_tag_node_in_both.json index 40743abd..7646936d 100644 --- a/hscontrol/policy/v2/testdata/routes_results/ROUTES-t5_multi_tag_node_in_both.json +++ b/hscontrol/policy/v2/testdata/routes_results/ROUTES-t5_multi_tag_node_in_both.json @@ -51,37 +51,49 @@ "hostname": "big-router", "tags": ["tag:router"], "ipv4": "100.97.174.21", - "ipv6": "fd7a:115c:a1e0::5137:ae15" + "ipv6": "fd7a:115c:a1e0::5137:ae15", + "routable_ips": ["10.0.0.0/8"], + "approved_routes": ["10.0.0.0/8"] }, "exit-node": { "hostname": "exit-node", "tags": ["tag:exit"], "ipv4": "100.85.66.106", - "ipv6": "fd7a:115c:a1e0::7c37:426a" + "ipv6": "fd7a:115c:a1e0::7c37:426a", + "routable_ips": ["0.0.0.0/0", "::/0"], + "approved_routes": ["0.0.0.0/0", "::/0"] }, "ha-router1": { "hostname": "ha-router1", "tags": ["tag:ha"], "ipv4": "100.121.186.70", - "ipv6": "fd7a:115c:a1e0::6737:ba46" + "ipv6": "fd7a:115c:a1e0::6737:ba46", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "ha-router2": { "hostname": "ha-router2", "tags": ["tag:ha"], "ipv4": "100.117.104.82", - "ipv6": "fd7a:115c:a1e0::7437:6852" + "ipv6": "fd7a:115c:a1e0::7437:6852", + "routable_ips": ["192.168.1.0/24"], + "approved_routes": ["192.168.1.0/24"] }, "multi-router": { "hostname": "multi-router", "tags": ["tag:exit", "tag:router"], "ipv4": "100.119.241.111", - "ipv6": "fd7a:115c:a1e0::3337:f16f" + "ipv6": "fd7a:115c:a1e0::3337:f16f", + "routable_ips": ["172.16.0.0/24"], + "approved_routes": ["172.16.0.0/24"] }, "subnet-router": { "hostname": "subnet-router", "tags": ["tag:router"], "ipv4": "100.92.142.61", - "ipv6": "fd7a:115c:a1e0::3e37:8e3d" + "ipv6": "fd7a:115c:a1e0::3e37:8e3d", + "routable_ips": ["10.33.0.0/16"], + "approved_routes": ["10.33.0.0/16"] }, "tagged-client": { "hostname": "tagged-client",