Snap: A microkernel approach to host networking (2019)
research.google
research.google
If you're interested in Google Snap, you might also want to take a look at Snabb [0], and Rush (Snabb in Rust) [1].
For an example of how this stuff is useful at sub-Google scale, we just open-sourced the Rush-based tools we use to test our WebRTC code [2]
[0] https://blogs.igalia.com/dpino/2017/11/13/snabb-network-tool...
I'm a big fan of Snabb, and had a few conversations with Max Rottenkolber, one of the Snabb authors, about how we might tackle building a common network-simulation framework that we could use across all the different kinds of testing we do. Max suggested more or less the approach that you can see in the synthetic-network repo. (He wrote a series of documents during implementation that are really fun reading. They are in the /doc directory.)
Since we increasingly use Rust in various places, and our use case was a bit different than the core use cases for Snabb, Max took a swing at porting parts of Snabb to Rust for the synthetic-network project. That worked out really well, and that Snabb-implemented-in-Rust is now Rush!
There’s also fly doing userland tcp over userland wireguard because peeps might not have a local wireguard client.
Oh, yeah! That whole thing [0], up through the integration with flyctl, is fire.
This reminded me of my bitbucket CI/CD which didn't have any way to connect into our internal infrastructure to drop of built artifacts. Bitbucket runs their docker containers in a way that blocks you from being able to run wireguard or zerotier.
One weekend I played around with the Python bindings to ZeroTier, and their "public" networks, to create a proxy client that SSH could use, given an SSH private key and ZeroTier network ID, to (in userspace) SSH to a remote server behind our firewall via ZeroTier.
I haven't used it in production yet, but it seemed to work in my tests. Now they have Bitbucket build clients you can run on your own infrastructure, so maybe that would allow us to do those builds from inside our network, so we could push things to our deploy servers.
We do more now. Our CLI uses the stack to talk to remote Docker daemons for builds, nats for log streaming, a private DNS service, etc. It's very handy.