cloudflare/cloudflared · error
failed to resolve any edge address
Error message
failed to resolve any edge address
What it means
StaticEdge builds the edge address list directly from user-supplied hostnames (mainly for testing connectivity), resolving each via ResolveAddrs without SRV lookup. This error is thrown when none of the provided hostnames could be resolved to any IP address, so there is no edge address to connect to. It means the entire user-provided hostname list failed DNS resolution.
Source
Thrown at edgediscovery/allregions/regions.go:41
edgeAddrs, err := EdgeDiscovery(log, RegionalServiceName(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
}
// StaticEdge creates a list of edge addresses from the list of hostnames.
// Mainly used for testing connectivity.
func StaticEdge(hostnames []string, log *zerolog.Logger) (*Regions, error) {
resolved := ResolveAddrs(hostnames, log)
if len(resolved) == 0 {
return nil, fmt.Errorf("failed to resolve any edge address")
}
return NewNoResolve(resolved), nil
}
// NewNoResolve doesn't resolve the edge. Instead it just uses the given addresses.
// You probably only need this for testing.
func NewNoResolve(addrs []*EdgeAddr) *Regions {
region1 := make([]*EdgeAddr, 0)
region2 := make([]*EdgeAddr, 0)
for i, v := range addrs {
if i%2 == 0 {
region1 = append(region1, v)
} else {
region2 = append(region2, v)
}
}
return &Regions{View on GitHub (pinned to 2253eeeb25)
Solutions
- Check the hostnames for typos and verify each resolves on this machine: 'nslookup <hostname>' (or 'getent hosts <hostname>'); correct or remove the bad entries.
- Fix the machine's DNS setup — /etc/resolv.conf, VPN, or corporate resolver — so at least one hostname resolves.
- Use literal IPs instead of hostnames when DNS is unavailable, since addresses don't need resolving.
- If this was used for connectivity testing, confirm the intended hostnames are the correct Cloudflare edge endpoints (port 7844) reachable from your network.
Example fix
// before // edge-addresses = ["edge1.example.internal", "edge2.example.internal"] // none resolve // after // edge-addresses = ["198.41.192.7:7844", "198.41.200.13:7844"]
Defensive patterns
Strategy: validation
Validate before calling
func allHostnamesResolve(hostnames []string) error {
for _, h := range hostnames {
if _, err := net.LookupHost(h); err != nil {
return fmt.Errorf("hostname %q does not resolve: %w", h, err)
}
}
return nil
}
// call before constructing the static edge config Try / catch
regions, err := allregions.StaticEdge(hostnames, log)
if err != nil {
if strings.Contains(err.Error(), "failed to resolve any edge address") {
return fmt.Errorf("check --edge hostnames and this machine's DNS: %w", err)
}
return err
} Prevention
- Validate every hostname with nslookup/getent hosts on the target machine before putting it in config
- Prefer literal IPs in edge-address lists when DNS availability is uncertain
- Confirm VPN/split-horizon DNS is up so internal hostnames resolve
- Keep the hostname list short and sourced from a reviewed config file, not ad-hoc CLI input
When it happens
Trigger: Calling StaticEdge(hostnames, log) where ResolveAddrs returns an empty slice because every hostname in the list is unresolvable — mistyped hostnames, names absent from DNS, or a resolver that fails for all of them (len(resolved) == 0).
Common situations: Typo'd hostnames in --edge or test configuration; using internal hostnames that the machine's resolver cannot see (VPN down, split-horizon DNS); testing in an isolated network with no DNS at all; hostnames that only exist in /etc/hosts on another machine.
Related errors
- too many addresses provided, max: 10
- invalid edge-bind-address %s: %v
- invalid %s provided: %w
- invalid value for edge-bind-address: %s
- IPv4 bind address is specified, but edge-ip-version is IPv6
AI-assisted analysis of cloudflare/cloudflared@2253eeeb25 (2026-09-06).
Data as JSON: /api/errors/8de5ed5e5a58bacb.
Report an issue: GitHub.