Say hi to Quilkin, an open-source UDP proxy
Together with Google Cloud, we’re introducing Quilkin — an open-source UDP proxy for game servers, to give any game studio the same network capabilities as the big giants.
Here at Embark, we make online games, which at the end of the day also means running and managing game servers.
For a game client to be able to connect to a server, you would typically share its IP address with the client in some way, as part of a matchmaking process.
This has several disadvantages: the IP address may host other game servers, or be reused for other games further down the line, so having anyone access it makes it challenging to protect it from attacks, like DDOS attacks against the server IP or malicious attacks against the game server itself. If the address is reused, these issues may last for a long time.
There’s also little we can do in the way of packet shaping when the game server and game client are talking to each other directly. We’re at the mercy of what our players’ ISPs decide to do as far as routing is concerned.
This brings us to Quilkin, an open-source UDP proxy we’ve started working on with Google Cloud and that we’re now open-sourcing.
For now, this is an early 0.1.0 alpha release that lays a solid foundation for us to build upon. The plan is to keep working on it so that we can use Quilkin to solve the problems mentioned above, and so that other games studios, no matter what size, can do the same.
I’m Luna Duclos, the tech lead of the backend delivery team at Embark. Our team focuses on game agnostic backend and infrastructure tech. I’ve been working on Quilkin together with several engineers in my team and engineers at Google Cloud.
We’re aiming for Quilkin to be able to run in a variety of different setups — from running as a sidecar to the game-server exposing useful metrics, running in a large pool as a DDOS protection layer, absorb large amounts of invalid traffic, all the way to running on the edge as shown above and provide flexibility to the game client, so it can pick the Quilkin edge that provides the best latency for player traffic.
Until now, these sorts of capabilities were only available to large game studios with resources to build their own proprietary technology.
We think leveling the playing field for everyone in the games industry is an important and worthy endeavor. That’s why we collaborated with Google Cloud and initiated this project together. We welcome outside contributors from anywhere and would love your feedback and opinions.
You can also see Google’s blog post about Quilkin here, with some additional details on how to deploy it.
To get involved with the project, please:
- Check out our Github repository
- Join our Discord community
- Join the Quilkin-discuss mailing list
- Follow Quilkin on Twitter
Quilkin is in a 0.1.0 state, which means that, of course, there’s plenty of work to do. Our next steps will be to build integrations into Agones, and then deploy Quilkin in front of our own in-progress game titles, see how it behaves, and from there, expand the feature-set and documentation.
We also plan to build a mean-and-lean client library in C++ that can easily be integrated into existing engines, or in scenarios where a Rust library or binary is not possible. In exchange, it will likely have fewer features than the fully-featured Rust one.
Once that’s working well, we plan to explore the Quilkin-in-the-edge scenario further and see what work needs to be done to support that too.
At Embark, we believe open source is the future of the games industry and that open, cross-company collaboration is the way forward, so that all studios, regardless of size, can achieve the same level of technical capabilities.
We’re especially keen on collaborating and building open projects within the fast-growing Rust ecosystem. In case you’re unfamiliar, Rust is a high-performance programming language with robust built-in safety and a fantastic community, which makes it significantly easier to collaborate and use a wide set of high-quality packages.
We both develop and maintain our own open-source projects such as cargo-deny, tame-oauth, physx-rs, as well as actively sponsor and support open projects like Rust Analyzer, Tokio, and Dim Forge.
If you’re curious about our open source projects, check out https://www.embark.dev/. And feel free to reach out if you want to collaborate!