2021-05-10 13:36:30 +05:30
|
|
|
# naxalnet
|
|
|
|
|
2021-07-29 22:36:53 +05:30
|
|
|
**naxalnet** is a program to create a wireless mesh network for
|
2021-08-08 22:20:05 +05:30
|
|
|
communicating with each other. It can be useful during an
|
2021-08-09 12:54:41 +05:30
|
|
|
[internet shutdown](#internet-shutdown), or to join
|
|
|
|
[online classes](#online-class-in-remote-areas) with a group
|
|
|
|
of laptops.
|
2021-08-02 18:13:32 +05:30
|
|
|
It uses [B.A.T.M.A.N. Advanced][batman-adv], an implementation
|
2021-07-29 22:36:53 +05:30
|
|
|
of the B.A.T.M.A.N. routing protocol to communicate with peers.
|
2021-08-09 20:06:57 +05:30
|
|
|
The name naxal comes from Naxalbari, a village in Darjeeling,
|
|
|
|
West Bengal.
|
2021-07-29 22:36:53 +05:30
|
|
|
|
|
|
|
WARNING:
|
2021-08-09 20:06:57 +05:30
|
|
|
This program uses an **unencrypted** network. This means
|
2021-08-15 15:02:28 +05:30
|
|
|
you do not get any more privacy or security than with an open WiFi
|
2021-07-29 22:36:53 +05:30
|
|
|
network.
|
|
|
|
|
|
|
|
<!-- NOTE TO ACTIVISTS
|
|
|
|
|
2021-09-04 11:53:08 +05:30
|
|
|
Running this program in the world's largest (partly-free) democracy
|
2021-07-29 22:36:53 +05:30
|
|
|
may result in you getting arrested under the UAPA, and not
|
|
|
|
getting bail because of false evidence planted in your phone by
|
|
|
|
Pegasus, or by a forensic lab in Gujarat.
|
|
|
|
|
2021-08-15 15:02:28 +05:30
|
|
|
The author, much like the Government of India, does not wish
|
2021-07-29 22:36:53 +05:30
|
|
|
to take responsibility in your well-being if you get arrested under
|
2021-08-15 15:02:28 +05:30
|
|
|
a draconian national security law.
|
2021-07-30 17:56:33 +05:30
|
|
|
|
2021-07-29 22:36:53 +05:30
|
|
|
-->
|
2021-05-10 15:15:42 +05:30
|
|
|
<!-- UNCOMMENT WHEN NECESSARY
|
|
|
|
|
|
|
|
**Disclaimer**:
|
2021-06-15 14:24:03 +05:30
|
|
|
In case you are either 1) a complete idiot; or 2) a member of the saffron
|
|
|
|
brigade; or 3) both, please be aware that this project is not affiliated
|
|
|
|
with any groups designated as "terrorist" groups in India.
|
2021-05-10 15:15:42 +05:30
|
|
|
|
2021-08-09 20:06:57 +05:30
|
|
|
Using the name naxal does not imply any form of connection
|
2021-07-29 22:36:53 +05:30
|
|
|
with anyone currently at risk of death in overcrowded prisons.
|
2021-05-10 15:15:42 +05:30
|
|
|
|
|
|
|
-->
|
|
|
|
|
|
|
|
## Requirements
|
|
|
|
|
2021-09-04 18:37:30 +05:30
|
|
|
- [systemd-networkd v248 or more][batman-systemd]
|
2021-07-29 22:36:53 +05:30
|
|
|
- Linux kernel with batman-adv module
|
2021-09-04 20:00:00 +05:30
|
|
|
- [iwd][] for controlling the WiFi adapter
|
2021-09-04 18:37:30 +05:30
|
|
|
- python3
|
2021-09-04 20:00:00 +05:30
|
|
|
- python3-setuptools, for building and installing naxalnet
|
|
|
|
- python3-systemd, for logging to systemd journal
|
|
|
|
- [dasbus][], for communicating with iwd
|
|
|
|
- two or more machines with a WiFi adapter having ad-hoc support, called
|
|
|
|
nodes or peers
|
2021-06-15 14:24:03 +05:30
|
|
|
- batctl (optional, for debugging)
|
2021-09-04 20:00:00 +05:30
|
|
|
- python3-pip (optional, for `make uninstall` to work)
|
2021-05-10 15:15:42 +05:30
|
|
|
|
2021-05-11 12:27:58 +05:30
|
|
|
## Installing
|
|
|
|
|
2021-08-15 15:02:28 +05:30
|
|
|
This program is available in the AUR for Arch users. Building
|
|
|
|
manually for other distributions may not always work.
|
|
|
|
|
2021-06-11 10:15:35 +05:30
|
|
|
### Arch Linux
|
|
|
|
|
2021-06-24 17:04:31 +05:30
|
|
|
Install [naxalnet][aur] (or [naxalnet-git][aur-devel] for the
|
|
|
|
development version) from the AUR with your favourite helper:
|
2021-06-11 10:15:35 +05:30
|
|
|
|
|
|
|
```sh
|
2021-06-24 17:04:31 +05:30
|
|
|
yay -S naxalnet
|
2021-06-11 10:15:35 +05:30
|
|
|
```
|
|
|
|
|
2021-06-19 12:40:08 +05:30
|
|
|
Optionally, [setup systemd-resolved][arch-resolved] for DNS if any
|
2021-08-15 15:02:28 +05:30
|
|
|
of the nodes have internet access. [Start naxalnet][startnx] when
|
|
|
|
you need it.
|
2021-06-14 11:11:36 +05:30
|
|
|
|
2021-08-18 15:34:07 +05:30
|
|
|
### Ubuntu
|
|
|
|
|
|
|
|
naxalnet is not packaged for Ubuntu, so you will have to build
|
|
|
|
and install it manually.
|
2021-09-04 18:37:30 +05:30
|
|
|
Currently, only the **unreleased 21.10** comes with the
|
|
|
|
required version of systemd. Therefore, naxalnet **won't work on Ubuntu
|
|
|
|
21.04 or older**.
|
2021-08-18 15:34:07 +05:30
|
|
|
|
2021-09-04 18:37:30 +05:30
|
|
|
<!-- TODO: remove this message if systemd 248 arrives in 21.04 -->
|
2021-08-18 15:34:07 +05:30
|
|
|
|
|
|
|
Install the requirements from the Ubuntu repositories:
|
|
|
|
|
|
|
|
```sh
|
|
|
|
# batctl is optional
|
2021-09-04 18:37:30 +05:30
|
|
|
sudo apt install python3-pip python3-systemd iwd batctl build-essential
|
2021-08-18 15:34:07 +05:30
|
|
|
# Now, install dasbus with pip
|
2021-08-19 12:03:20 +05:30
|
|
|
sudo pip3 install dasbus
|
2021-08-18 15:34:07 +05:30
|
|
|
```
|
|
|
|
|
|
|
|
Now follow the instructions in the
|
|
|
|
[manual installation section][install-manual]
|
|
|
|
|
|
|
|
### Fedora
|
|
|
|
|
|
|
|
naxalnet is not packaged for Fedora, so it should be installed
|
|
|
|
manually. naxalnet requires atleast systemd v248 which is only
|
2021-09-04 18:37:30 +05:30
|
|
|
available on **Fedora 34 and above**. Install the dependencies:
|
2021-08-18 15:34:07 +05:30
|
|
|
|
|
|
|
```sh
|
|
|
|
# systemd-resolved may be required for rawhide
|
2021-09-04 18:37:30 +05:30
|
|
|
sudo dnf install systemd-networkd iwd python3-dasbus python3-setuptools python3-systemd
|
2021-08-18 15:34:07 +05:30
|
|
|
```
|
|
|
|
|
|
|
|
Now head over to the [next section][install-manual] to install naxalnet.
|
|
|
|
|
2021-05-11 12:27:58 +05:30
|
|
|
### Manually
|
|
|
|
|
2021-08-18 15:34:07 +05:30
|
|
|
Install the [requirements][requirements].
|
|
|
|
|
|
|
|
Clone the naxalnet repo and cd into it.
|
2021-05-11 13:10:31 +05:30
|
|
|
|
2021-06-19 15:53:16 +05:30
|
|
|
```sh
|
|
|
|
git clone https://git.disroot.org/pranav/naxalnet.git
|
|
|
|
cd naxalnet
|
|
|
|
```
|
|
|
|
|
2021-08-18 15:34:07 +05:30
|
|
|
Or, if you have an [IPFS client][ipfs] running, try this instead:
|
2021-07-19 19:02:25 +05:30
|
|
|
|
|
|
|
```sh
|
|
|
|
git clone http://k51qzi5uqu5dlye74be0n9iihwk6sm54vexo7bf7pdr4w811y6mmrcp25djozv.ipns.localhost:8080/naxalnet.git
|
|
|
|
```
|
|
|
|
|
2021-08-15 15:02:28 +05:30
|
|
|
Now, install naxalnet:
|
|
|
|
|
|
|
|
```sh
|
|
|
|
sudo make install
|
|
|
|
```
|
|
|
|
|
|
|
|
After installing, reload systemd so that it detects the new
|
|
|
|
service files:
|
2021-06-04 22:27:54 +05:30
|
|
|
|
|
|
|
```sh
|
2021-05-11 12:27:58 +05:30
|
|
|
sudo systemctl daemon-reload
|
2021-05-10 15:15:42 +05:30
|
|
|
```
|
|
|
|
|
2021-06-15 14:24:03 +05:30
|
|
|
## How to use
|
2021-05-10 15:15:42 +05:30
|
|
|
|
2021-08-15 15:02:28 +05:30
|
|
|
You need more than one machine running naxalnet for the connection to work.
|
2021-06-15 14:24:03 +05:30
|
|
|
|
2021-07-29 22:36:53 +05:30
|
|
|
### Start naxalnet
|
2021-06-15 14:24:03 +05:30
|
|
|
|
2021-08-15 15:02:28 +05:30
|
|
|
Though naxalnet can run from the commandline, it was designed to be
|
|
|
|
run as a systemd service.
|
2021-07-29 22:36:53 +05:30
|
|
|
To start naxalnet, do the command on all the nodes:
|
2021-05-10 15:15:42 +05:30
|
|
|
|
2021-06-06 17:49:56 +05:30
|
|
|
```sh
|
|
|
|
sudo systemctl start naxalnet.service
|
2021-05-11 12:27:58 +05:30
|
|
|
```
|
2021-05-10 15:15:42 +05:30
|
|
|
|
2021-08-16 18:56:17 +05:30
|
|
|
This will start a mesh network and connect to all nodes.
|
2021-08-15 15:02:28 +05:30
|
|
|
To test if it works, run `sudo batctl n -w` and check for
|
|
|
|
nodes. If there are any nodes, your network is up.
|
2021-06-15 14:24:03 +05:30
|
|
|
|
|
|
|
### Getting internet access
|
|
|
|
|
2021-08-15 15:02:28 +05:30
|
|
|
Connect an ethernet cable from a router to any of the peers and
|
2021-08-13 11:32:42 +05:30
|
|
|
[start naxalnet][startnx]. If it was already started, you should
|
|
|
|
renew the DHCP connection of all peers. To do this, type
|
|
|
|
`sudo networkctl renew bridge0` on all peers.
|
2021-06-15 14:24:03 +05:30
|
|
|
|
|
|
|
### Tethering via WiFi AP
|
|
|
|
|
2021-07-29 22:36:53 +05:30
|
|
|
If there are two adapters in a peer, naxalnet will start a
|
2021-08-15 15:02:28 +05:30
|
|
|
WiFi ap (also called WiFi hotspot) on one of them.
|
2021-07-29 22:36:53 +05:30
|
|
|
|
2021-08-15 15:02:28 +05:30
|
|
|
Connect two WiFi adapters on a device and [start naxalnet][startnx].
|
|
|
|
Now an ap will be started on one of the adapters.
|
2021-08-23 10:52:08 +05:30
|
|
|
Type `naxalnet --print-wifi` to get the WiFi SSID and password.
|
2021-08-13 11:32:42 +05:30
|
|
|
|
2021-06-15 14:24:03 +05:30
|
|
|
If you had set up internet access on one of the peers, internet
|
|
|
|
can be accessed from the AP.
|
|
|
|
|
|
|
|
### Running at boot
|
|
|
|
|
2021-07-29 22:36:53 +05:30
|
|
|
To run naxalnet at boot, enable the service on all the nodes:
|
2021-06-06 17:49:56 +05:30
|
|
|
|
|
|
|
```sh
|
|
|
|
sudo systemctl enable naxalnet.service
|
2021-05-10 15:15:42 +05:30
|
|
|
```
|
2021-06-04 22:27:54 +05:30
|
|
|
|
2021-08-15 15:02:28 +05:30
|
|
|
Now naxalnet will start a mesh on every boot.
|
2021-06-09 17:22:20 +05:30
|
|
|
Disable the service to stop running at boot:
|
|
|
|
|
|
|
|
```sh
|
|
|
|
sudo systemctl disable naxalnet.service
|
|
|
|
```
|
|
|
|
|
2021-06-23 13:48:05 +05:30
|
|
|
### Stopping the service
|
|
|
|
|
|
|
|
```sh
|
2021-08-16 21:32:57 +05:30
|
|
|
sudo systemctl stop naxalnet iwd systemd-networkd systemd-resolved
|
2021-06-23 13:48:05 +05:30
|
|
|
```
|
|
|
|
|
|
|
|
If your distribution uses NetworkManager, starting `naxalnet.service`
|
|
|
|
will have stopped it. Start NetworkManager again:
|
|
|
|
|
|
|
|
```sh
|
|
|
|
sudo systemctl start NetworkManager.service
|
|
|
|
```
|
|
|
|
|
2021-08-15 15:02:28 +05:30
|
|
|
### Configuration
|
|
|
|
|
2021-08-18 17:33:46 +05:30
|
|
|
naxalnet comes with a sample configuration file
|
|
|
|
`/etc/naxalnet/naxalnet.conf.example`. To change how the program
|
2021-08-15 15:02:28 +05:30
|
|
|
behaves, copy it to /etc/naxalnet/naxalnet.conf and edit it:
|
|
|
|
|
|
|
|
```sh
|
2021-08-18 17:33:46 +05:30
|
|
|
sudo cp /etc/naxalnet/naxalnet.conf{.example,}
|
|
|
|
# Now edit the file with your favourite editor as root
|
2021-08-15 15:02:28 +05:30
|
|
|
gedit admin:/etc/naxalnet/naxalnet.conf
|
|
|
|
```
|
|
|
|
|
|
|
|
Also, you can change its behaviour every time you run it using
|
|
|
|
arguments:
|
|
|
|
|
|
|
|
```sh
|
|
|
|
naxalnet --help
|
|
|
|
```
|
|
|
|
|
2021-06-09 17:22:20 +05:30
|
|
|
## How it works
|
|
|
|
|
2021-09-04 11:53:08 +05:30
|
|
|
There are three modes commonly supported by WiFi adapters - `ap` (WiFi
|
|
|
|
hotspot), `station` (for joining WiFi networks) and `ad-hoc` (for
|
|
|
|
decentralised networks). There are other modes supported by some WiFi
|
|
|
|
adapters too, like `p2p` (WiFi direct), but this program doesn't use them.
|
2021-08-13 11:32:42 +05:30
|
|
|
|
2021-08-15 15:02:28 +05:30
|
|
|
naxalnet uses two modes - `ad-hoc` and `ap`, for connecting to the
|
|
|
|
mesh. naxalnet uses iwd to start an `ad-hoc` network and configures
|
2021-08-09 12:54:41 +05:30
|
|
|
systemd-networkd to setup a BATMAN Advanced network.
|
2021-08-15 15:02:28 +05:30
|
|
|
If there are two WiFi adapters connected to the machine,
|
2021-08-13 11:32:42 +05:30
|
|
|
naxalnet starts an ad-hoc on one of them and an ap on the other.
|
|
|
|
You can use the ap for connecting mobile phones and other devices
|
|
|
|
to the mesh network.
|
|
|
|
|
2021-09-04 11:53:08 +05:30
|
|
|
Read the code and the documentation to learn the details.
|
|
|
|
See the directory [systemd-networkd](systemd-networkd) to see how
|
2021-08-15 15:02:28 +05:30
|
|
|
systemd-networkd configures the network.
|
2021-08-09 12:54:41 +05:30
|
|
|
|
|
|
|
## Use cases
|
|
|
|
|
|
|
|
### Online class in remote areas
|
|
|
|
|
|
|
|
naxalnet can be used to share connections in remote areas.
|
2021-08-10 13:20:27 +05:30
|
|
|
You need at least one device with internet access.
|
2021-08-09 12:54:41 +05:30
|
|
|
|
2021-09-04 11:53:08 +05:30
|
|
|
<!--
|
|
|
|
|
|
|
|
### Malign democracies and well-established institutions
|
|
|
|
|
|
|
|
Withheld due to national security reasons.
|
|
|
|
|
|
|
|
-->
|
|
|
|
|
2021-08-09 12:54:41 +05:30
|
|
|
### Internet shutdown
|
|
|
|
|
2021-09-04 11:53:08 +05:30
|
|
|
You can communicate with neighbouring devices running naxalnet, using
|
|
|
|
services like [IPFS][], [Jami][], [Secure Scuttlebutt][ssb] and others
|
|
|
|
which can work on an intranet. They should be installed on your
|
|
|
|
machine _before_ your friendly democratic government announces an
|
|
|
|
[internet shutdown][], since you cannot download and install them
|
|
|
|
during a shutdown. When a shutdown occurs, [enable naxalnet][enablenx].
|
2021-05-10 15:15:42 +05:30
|
|
|
|
2021-05-11 12:16:32 +05:30
|
|
|
## Uninstalling
|
|
|
|
|
2021-08-14 22:00:07 +05:30
|
|
|
If you installed naxalnet manually, use make uninstall to remove
|
2021-08-19 12:03:20 +05:30
|
|
|
naxalnet and its data files. This requires python pip to be installed.
|
2021-06-04 22:27:54 +05:30
|
|
|
|
|
|
|
```sh
|
2021-08-19 12:03:20 +05:30
|
|
|
# Uninstall the program, keeping the config files
|
2021-08-14 22:00:07 +05:30
|
|
|
sudo make uninstall
|
2021-08-19 12:03:20 +05:30
|
|
|
# Or, to uninstall and remove config files
|
|
|
|
sudo make purge
|
2021-05-11 12:27:58 +05:30
|
|
|
```
|
2021-06-04 22:27:54 +05:30
|
|
|
|
2021-08-13 11:32:42 +05:30
|
|
|
## Contributing or reporting bugs
|
2021-07-26 16:08:36 +05:30
|
|
|
|
|
|
|
See [HACKING.md](HACKING.md)
|
|
|
|
|
2021-06-19 12:40:08 +05:30
|
|
|
## Similar projects
|
|
|
|
|
2021-09-04 11:53:08 +05:30
|
|
|
Many projects make setting up B.A.T.M.A.N. Advanced mesh networks with
|
|
|
|
WiFi routers easier. They are easier to setup and are more
|
|
|
|
configurable. But naxalnet is different from them. It simplifies
|
|
|
|
setting up mesh networks with _laptops or computers_, and is not
|
|
|
|
designed to work with routers.
|
|
|
|
|
|
|
|
The following projects does something similar to naxalnet, but
|
|
|
|
requires special devices or routers to work. If you live in an area
|
|
|
|
where the materials required for any of them are easily available,
|
|
|
|
consider using them instead of naxalnet.
|
2021-06-23 13:48:05 +05:30
|
|
|
|
2021-08-13 11:32:42 +05:30
|
|
|
- [LibreMesh][]: framework for OpenWrt-based firmwares
|
2021-06-19 12:40:08 +05:30
|
|
|
- [disaster.radio][]: solar-powered communications network
|
|
|
|
|
2021-06-06 11:25:37 +05:30
|
|
|
## License
|
|
|
|
|
2021-08-13 11:32:42 +05:30
|
|
|
naxalnet is [free/libre/swatantra][free-sw] and open source 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,
|
|
|
|
eitherversion 3 of the License, or (at your option) any later version.
|
2021-06-06 11:25:37 +05:30
|
|
|
|
2021-08-09 12:54:41 +05:30
|
|
|
See [LICENSE](LICENSE) for the complete version of the license.
|
2021-06-06 11:25:37 +05:30
|
|
|
|
2021-06-09 17:22:20 +05:30
|
|
|
[batman-adv]: https://www.open-mesh.org/projects/batman-adv/wiki
|
2021-08-08 22:20:05 +05:30
|
|
|
[internet shutdown]: https://internetshutdowns.in
|
2021-08-02 18:26:14 +05:30
|
|
|
[ipfs]: https://ipfs.io "InterPlanetary File System"
|
2021-07-29 22:36:53 +05:30
|
|
|
[jami]: https://jami.net "Peer to peer video calls"
|
|
|
|
[ssb]: https://scuttlebutt.nz "Secure Scuttlebutt"
|
2021-08-15 15:02:28 +05:30
|
|
|
[dasbus]: https://github.com/rhinstaller/dasbus "A python D-Bus library"
|
2021-06-24 17:04:31 +05:30
|
|
|
[aur]: https://aur.archlinux.org/packages/naxalnet
|
|
|
|
[aur-devel]: https://aur.archlinux.org/packages/naxalnet-git
|
2021-08-02 18:26:14 +05:30
|
|
|
[arch-resolved]: https://wiki.archlinux.org/title/Systemd-resolved#DNS "systemd-resolved on ArchWiki"
|
|
|
|
[batman-systemd]: https://www.open-mesh.org/news/101 "systemd v248 brings support for batman advanced"
|
2021-06-19 12:40:08 +05:30
|
|
|
[libremesh]: https://libremesh.org
|
2021-08-08 22:20:05 +05:30
|
|
|
[disaster.radio]: https://disaster.radio
|
2021-07-29 22:36:53 +05:30
|
|
|
[startnx]: #start-naxalnet
|
2021-08-15 15:02:28 +05:30
|
|
|
[iwd]: https://iwd.wiki.kernel.org "WiFi daemon"
|
2021-08-01 16:58:48 +05:30
|
|
|
[free-sw]: https://gnu.org/philosophy/free-sw.html "What is free software?"
|
2021-08-09 20:06:57 +05:30
|
|
|
[enablenx]: #running-at-boot
|
2021-08-18 15:34:07 +05:30
|
|
|
[requirements]: #requirements
|
|
|
|
[install-manual]: #manually
|