The continue of https://github.com/KusakabeSi/RootlessRouter, but use User mode linux instead of VPP
Here is the list of all my nodes with this architecture.
Please consider to peer with me if you are a DN42 player!
Choose the nearest node to you, then click Auto Peer button to peer with me.
DN42 is a big dynamic VPN, which employs Internet technologies (BGP, whois database, DNS, etc) for educational and amateur scientific research purposes. Participants connect to each other using network tunnels (GRE, OpenVPN, Tinc, IPsec, Wireguard) and exchange routes thanks to the BGP. DN42 can be used to learn networking and to connect private networks, such as hackerspaces or community networks. But above all, experimenting with routing in DN42 is fun!
The first thing we need to do is setup a router which running a BGP daemon such as BIRD/FRRouting in it. Most people choose a regular linux machine as their router. In this setup, we enable the ip_forward
option in linux kernel to make it become a router, then the BGP daemon exahange routes with other peer and write all route tables to the kernel. Which means we need the root permission to setup all things.
But I'm thinking, do we really need that? Technically, we are just receives wireguard encrypted udp packet
-> decrypt it
-> do BGP routing
-> encrypt
-> send to another peer
. Do we need root permission to do that? I don't think so. That's why this project here.
This RootlessRouter
project aims to build a software stack which can establish multiple wireguard sessions with other DN42 players and act as a boarder router for them, but all processes are done in the userspace. So that the whole router can run as a normal user without root or in an unprivileged docker container.
Based on my current plan, the software stack of my nodes looks like this:
As you can see, there are no component running in the kernel mode.
I will host multiple node to form a cluster, like this
- https://github.com/KusakabeSi/RootlessRouterDocker
- https://github.com/KusakabeSi/EtherGuard-VPN
- https://github.com/KusakabeSi/DN42-AutoPeer
- https://github.com/KusakabeSi/slirpnetstack
- https://github.com/KusakabeSi/bird-lg-go
- https://github.com/KusakabeSi/UML-Config