fatedier/frp · error

proxy type not support

Error message

proxy type not support

What it means

NewProxy looks up a factory by the concrete type of the proxy configurer in proxyFactoryRegistry; when no factory is registered for that reflect.Type it returns "proxy type not support". This means the server received a NewProxy request for a proxy kind it cannot instantiate. It usually indicates a client/server capability mismatch rather than a typo in user config (unknown type names are rejected earlier at config validation).

Source

Thrown at server/proxy/proxy.go:562

		rc:             options.ResourceController,
		listeners:      make([]net.Listener, 0),
		poolCount:      options.PoolCount,
		getWorkConnFn:  options.GetWorkConnFn,
		serverCfg:      options.ServerCfg,
		encryptionKey:  options.EncryptionKey,
		limiter:        limiter,
		xl:             xl,
		ctx:            xlog.NewContext(ctx, xl),
		userInfo:       options.UserInfo,
		loginMsg:       options.LoginMsg,
		configurer:     configurer,
		wireProtocol:   options.WireProtocol,
		udpPacketCodec: options.UDPPacketCodec,
	}

	factory := proxyFactoryRegistry[reflect.TypeOf(configurer)]
	if factory == nil {
		return pxy, fmt.Errorf("proxy type not support")
	}
	pxy = factory(&basePxy)
	if pxy == nil {
		return nil, fmt.Errorf("proxy not created")
	}
	return pxy, nil
}

type Manager struct {
	// proxies indexed by proxy name
	pxys map[string]Proxy

	mu sync.RWMutex
}

func NewManager() *Manager {
	return &Manager{
		pxys: make(map[string]Proxy),

View on GitHub (pinned to 6c8a8d0a97)

Solutions

  1. Upgrade frps to at least the frpc version so the proxy type registry covers all types the client can send
  2. Downgrade or reconfigure the client to stop using the unsupported proxy type
  3. For custom proxy types, ensure the server-side package is imported so its init() registers the factory

Example fix

# before (frpc newer than frps)
frpc: type = somenewtype   # frps errors: proxy type not support

# after
# upgrade frps to the same release as frpc, or remove the proxy block
Defensive patterns

Strategy: try-catch

Try / catch

pxy, err := proxy.NewProxy(ctx, options)
if err != nil {
    if strings.Contains(err.Error(), "proxy type not support") {
        // capability mismatch: reject config or fall back to a supported type
        log.Printf("proxy type unsupported by this frps; pin client/server versions")
    }
    return err
}

Prevention

When it happens

Trigger: A newer frpc that supports a new proxy type connects to an older frps whose registry lacks that type; a custom fork adds a proxy type on the client but not the server; internal code calls proxy.NewProxy with a configurer whose package type was re-registered or renamed.

Common situations: Version skew between frpc and frps after upgrading only one side; custom builds that add proxy types on one component; importing proxy packages in a different order in a fork so init() registration does not happen.

Related errors


AI-assisted analysis of fatedier/frp@6c8a8d0a97 (2026-08-15). Data as JSON: /api/errors/9714faffe895be1b. Report an issue: GitHub.