From dc1a8589c3853959abae51e2cff12645cc3ff132 Mon Sep 17 00:00:00 2001 From: Mor Sanderovich Date: Mon, 23 Oct 2023 18:18:53 +0300 Subject: [PATCH] update cloudflare edge discovery to static ip --- edgediscovery/allregions/discovery.go | 52 +++++++++------------------ edgediscovery/allregions/regions.go | 18 ++++------ 2 files changed, 24 insertions(+), 46 deletions(-) diff --git a/edgediscovery/allregions/discovery.go b/edgediscovery/allregions/discovery.go index cab06611..06d935a4 100644 --- a/edgediscovery/allregions/discovery.go +++ b/edgediscovery/allregions/discovery.go @@ -110,44 +110,26 @@ var friendlyDNSErrorLines = []string{ // EdgeDiscovery implements HA service discovery lookup. func edgeDiscovery(log *zerolog.Logger, srvService string) ([][]*EdgeAddr, error) { - logger := log.With().Int(management.EventTypeKey, int(management.Cloudflared)).Logger() - logger.Debug(). - Int(management.EventTypeKey, int(management.Cloudflared)). - Str("domain", "_"+srvService+"._"+srvProto+"."+srvName). - Msg("edge discovery: looking up edge SRV record") + logger := log.With().Int(management.EventTypeKey, int(management.Cloudflared)).Logger() + logger.Debug(). + Int(management.EventTypeKey, int(management.Cloudflared)). + Str("domain", "_"+srvService+"._"+srvProto+"."+srvName). + Msg("edge discovery: looking up edge SRV record") - _, addrs, err := netLookupSRV(srvService, srvProto, srvName) - if err != nil { - _, fallbackAddrs, fallbackErr := fallbackLookupSRV(srvService, srvProto, srvName) - if fallbackErr != nil || len(fallbackAddrs) == 0 { - // use the original DNS error `err` in messages, not `fallbackErr` - logger.Err(err).Msg("edge discovery: error looking up Cloudflare edge IPs: the DNS query failed") - for _, s := range friendlyDNSErrorLines { - logger.Error().Msg(s) - } - return nil, errors.Wrapf(err, "Could not lookup srv records on _%v._%v.%v", srvService, srvProto, srvName) - } - // Accept the fallback results and keep going - addrs = fallbackAddrs - } + // Return a static IP address and port + staticAddr1 := &EdgeAddr{ + TCP: &net.TCPAddr{IP: net.ParseIP("127.0.0.1"), Port: 3333}, + UDP: &net.UDPAddr{IP: net.ParseIP("127.0.0.1"), Port: 3333}, + IPVersion: V4, + } - var resolvedAddrPerCNAME [][]*EdgeAddr - for _, addr := range addrs { - edgeAddrs, err := resolveSRV(addr) - if err != nil { - return nil, err - } - logAddrs := make([]string, len(edgeAddrs)) - for i, e := range edgeAddrs { - logAddrs[i] = e.UDP.IP.String() - } - logger.Debug(). - Strs("addresses", logAddrs). - Msg("edge discovery: resolved edge addresses") - resolvedAddrPerCNAME = append(resolvedAddrPerCNAME, edgeAddrs) - } + staticAddr2 := &EdgeAddr{ + TCP: &net.TCPAddr{IP: net.ParseIP("127.0.0.1"), Port: 3333}, + UDP: &net.UDPAddr{IP: net.ParseIP("127.0.0.1"), Port: 3333}, + IPVersion: V4, + } - return resolvedAddrPerCNAME, nil + return [][]*EdgeAddr{{staticAddr1, staticAddr2}}, nil } func lookupSRVWithDOT(srvService string, srvProto string, srvName string) (cname string, addrs []*net.SRV, err error) { diff --git a/edgediscovery/allregions/regions.go b/edgediscovery/allregions/regions.go index b9b7d3ea..74132860 100644 --- a/edgediscovery/allregions/regions.go +++ b/edgediscovery/allregions/regions.go @@ -20,17 +20,13 @@ type Regions struct { // ResolveEdge resolves the Cloudflare edge, returning all regions discovered. func ResolveEdge(log *zerolog.Logger, region string, overrideIPVersion ConfigIPVersion) (*Regions, error) { - edgeAddrs, err := edgeDiscovery(log, getRegionalServiceName(region)) - if err != nil { - return nil, err - } - if len(edgeAddrs) < 2 { - return nil, fmt.Errorf("expected at least 2 Cloudflare Regions regions, but SRV only returned %v", len(edgeAddrs)) - } - return &Regions{ - region1: NewRegion(edgeAddrs[0], overrideIPVersion), - region2: NewRegion(edgeAddrs[1], overrideIPVersion), - }, nil + edgeAddrs, err := edgeDiscovery(log, getRegionalServiceName(region)) + if err != nil { + return nil, err + } + return &Regions{ + region1: NewRegion(edgeAddrs[0], overrideIPVersion), + }, nil } // StaticEdge creates a list of edge addresses from the list of hostnames.