q3rcon-proxy/README.md
2025-05-06 23:40:46 +01:00

70 lines
2.0 KiB
Markdown

# Q3 Rcon Proxy
A modification of [lilproxy][lilproxy_url] that forwards only Q3 rcon/query packets. Useful for separating the rcon port from the game server port.
### Why
Unfortunately the Q3Rcon engine ties the rcon port to the game servers public port used for client connections. This proxy will allow you to run rcon through a separate whitelisted port.
### Use
#### Flags
```bash
#!/usr/bin/env bash
/usr/local/bin/q3rcon-proxy \
--proxy-host=0.0.0.0 \
--target-host=localhost \
--ports-mapping=28961:28960 \
--session-timeout=20 \
--loglevel=debug
```
#### Environment Variables
Each of the flags has a corresponding environment variable:
- `Q3RCON_PROXY_HOST`: The host the proxy server sits on.
- `Q3RCON_TARGET_HOST`: The host the game servers sit on.
- `Q3RCON_PORTS_MAPPING`: A mapping as a string with `source:target` pairs delimited by `;`.
- `Q3RCON_SESSION_TIMEOUT`: Timeout in seconds for each udp session.
- `Q3RCON_LOGLEVEL`: The application's logging level (see [Logging][logging]).
Multiple rcon proxies may be configured by setting *--ports-mapping/Q3RCON_PORTS_MAPPING* like so:
```console
export Q3RCON_TARGET_PORTS="20000:28960;20001:28961;20002:28962"
```
This would configure q3rcon-proxy to run 3 proxy servers listening on ports 20000, 20001 and 20002 that redirect rcon requests to game servers on ports 28960, 28961 and 28962 respectively.
### Logging
Set the log level with environment variable `Q3RCON_LOGLEVEL`.
Acceptable values are:
- `trace`
- `debug`
- `info`
- `warn`
- `error`
- `fatal`
- `panic`
If not set it will default to `info`.
### Special Thanks
[Dylan][user_link] For writing [lilproxy][lilproxy_url].
[lilproxy_url]: https://github.com/dgparker/lilproxy
[user_link]: https://github.com/dgparker
### Further Notes
For a compatible rcon client also written in Go consider checking out the [Q3 Rcon][q3rcon] package.
[q3rcon]: https://github.com/onyx-and-iris/q3rcon
[logging]: https://github.com/onyx-and-iris/q3rcon-proxy/tree/dev?tab=readme-ov-file#logging