From 6d9ad7fe5def7cc9ed8cadd2585fc914f351839e Mon Sep 17 00:00:00 2001 From: Andrey Bobelev Date: Wed, 14 May 2025 15:04:31 +0300 Subject: [PATCH 1/2] chore(derp): prioritize loading DERP maps from URLs This allows users to override default entries provided via URL --- hscontrol/derp/derp.go | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/hscontrol/derp/derp.go b/hscontrol/derp/derp.go index 9d358598..8f2e0753 100644 --- a/hscontrol/derp/derp.go +++ b/hscontrol/derp/derp.go @@ -86,25 +86,6 @@ func GetDERPMap(cfg types.DERPConfig) *tailcfg.DERPMap { derpMaps = append(derpMaps, cfg.DERPMap) } - for _, path := range cfg.Paths { - log.Debug(). - Str("func", "GetDERPMap"). - Str("path", path). - Msg("Loading DERPMap from path") - derpMap, err := loadDERPMapFromPath(path) - if err != nil { - log.Error(). - Str("func", "GetDERPMap"). - Str("path", path). - Err(err). - Msg("Could not load DERP map from path") - - break - } - - derpMaps = append(derpMaps, derpMap) - } - for _, addr := range cfg.URLs { derpMap, err := loadDERPMapFromURL(addr) log.Debug(). @@ -124,6 +105,25 @@ func GetDERPMap(cfg types.DERPConfig) *tailcfg.DERPMap { derpMaps = append(derpMaps, derpMap) } + for _, path := range cfg.Paths { + log.Debug(). + Str("func", "GetDERPMap"). + Str("path", path). + Msg("Loading DERPMap from path") + derpMap, err := loadDERPMapFromPath(path) + if err != nil { + log.Error(). + Str("func", "GetDERPMap"). + Str("path", path). + Err(err). + Msg("Could not load DERP map from path") + + break + } + + derpMaps = append(derpMaps, derpMap) + } + derpMap := mergeDERPMaps(derpMaps) log.Trace().Interface("derpMap", derpMap).Msg("DERPMap loaded") From 7a2016ca62e4b1d28e4a341dda3563e3a0edddeb Mon Sep 17 00:00:00 2001 From: Andrey Bobelev Date: Wed, 14 May 2025 15:24:40 +0300 Subject: [PATCH 2/2] chore(derp): allow nil regions in DERPMaps Previously, nil regions were not properly handled. This change allows users to disable regions in DERPMaps. Particularly useful to disable some official regions. --- hscontrol/derp/derp.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/hscontrol/derp/derp.go b/hscontrol/derp/derp.go index 8f2e0753..95fdacc8 100644 --- a/hscontrol/derp/derp.go +++ b/hscontrol/derp/derp.go @@ -73,7 +73,11 @@ func mergeDERPMaps(derpMaps []*tailcfg.DERPMap) *tailcfg.DERPMap { for _, derpMap := range derpMaps { for id, region := range derpMap.Regions { - result.Regions[id] = region + if region == nil { + delete(result.Regions, id) + } else { + result.Regions[id] = region + } } }