mirror of
https://github.com/juanfont/headscale.git
synced 2026-04-23 00:58:43 +02:00
types: include ExitRoutes in HasNetworkChanges
When exit routes are approved, SubnetRoutes remains empty because exit routes (0.0.0.0/0, ::/0) are classified separately. Without checking ExitRoutes, the PolicyManager cache is not invalidated on exit route approval, causing stale filter rules that lack via grant entries for autogroup:internet destinations. Updates #2180
This commit is contained in:
@@ -1030,6 +1030,10 @@ func (nv NodeView) HasNetworkChanges(other NodeView) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !slices.Equal(nv.ExitRoutes(), other.ExitRoutes()) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -958,6 +958,37 @@ func TestHasNetworkChanges(t *testing.T) {
|
|||||||
},
|
},
|
||||||
changed: false,
|
changed: false,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "ExitRoutes approved",
|
||||||
|
old: &Node{
|
||||||
|
ID: 1,
|
||||||
|
IPv4: mustIPPtr("100.64.0.1"),
|
||||||
|
Hostinfo: &tailcfg.Hostinfo{RoutableIPs: []netip.Prefix{netip.MustParsePrefix("0.0.0.0/0"), netip.MustParsePrefix("::/0")}},
|
||||||
|
},
|
||||||
|
new: &Node{
|
||||||
|
ID: 1,
|
||||||
|
IPv4: mustIPPtr("100.64.0.1"),
|
||||||
|
Hostinfo: &tailcfg.Hostinfo{RoutableIPs: []netip.Prefix{netip.MustParsePrefix("0.0.0.0/0"), netip.MustParsePrefix("::/0")}},
|
||||||
|
ApprovedRoutes: []netip.Prefix{netip.MustParsePrefix("0.0.0.0/0"), netip.MustParsePrefix("::/0")},
|
||||||
|
},
|
||||||
|
changed: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "ExitRoutes unchanged when SubnetRoutes change",
|
||||||
|
old: &Node{
|
||||||
|
ID: 1,
|
||||||
|
IPv4: mustIPPtr("100.64.0.1"),
|
||||||
|
Hostinfo: &tailcfg.Hostinfo{RoutableIPs: []netip.Prefix{netip.MustParsePrefix("0.0.0.0/0"), netip.MustParsePrefix("::/0"), netip.MustParsePrefix("10.0.0.0/24")}},
|
||||||
|
ApprovedRoutes: []netip.Prefix{netip.MustParsePrefix("0.0.0.0/0"), netip.MustParsePrefix("::/0")},
|
||||||
|
},
|
||||||
|
new: &Node{
|
||||||
|
ID: 1,
|
||||||
|
IPv4: mustIPPtr("100.64.0.1"),
|
||||||
|
Hostinfo: &tailcfg.Hostinfo{RoutableIPs: []netip.Prefix{netip.MustParsePrefix("0.0.0.0/0"), netip.MustParsePrefix("::/0"), netip.MustParsePrefix("10.0.0.0/24")}},
|
||||||
|
ApprovedRoutes: []netip.Prefix{netip.MustParsePrefix("0.0.0.0/0"), netip.MustParsePrefix("::/0"), netip.MustParsePrefix("10.0.0.0/24")},
|
||||||
|
},
|
||||||
|
changed: true,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
|
|||||||
Reference in New Issue
Block a user