The second phase is officially over and within it’s time a lot have happened. First things first, this year’s Battlemesh took place in Paris and it was a blast, the wg_tun plugin saw some great changes and the documentation PR is closed.
For my personal experience on WBMv12 refer to this blog post.
Wireguard on BMX7: wg_tun plugin
Image that shows the successful announcement and reception of keys and ipv6 crypto-addresses.
Initial work on the plugin has been put towards of the first phase and subsequent effort was put before Battlmesh. On Battlemesh along with Axel we created the establishment of a session between two wg-bmx7 nodes.
This work can be found here: https://github.com/bmx-routing/bmx7/tree/WBMv12_session_with_harry
These nodes are able to exchange the public keys of their own interfaces (devices) and assign each other as a peer.
The key decisions of the current implementation are as follows:
- BMX7 traditionally uses “fd70” as the prefix of an instance’s – auto-assigned on startup – primary IP(v6). The primary IP is the product of this prefix in addition with the first 14 bytes of the public SHA224 key of the interface’s unique identification mechanism.
In the wg approach we adhere to this scheme and we configure the primary IP of an interface as “fd77” + the 14 bytes of the SHA224 key.
(Credits to Axel for the idea).
- The implementation is auto-configurable; meaning that each device that carries a prefix of fd77 when it gets received by other wg-bmx7 interfaces they try to establish a session between them.
- Cryptographic keys (private and public) exist only in the scope o a single session. Every time an instance gets restarted it spawns new keys.
After Battlemesh and this happily successful result, effort is being put into the handling of some minimal command line arguments as well as the routing of data inside the established tunnels.
Further work will take advantage of the SEMTOR mechanisms provided by BMX7 in combination with the WG plugin.
For more info: either refer to the wg_tun plugin branch, or have a chat with me @luserx0:matrix.org.
BMX7 Github Documentation
The documentation PR was completed and it offers to the GitHub repo a revamped feeling. Details can be found inside the PR.
The total scope of this effort has been to make the BMX7 more approachable by new contributors and users.
Two goals for this phase it was deemed necessary to push back (and weren’t achieved):
- Work on mlc to port it’s functionality to mlc-ng,
- The bmx7 Debian Package.
It’s undoubtedly of utmost importance to have WG secure tunnels working on BMX7 and these goals have been pushed back until secure tunneling is completed.
Final Thoughts and Future Goals
The project itself has proved to be more challenging than expected and it has tested a lot my developer abilities. Hopefully, there is a lot of knowledge to be gained and day by day we get closer to a functioning version of the plugin.
The goals for the final phase should be:
- The establishment of routing between bmx7-wg instances and the successful completion of the beta.
- Documentation of the added code and it’s functionality.
- Proper command-line controlling facilities for users (experienced and not).
- Research on reuse of cryptographic keys (WG keys with BMX7 keys) and proper handling of the wg interfaces on the bmx7 ecosystem (kernel calls, avl trees and argument hierarchy).
- Further work on contributor and user documentation.
- Stretch: Work on MLC to mlc-ng