Install prrr¶
Build the current source, install the components used by the service, and prepare a matching server/client configuration. This guide uses repository scripts rather than assuming an installer domain or published binary exists.
Requirements¶
- Linux with
/dev/net/tun, IP routing tools, and systemd for the documented client service. - A Rust toolchain compatible with the committed
Cargo.lock, Git, a C toolchain, andpkg-config. - A server whose domain, certificate, permitted port, forwarding, and NAT you administer.
- Administrative privileges for TUN creation, socket marks, and route changes.
The workspace declares Rust 1.85; resolved dependencies can require a newer compiler. Keep Cargo.lock and use a compatible current stable toolchain.
Build from the real repository¶
git clone https://github.com/Mewplane/prrr.git
cd prrr
cargo build --locked --release --bin prrr
target/release/prrr --help
Use a binary built for your destination's CPU and libc. Copying a build from a newer distribution to an older server can fail before prrr starts.
Deploy a server¶
Install the built binary and prepare private state directories:
sudo install -m 755 target/release/prrr /usr/local/bin/prrr
sudo install -d -m 700 /etc/prrr/keys /var/lib/prrr
Create /etc/prrr/server.toml from the complete server example, replacing the domain and certificate paths. Keep it readable only by the account running the server. Use an already valid certificate for the actual server name and keep client certificate verification enabled.
On the server, enable IPv4 forwarding and arrange your firewall's forwarding/NAT policy for the selected tunnel subnet (10.66.66.0/24 in the example) through its intended Internet interface. Integrate those rules with the server's existing firewall manager rather than flushing its policy. The server process creates TUN devices; it does not replace the administrator's egress and firewall configuration.
Start the server in the foreground for the first verification:
sudo /usr/local/bin/prrr server --config /etc/prrr/server.toml \
--listen 0.0.0.0:443 --server-name vpn.example.net
Use your real name and keep another administrator session available. Once the connection and forwarding checks pass, put that same command under your chosen service manager. Select a transport explicitly instead of relying on the differing fallback defaults.
The repository also contains server installer scripts. Some write legacy sections such as [keys] and [database], while the current runtime reads [crypto] and [server].data_dir. This guide uses the current manual configuration instead of treating those generated files as verified setup.
| Transport | Network path | What must be reachable |
|---|---|---|
| HARP | HTTPS-based HTTP/2, WebSocket, or polling | The selected TCP endpoint, commonly 443 |
| MASQUE | QUIC with datagram framing | The selected UDP endpoint, commonly 443 |
Run prrr server --config /etc/prrr/server.toml doctor to inspect configuration and dependencies. Keep any web admin listener private; its separate listener is plain HTTP unless TLS is terminated in front of it. See admin API boundaries.
Install the Linux client¶
First obtain a complete client configuration, then run:
sudo ./deploy/client/install-client.sh ./my-laptop.toml
sudo systemctl start prrr-client
The installed paths are /usr/local/bin/prrr, /usr/local/bin/prrr-route, /etc/prrr/client.toml, and /etc/systemd/system/prrr-client.service. The configuration is copied with mode 600.
make install and cargo install --path . target ~/.cargo/bin; they do not update the service's executable or routing hook. To update a service installation while preserving its existing configuration:
make install-system
sudo systemctl restart prrr-client
Verify and undo¶
Follow your first connection. Stop the service with sudo systemctl stop prrr-client and disable it with sudo systemctl disable prrr-client when it should not start at boot. Preserve identity/configuration files until you intentionally revoke or migrate the client.