cloudflare/cloudflared · error
ICMP proxy is not implemented on %s %s
Error message
ICMP proxy is not implemented on %s %s
What it means
cloudflared builds a fallback ICMP proxy on platforms/ architectures where a native packet-socket ICMP proxy is not implemented. This stub proxy returns errICMPProxyNotImplemented for every Request and Serve call, so the error simply means 'ICMP proxying is unavailable on this platform' (message interpolates runtime.GOOS/GOARCH).
Source
Thrown at ingress/icmp_generic.go:17
//go:build !darwin && !linux && (!windows || !cgo)
package ingress
import (
"context"
"fmt"
"net/netip"
"runtime"
"time"
"github.com/rs/zerolog"
"github.com/cloudflare/cloudflared/packet"
)
var errICMPProxyNotImplemented = fmt.Errorf("ICMP proxy is not implemented on %s %s", runtime.GOOS, runtime.GOARCH)
type icmpProxy struct{}
func (ip icmpProxy) Request(ctx context.Context, pk *packet.ICMP, responder ICMPResponder) error {
return errICMPProxyNotImplemented
}
func (ip *icmpProxy) Serve(ctx context.Context) error {
return errICMPProxyNotImplemented
}
func newICMPProxy(listenIP netip.Addr, logger *zerolog.Logger, idleTimeout time.Duration) (*icmpProxy, error) {
return nil, errICMPProxyNotImplemented
}
View on GitHub (pinned to 2253eeeb25)
Solutions
- Verify you are on a supported platform (linux/amd64, linux/arm64, windows, darwin); if not, rebuild cloudflared for a supported OS/arch.
- Reinstall the official release binary matching your platform instead of a source build that compiled in the stub icmp_generic.go.
- If ICMP proxying is genuinely unavailable, disable ICMP routing for the tunnel (remove icmp/UDP ingress rules) and route only TCP/HTTP traffic.
- For Linux, ensure the runtime supports packet sockets and you have the needed capabilities (CAP_NET_RAW) so the real proxy is chosen at startup.
- If the platform is required, contribute/implement a native icmpProxy for that GOOS/GOARCH; the stub is only a placeholder.
Example fix
// before (unsupported platform, stub selected by build tags) GOOS=freebsd GOARCH=arm64 make cloudflared # uses ingress/icmp_generic.go stub // after GOOS=linux GOARCH=amd64 make cloudflared # real ICMP proxy implementation
Defensive patterns
Strategy: fallback
Validate before calling
if strings.Contains(proxyErr.Error(), "ICMP proxy is not implemented") {
// platform lacks ICMP proxying; disable ICMP routing or rebuild for a supported GOOS/GOARCH
} Type guard
func icmpProxySupported(goos, goarch string) bool {
switch goos {
case "linux", "windows", "darwin":
return true
default:
return false
}
} Try / catch
if err := proxy.Request(ctx, pkt, responder); err != nil {
if errors.Is(err, errICMPProxyNotImplemented) {
log.Warn().Msg("ICMP proxying unavailable on this platform; skipping")
return nil // or fallback to non-ICMP transport
}
return fmt.Errorf("icmp request failed: %w", err)
} Prevention
- Deploy only on platforms with a native ICMP proxy (linux/windows/darwin).
- Check build tags per GOOS/GOARCH before building custom binaries.
- Do not configure ICMP ingress rules on unsupported platforms.
- Verify platform support at startup and log a warning instead of failing per-request.
When it happens
Trigger: Running cloudflared with ICMP/UDP proxy features on an OS/arch combination that has no native icmpProxy implementation (e.g. non-Linux/non-Windows/non-macOS builds, or unsupported architectures); any tunnel request that routes an ICMP packet to the stub icmpProxy.Request, or starting proxying via icmpProxy.Serve.
Common situations: Deploying cloudflared on unusual platforms (BSD, ARM variants without support) and using `cloudflared access` / WARP-style ICMP routing; building from source for an architecture where per-OS icmp_linux.go/icmp_windows.go/icmp_darwin.go files are excluded by build tags.
Understand the failure class
Background: "unsupported platform" / "not supported on this platform" errors: what they mean and how to fix them — this error's family across 47 libraries.
Related errors
- service installation is not supported on this operating syst
- service uninstallation is not supported on this operating sy
- Group ID %d is not between ping group %d to %d
- did not find group range in %s
- cannot send ICMPv6 using ICMPv4 proxy
AI-assisted analysis of cloudflare/cloudflared@2253eeeb25 (2026-09-06).
Data as JSON: /api/errors/31a6f7350bea83d2.
Report an issue: GitHub.