mirror of
https://git.disroot.org/pranav/pybatmesh.git
synced 2024-12-03 12:11:01 +05:30
225 lines
6.6 KiB
Markdown
225 lines
6.6 KiB
Markdown
# 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.
|
|
|
|
<!-- NOTE TO ACTIVISTS
|
|
|
|
Running this program in the world's largest partly free democracy
|
|
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.
|
|
|
|
The author, not unlike the Government of India, does not wish
|
|
to take responsibility in your well-being if you get arrested under
|
|
a draconian national security law, which was once used to arrest
|
|
a person involved in the freedom struggle against British Raj.
|
|
|
|
-->
|
|
|
|
The name naxal comes from Naxalbari, a village in Darjeeling,
|
|
West Bengal.
|
|
|
|
<!-- UNCOMMENT WHEN NECESSARY
|
|
|
|
**Disclaimer**:
|
|
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.
|
|
|
|
Using the name Naxal does not imply any form of connection
|
|
with anyone currently at risk of death in overcrowded prisons.
|
|
|
|
-->
|
|
|
|
## 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?"
|