LinuxCommandLibrary

frp

Expose local services behind NAT/firewall

TLDR

View documentation for frpc, the frp client component

$ tldr frpc
copy

View documentation for frps, the frp server component
$ tldr frps
copy

SYNOPSIS

frps [-c <config_file>] [global_options]
frpc [-c <config_file>] [global_options]

PARAMETERS

-c, --config_file <file>
    Path to configuration file (default: frps.ini or frpc.ini)

--log-level <level>
    Log level: trace, debug, info, warn, error (default: info)

--log-file <file>
    Log output file path

--log-way <way>
    Log output way: console, file (default: console)

--token <token>
    Access token for authentication

--heartbeats <timeout>
    Heartbeat timeout in seconds (default: 30)

--bind-addr <addr>
    Bind address for frps (default: 0.0.0.0:7000)

--bind-port <port>
    Bind port for frps (default: 7000)

--vhost-http-port <port>
    HTTP virtual host port for frps (default: 80)

--vhost-https-port <port>
    HTTPS virtual host port for frps (default: 443)

--dashboard-port <port>
    Dashboard port (default: 7500)

--dashboard-user <user>
    Dashboard username

--dashboard-pwd <pwd>
    Dashboard password

--version
    Print version information

-h, --help
    Show help message

DESCRIPTION

frp (Fast Reverse Proxy) is a high-performance, open-source tool designed to expose local services behind NAT or firewalls to the internet. It enables intranet penetration by creating secure tunnels between a public-facing server (frps) and a client (frpc).

The server (frps) runs on a machine with a public IP, listening for connections on specified ports. The client (frpc), running on the local machine, connects to the server and forwards traffic for local services (e.g., web servers, SSH, databases) through the tunnel. Supports multiple protocols including TCP, UDP, HTTP, HTTPS, WebSocket, STCP (TCP over proxy), XTCP, SUDP, HTTP2, and P2P modes.

Key features include multiplexing (multiple tunnels over one connection), load balancing, encryption (TLS), authentication (token, OIDC), and dashboard for monitoring. Written in Go, it's lightweight, cross-platform (Linux, Windows, macOS, ARM), and handles high concurrency efficiently. Ideal for remote access, game servers, IoT devices, or temporary public exposure without port forwarding.

Configuration is primarily via INI files (frps.ini, frpc.toml/ini), with command-line flags for global settings. Usage involves deploying frps publicly, configuring proxies in client ini, and starting both.

CAVEATS

Not a standard Linux package; download binaries from GitHub. Command-line options limited to globals—detailed setup via config files. Requires network access; firewall rules needed for ports. TLS/encryption configured separately. High traffic may need tuning.

COMPONENTS

frps: Server, exposes public endpoints.
frpc: Client, tunnels local services.

CONFIG EXAMPLE

frpc.ini:
[common]
server_addr = x.x.x.x
server_port = 7000
token = mytoken

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

HISTORY

Created by snowdream86 (fatedier) in 2016 as a faster alternative to similar tools. Rewritten in Go v1.0 (2017) for performance. Active development with v0.60+ (2024) adding QUIC, gRPC, enhanced security. Millions of downloads, popular in DevOps and homelabs.

SEE ALSO

ssh(1), socat(1), nginx(8)

Copied to clipboard