diff --git a/hscontrol/derp/derp.go b/hscontrol/derp/derp.go index 9d358598..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 + } } } @@ -86,25 +90,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 +109,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")