pull/18368/merge
Alex Valiushko 2 days ago committed by GitHub
commit e7ec585fc7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -422,7 +422,7 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
tailscale.com/util/cibuild from tailscale.com/health+
tailscale.com/util/clientmetric from tailscale.com/control/controlclient+
tailscale.com/util/cloudenv from tailscale.com/net/dns/resolver+
tailscale.com/util/cloudinfo from tailscale.com/wgengine/magicsock
tailscale.com/util/cloudinfo from tailscale.com/wgengine/magicsock+
tailscale.com/util/cmpver from tailscale.com/net/dns+
tailscale.com/util/ctxkey from tailscale.com/ipn/ipnlocal+
💣 tailscale.com/util/deephash from tailscale.com/util/syspolicy/setting

@ -41,6 +41,7 @@ import (
"tailscale.com/types/logger"
"tailscale.com/types/nettype"
"tailscale.com/types/views"
"tailscale.com/util/cloudinfo"
"tailscale.com/util/eventbus"
"tailscale.com/util/set"
"tailscale.com/util/usermetric"
@ -78,6 +79,7 @@ type Server struct {
closeCh chan struct{}
netChecker *netcheck.Client
metrics *metrics
cloudInfo *cloudinfo.CloudInfo // used to query cloud metadata services
mu sync.Mutex // guards the following fields
macSecrets views.Slice[[blake2s.Size]byte] // [0] is most recent, max 2 elements
@ -333,6 +335,7 @@ func NewServer(logf logger.Logf, port uint16, onlyStaticAddrPorts bool, metrics
onlyStaticAddrPorts: onlyStaticAddrPorts,
serverEndpointByDisco: make(map[key.SortedPairOfDiscoPublic]*serverEndpoint),
nextVNI: minVNI,
cloudInfo: cloudinfo.New(logf),
}
s.discoPublic = s.disco.Public()
s.metrics = registerMetrics(metrics)
@ -398,6 +401,8 @@ func (s *Server) startPacketReaders() {
func (s *Server) addrDiscoveryLoop() {
defer s.wg.Done()
ctx, cancel := context.WithCancel(context.Background())
defer cancel() // propagate [s.closeCh] to ctx
timer := time.NewTimer(0) // fire immediately
defer timer.Stop()
@ -421,6 +426,22 @@ func (s *Server) addrDiscoveryLoop() {
}
}
// get cloud metadata service addresses
cloudIPs, err := s.cloudInfo.GetPublicIPs(ctx)
if err != nil {
s.logf("error querying cloud metadata service IPs: %v", err)
} else {
for _, ip := range cloudIPs {
if ip.IsValid() {
if ip.Is4() {
addrPorts.Add(netip.AddrPortFrom(ip, s.uc4Port))
} else {
addrPorts.Add(netip.AddrPortFrom(ip, s.uc6Port))
}
}
}
}
dm := s.getDERPMap()
if dm == nil {
// We don't have a DERPMap which is required to dynamically

Loading…
Cancel
Save