# 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_PORTS_MAPPING="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