Mesh networks, Babel and IPv6 (vs OLSR)

(In response to a question on a mailing-list regarding the benefits of Babel vs OLSR for wireless mesh networks.)

We have been using Babel for some time on the Réseau libre Montreal mesh network, with the help of our fork of Commotion that has patches to use Babel (it's a bit out of date, but we do plan to keep using it / upgrading it).

One main advantage of Babel is that it can support both IPv4 and IPv6 with a single instance / route announcement. It's also pretty easy to use and debug, supported by OpenWRT, Quagga, etc. Babel is also being considered for integration in Homenet.

Homenet basically refers to the "Internet of Things", organically grown domestic networks. Devices might need to dynamically adjust the network paths according to the link characteristics. (vaguely quoting the above RFC introduction text)

One interesting aspect about using Babel, IPv6 and Commotion, is that you can randomly generate an IPv4 /48 global-unique subnet (i.e. private address range similar to 192.168.x.x, but which has very strong chances of being unique if you inter-connect 2 networks, as we do in mesh networks). The mesh router can then "announce" this route on the local area network (using IPv6 standard Route Announcements), and all your hardware will automatically assign themselves an IPv6 address and be able to connect to the mesh. This makes the Commotion router very plug & play.

A /48 subnet is huge. Typically, a /48 is used to allocate 65536 subnets of /64 size (a /64 being the recommended size for Route Announcements, an IPv6 alternative to DHCP). This is the recommended allocation for a residence (although some ISPs allocate a /56 instead, which is the minimum recommended end site assignment, and that allows 256 subnets of /64, or 16 subnets of /60). Anyway, having many subnets is nice. If people have an IPv6-enabled ISP, they can announce their subnet on the mesh, and if not, Commotion generates a random unique-local /48.

For example, I announce on the mesh the /56 prefix that my ISP assigned to me. I also assigned a /60 to a neighbour that is connected to my apartment using an ethernet cable, as well as an another /60 allocated to another location to whom I provide Internet via VPN via the mesh. Why a /60? This way they can then allocate 16 subnets of /64 as they wish (ex: one /64 for an access point, another /64 to their LAN, etc, and remember that a /64 is the recommended size for Route Announcements, an alternative to DHCP).

Anyway, that was a bit of a tangent. Back to Babel, since not everything supports IPv6 yet, people can still announce IPv4 in parallel, although that usually means chosing some obscur non-public IPv4 range to avoid network conflicts, probably having a wiki to document prefixes, etc (same as for Commotion + OLSR).

Since I provide legacy IPv4 Internet access to specific locations, but I do not provide Internet access to everyone on the mesh, I use Tinc to create a VPN access to those to whom I provide Internet access. This has the added benefit of encrypting their Internet traffic on the mesh, otherwise anyone could look at the details of their browsing habits.