// the find
fatedier/frp
A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
frp is a reverse proxy that tunnels local services through a public server, bypassing NAT and firewalls. You run frps on a VPS with a public IP, frpc on the machine behind NAT, and traffic flows through. It handles TCP, UDP, HTTP/S, with extras like P2P hole-punching, KCP/QUIC transports, and virtual networking.
The protocol support is genuinely broad — STCP for private tunnels, XTCP for P2P direct connections when the relay latency matters, tcpmux for sharing a single port across many SSH targets. The config system is clean TOML with Go template support, environment variable interpolation, and hot-reload without restart. The dynamic store API lets you create and delete proxies at runtime through an HTTP API, which makes it usable as a programmable tunnel layer rather than just a static config file. Test coverage is real: there are e2e tests that actually spin up frpc/frps pairs and verify traffic flows.
V2 has been 'coming soon' for years and the author's own README admits it's stalled due to time constraints — you are betting on a project in maintenance mode. The server plugin system is an HTTP webhook bolted on from the outside; you run a separate process, frps calls it for auth/lifecycle events, and that's about as far as extensibility goes without forking. No built-in rate limiting per-client on the server side beyond bandwidth caps per proxy, so a misconfigured or malicious frpc client can consume all your server's connections. The monitoring story is in-memory only and resets on restart — Prometheus metrics help, but there's no persistent audit trail of which clients connected when.