Files
wiki/projects/alamesh/2022-10-15_notes.md
T
2022-10-16 18:46:04 +02:00

3.9 KiB

2022-10-15 SaT Meeting Notes

Last SaT Robby and I talked about the mesh network/internet ideas that we've been thinking of.

We want alamodians to have their own mesh network and internet that they can take part in, host things on, allocate addresses in, DDoS each other with and much more. This is a good opportunity to dig a little deeper into how the internet "really works" and have a little fun.

And there's some legitimate use-cases for the network as well:

  • Robby wants to host services without putting them on the public internet. He used to just rely on auth, but ended up switching back over to WireGuard (WG) anyways. He wants so share other services too that aren't behind auth and this is the "best" way to do so.
  • I (fisher) also want to start to host more and more services as well. I'd like to put some internal services of my own up, host a CI builder, etc. I want to experiment with:
    • writing and using my own DNS server.
    • hosting my serverless functions.
    • writing my own email server (right, lol).
    • and other internety things.
      Having our own internet makes all of the above safer and I don't need to care about hackers and portscanners messing with me.

The Old and the New

There are two overall ideas and we'll be doing both:

  1. Recreate our own version of the internet. Have things like address allocation, ASNs, root DNS servers, IANA, bureaucracy, etc.
  2. Create a new version of the internet, using a home-grown p2p mesh. Would likely be built on top of pinecone and be essentially a rewrite of the OSI stack.

Both sound pretty cool; we can kinda learn what it really means to run our own ASN with prefixes, allocate addresses and route things around. After a time, we'll learn why p2p networks are hard as balls and maybe we'll have two computers talking with each other.

What's next?

Determining a prefix

We need to determine a prefix for the network. IPv6 address space. There's some good options here. cjdns uses fc00::/7. Yggdrasil uses 0200::/7. It really doesn't matter what we do, but we should decide one something. We might also be able to use fec0::/10. Whatever we use, we should use the next avaiable bit to denote a old-internet vs mesh network address.

Peering

We're going to need to peer (connect) with each other. Basically what a fiber cable does today. We'll most likely be using the built in WG tunnel in the kernel to peer. We might need a custom userspace program for the mesh network, but overall it will be guard.

I think we should take inspiration from dn42's peering/ASN process and pretty much hard-copy them. We should just peer with everyone for now, we'll test routing recovery and announcements with BGP

Figuring out how the fuck BGP works

Now that we're connected with eachother, we gotta start the "real" work. I'm pretty sure this is "just" running a daemon on a box (bird), running some config and calling it good. Automating that will be extremely useful and a good learning experience in linux networking.

Once we got BGP running, we'll need to setup some failure tests to check route stabilization and if BGP is actually working.

Before we start the mesh in earnst

It should be as easy as possible to configure your mesh, peer and add routes. It would be nice if pretty much every device on one's network was peered / running the BGP daemon (iBGP for internal BGP). Idk how realistic that is, but UX is the key.

Conclusion

We need to:

  1. Determine a prefix. One of fc00::/7, 0200::/7, fec0::/10 etc.
  2. Copy dn42 for peering, ASNs, basically everything.
  3. Actually peer with eachother and test network resiliency.
  4. Start hosting things!
  • Make it easy to spinup services on internal networks.
  1. Design doc for p2p network.