# 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 \ --port-map=20000:28960 --port-map=20001:28961 --port-map=20002:28962 \ --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_PORT_MAP`: 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]). example .envrc: ```bash #!/usr/bin/env bash export Q3RCON_PROXY_HOST="0.0.0.0" export Q3RCON_TARGET_HOST="localhost" export Q3RCON_PORT_MAP="20000:28960,20001:28961,20002:28962" export Q3RCON_SESSION_TIMEOUT=20 ``` 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` It defaults 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