@@ -15,22 +15,24 @@ import (
15
15
// NewDERPMap constructs a DERPMap from a set of STUN addresses and optionally a remote
16
16
// URL to fetch a mapping from e.g. https://controlplane.tailscale.com/derpmap/default.
17
17
func NewDERPMap (ctx context.Context , region * tailcfg.DERPRegion , stunAddrs []string , remoteURL string ) (* tailcfg.DERPMap , error ) {
18
- for index , stunAddr := range stunAddrs {
19
- host , rawPort , err := net .SplitHostPort (stunAddr )
20
- if err != nil {
21
- return nil , xerrors .Errorf ("split host port for %q: %w" , stunAddr , err )
22
- }
23
- port , err := strconv .Atoi (rawPort )
24
- if err != nil {
25
- return nil , xerrors .Errorf ("parse port for %q: %w" , stunAddr , err )
18
+ if region != nil {
19
+ for index , stunAddr := range stunAddrs {
20
+ host , rawPort , err := net .SplitHostPort (stunAddr )
21
+ if err != nil {
22
+ return nil , xerrors .Errorf ("split host port for %q: %w" , stunAddr , err )
23
+ }
24
+ port , err := strconv .Atoi (rawPort )
25
+ if err != nil {
26
+ return nil , xerrors .Errorf ("parse port for %q: %w" , stunAddr , err )
27
+ }
28
+ region .Nodes = append ([]* tailcfg.DERPNode {{
29
+ Name : fmt .Sprintf ("%dstun%d" , region .RegionID , index ),
30
+ RegionID : region .RegionID ,
31
+ HostName : host ,
32
+ STUNOnly : true ,
33
+ STUNPort : port ,
34
+ }}, region .Nodes ... )
26
35
}
27
- region .Nodes = append ([]* tailcfg.DERPNode {{
28
- Name : fmt .Sprintf ("%dstun%d" , region .RegionID , index ),
29
- RegionID : region .RegionID ,
30
- HostName : host ,
31
- STUNOnly : true ,
32
- STUNPort : port ,
33
- }}, region .Nodes ... )
34
36
}
35
37
36
38
derpMap := & tailcfg.DERPMap {
@@ -51,10 +53,12 @@ func NewDERPMap(ctx context.Context, region *tailcfg.DERPRegion, stunAddrs []str
51
53
return nil , xerrors .Errorf ("fetch derpmap: %w" , err )
52
54
}
53
55
}
54
- _ , conflicts := derpMap .Regions [region .RegionID ]
55
- if conflicts {
56
- return nil , xerrors .Errorf ("the default region ID conflicts with a remote region from %q" , remoteURL )
56
+ if region != nil {
57
+ _ , conflicts := derpMap .Regions [region .RegionID ]
58
+ if conflicts {
59
+ return nil , xerrors .Errorf ("the default region ID conflicts with a remote region from %q" , remoteURL )
60
+ }
61
+ derpMap .Regions [region .RegionID ] = region
57
62
}
58
- derpMap .Regions [region .RegionID ] = region
59
63
return derpMap , nil
60
64
}
0 commit comments