net/netcheck: use DERP frames as a signal for home region liveness

This uses the fact that we've received a frame from a given DERP region
within a certain time as a signal that the region is stil present (and
thus can still be a node's PreferredDERP / home region) even if we don't
get a STUN response from that region during a netcheck.

This should help avoid DERP flaps that occur due to losing STUN probes
while still having a valid and active TCP connection to the DERP server.

RELNOTE=Reduce home DERP flapping when there's still an active connection

Updates #8603

Signed-off-by: Andrew Dunham <andrew@du.nham.ca>
Change-Id: If7da6312581e1d434d5c0811697319c621e187a0
This commit is contained in:
Andrew Dunham
2023-12-08 15:03:15 -05:00
parent bac4890467
commit 727acf96a6
5 changed files with 123 additions and 14 deletions

View File

@@ -85,7 +85,7 @@ func runNetcheck(ctx context.Context, args []string) error {
}
for {
t0 := time.Now()
report, err := c.GetReport(ctx, dm)
report, err := c.GetReport(ctx, dm, nil)
d := time.Since(t0)
if netcheckArgs.verbose {
c.Logf("GetReport took %v; err=%v", d.Round(time.Millisecond), err)