# naxalnet **naxalnet** is a program to create a wireless mesh network for communicating with each other. It can be useful during an internet shutdown, or to join online classes with a group of laptops. It uses [B.A.T.M.A.N. Advanced][batman-adv], an implementation of the B.A.T.M.A.N. routing protocol to communicate with peers. WARNING: This program uses an unencrypted network. This means, you do not get any more privacy or security than with an open wifi network. The name naxal comes from Naxalbari, a village in Darjeeling, West Bengal. ## Requirements - [systemd v248 or more][batman-systemd] - Linux kernel with batman-adv module - [iwd][] - python3 - python-setuptools (for building) - [python-dasbus][] - wifi adapter with ad-hoc support - two or more computers, or laptops with wifi adapter, called nodes - systemd-resolved (optional, for DNS) - batctl (optional, for debugging) ## Installing ### Arch Linux Install [naxalnet][aur] (or [naxalnet-git][aur-devel] for the development version) from the AUR with your favourite helper: ```sh yay -S naxalnet ``` Optionally, [setup systemd-resolved][arch-resolved] for DNS if any of the nodes have internet access. ### Manually Clone the repo and cd into it. ```sh git clone https://git.disroot.org/pranav/naxalnet.git cd naxalnet ``` Or, if you have an [IPFS client][ipfs] running, try: ```sh git clone http://k51qzi5uqu5dlye74be0n9iihwk6sm54vexo7bf7pdr4w811y6mmrcp25djozv.ipns.localhost:8080/naxalnet.git ``` Run `sudo make install` to install naxalnet. This will install naxalnet in `/usr/bin/naxalnet`. After installing, reload systemd so that you can enable `naxalnet.service` without rebooting: ```sh sudo systemctl daemon-reload ``` ## How to use You need more than one computer running for the connection to work. ### Start naxalnet To start naxalnet, do the command on all the nodes: ```sh sudo systemctl start naxalnet.service ``` To test if it works, run `ip -c addr` to find out your address. Note the `inet` address of `bridge0`. If there isn't one, try again after a few seconds. If the address starts with 169.254, it has got a link-local address. Otherwise, it has got an IP address from DHCP. ### Getting internet access Connect an ethernet cable to any of the peers and [start naxalnet][startnx]. Now all the peers should be able to connect after renewing their DHCP connection (`sudo networkctl renew bridge0`). ### Tethering via WiFi AP If there are two adapters in a peer, naxalnet will start a wifi ap (wifi hotspot) on one of them. Connect two wifi adapters on a device and [start naxalnet][startnx]. Now an ap will be created on one of the adapters with SSID `NaxalNet` and password `naxalnet256`. If you had set up internet access on one of the peers, internet can be accessed from the AP. ### Running at boot Starting the service will stop `NetworkManager.service` and `wpa_supplicant.service` if it is running. If you start either of these services after naxalnet was started, systemd will stop naxalnet. To run naxalnet at boot, enable the service on all the nodes: ```sh sudo systemctl enable naxalnet.service ``` Now naxalnet will configure a batman interface on every boot. Disable the service to stop running at boot: ```sh sudo systemctl disable naxalnet.service ``` ### Stopping the service ```sh # Stop the services sudo systemctl stop naxalnet systemd-networkd systemd-resolved iwd # Delete the virtual interfaces created by naxalnet sudo networkctl delete bat0 bridge0 ``` If your distribution uses NetworkManager, starting `naxalnet.service` will have stopped it. Start NetworkManager again: ```sh sudo systemctl start NetworkManager.service ``` ## How it works The program naxalnet copies some `systemd-networkd` configuration files into networkd's runtime configuration directory. It uses iwd to start an ad-hoc network named "HelloWorld". See the [systemd-networkd](systemd-networkd) directory to see how systemd-networkd configures the network. You can use services like [IPFS][], [Jami][], [Secure Scuttlebutt][ssb] and others which can work on an intranet. ## Uninstalling If you installed naxalnet manually, there is no way to uninstall than manually removing the files: ```sh sudo pip uninstall naxalnet sudo rm -rf /usr/share/naxalnet* /usr/lib/systemd/system/naxalnet.service ``` ## Contributing See [HACKING.md](HACKING.md) ## Similar projects The following projects are similar to naxalnet, but are not designed to be used in a laptop or computer with wifi adapter. If you live in an area where the materials required for any of them are easily available, consider using them instead of naxalnet. - [LibreMesh][libremesh]: framework for OpenWrt-based firmwares - [disaster.radio][]: solar-powered communications network ## License This program is [free/libre/swatantra][free-sw] software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. See [LICENSE](LICENSE) for the complete version of the license. [batman-adv]: https://www.open-mesh.org/projects/batman-adv/wiki [ipfs]: https://ipfs.io [jami]: https://jami.net "Peer to peer video calls" [ssb]: https://scuttlebutt.nz "Secure Scuttlebutt" [python-dasbus]: https://github.com/rhinstaller/dasbus "Python D-Bus library" [aur]: https://aur.archlinux.org/packages/naxalnet [aur-devel]: https://aur.archlinux.org/packages/naxalnet-git [arch-resolved]: https://wiki.archlinux.org/title/Systemd-resolved#DNS [batman-systemd]: https://www.open-mesh.org/news/101 [libremesh]: https://libremesh.org [disaster.radio]: https://disaster.radio/ [startnx]: #start-naxalnet [iwd]: https://iwd.wiki.kernel.org "wifi daemon" [free-sw]: https://gnu.org/philosophy/free-sw.html "What is free software?"