Mesh networking: A guide to using FOSS with common hardware

I wrote a (fairly long) guide about mesh networking using free and open-source software (FOSS) that uses OpenWrt and batman-adv. My intention is not self-promotion but to help closing the gap between concept and implementation of mesh networks. I thought some of you might find it useful, so I'm sharing it here.

The guide turned out much longer than I anticipated but hopefully, it covers enough content to get people started on their own mesh networking projects. If you have experience with any of the covered topics, please feel free to share suggestions that might help other users. I plan on updating the guide every once in a while and your feedback would be greatly appreciated.

(By the way, thanks for keeping the forum posts public. They've always been very helpful to me.)



The guide was completely updated on October 6th to make it consistent with the current stable release, namely OpenWrt 21.02.

In brief, most of the changes had to do with the new network syntax and increased hardware requirements. More specifically, OpenWrt 21.02 drops the use of ifname and make a more clear distinction between layer 2 and layer 3 configurations in the /etc/config/network file. In addition, the minimum requirements to run OpenWrt are now 8MB of flash memory and 64MB of RAM. The latter change prompted me to use a new TP-Link router for the examples, namely the TL-WDR4300, instead of the old WR1043ND (v1). This new router is still a low-end device, which makes very affordable and easy to find worldwide, but contrary to the WR1043ND, it is actually a dual-band router. This was an opportunity to illustrate wireless segmentation for mesh vs. non-mesh communication, which is something I think is almost required in most use cases, so the new guide makes use of it by default.

I also took this opportunity to update many, many other things. To mention three main ones:

1 Like

The guide has been updated yet again to add a new section called Advanced features to cover batman-adv features not previously described in the basic implementation section. The first included feature was the use of multi-links to improve performance and reliability. The subsection includes examples and a how-to for the implementation of multi-links. In addition, I changed the Linksys reference in Hardware to the more stable Linksys EA8300 as reference of a high-end device. I’ve not personally used it but have read reports of good experience with it by the OpenWrt forum user @16F84, for example.