2021-05-10 13:36:30 +05:30
|
|
|
# naxalnet
|
|
|
|
|
2021-06-06 17:49:56 +05:30
|
|
|
**naxalnet** is an experiment to create a wireless mesh network for
|
|
|
|
communicating with each other during an internet shutdown, using
|
2021-05-10 15:15:42 +05:30
|
|
|
existing software and tech as much as possible. Currently
|
2021-06-06 17:49:56 +05:30
|
|
|
you can only communicate with other peers running naxalnet or
|
|
|
|
using the same network as naxalnet. It uses
|
2021-06-09 17:22:20 +05:30
|
|
|
[B.A.T.M.A.N. Advanced][batman-adv],
|
2021-06-06 17:49:56 +05:30
|
|
|
an implementation of the B.A.T.M.A.N. routing protocol to
|
|
|
|
communicate with peers.
|
2021-05-10 15:15:42 +05:30
|
|
|
|
|
|
|
The name naxal comes from Naxalbari, a village in Darjeeling,
|
|
|
|
West Bengal.
|
|
|
|
|
|
|
|
<!-- 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
|
|
|
|
|
|
|
Using the name Naxal does not imply any form of connection
|
2021-06-15 14:24:03 +05:30
|
|
|
with anyone the government of India collectively calles Urban
|
|
|
|
Naxals (human rights activists, lawyers, poets, writers, journalists
|
|
|
|
or anyone else advocating for their rights).
|
2021-05-10 15:15:42 +05:30
|
|
|
|
|
|
|
-->
|
|
|
|
|
|
|
|
## Requirements
|
|
|
|
|
2021-06-15 17:21:13 +05:30
|
|
|
- systemd{,-networkd} v248 or more (for [batman support][batman-systemd])
|
2021-06-04 22:27:54 +05:30
|
|
|
- Linux kernel with batman-adv module (if `modinfo batman-adv` shows
|
|
|
|
no error then you already have it)
|
2021-05-21 20:18:49 +05:30
|
|
|
- iwd (for starting ad-hoc network)
|
2021-06-07 09:47:35 +05:30
|
|
|
- python3
|
2021-06-09 17:22:20 +05:30
|
|
|
- [python-dasbus][]
|
2021-05-21 20:18:49 +05:30
|
|
|
- wifi adapter with ad-hoc support
|
2021-06-19 12:40:08 +05:30
|
|
|
- two or more computers with wifi adapter, called nodes
|
2021-06-12 19:28:59 +05:30
|
|
|
- systemd-resolved (optional, for DNS)
|
2021-06-15 14:24:03 +05:30
|
|
|
- batctl (optional, for debugging)
|
2021-05-10 15:15:42 +05:30
|
|
|
|
2021-05-11 12:27:58 +05:30
|
|
|
## Installing
|
|
|
|
|
2021-06-11 10:15:35 +05:30
|
|
|
### Arch Linux
|
|
|
|
|
2021-06-14 11:11:36 +05:30
|
|
|
Install [naxalnet-git][] from the AUR with your favourite helper:
|
2021-06-11 10:15:35 +05:30
|
|
|
|
|
|
|
```sh
|
|
|
|
yay -S naxalnet-git
|
|
|
|
```
|
|
|
|
|
2021-06-19 12:40:08 +05:30
|
|
|
Optionally, [setup systemd-resolved][arch-resolved] for DNS if any
|
|
|
|
of the nodes have internet access.
|
2021-06-14 11:11:36 +05:30
|
|
|
|
2021-05-11 12:27:58 +05:30
|
|
|
### Manually
|
|
|
|
|
2021-05-11 13:10:31 +05:30
|
|
|
Clone the repo and cd into it.
|
|
|
|
|
2021-05-11 12:27:58 +05:30
|
|
|
Run `sudo make install` to install naxalnet. This will install naxalnet in
|
2021-06-06 17:49:56 +05:30
|
|
|
`/usr/bin/naxalnet`.
|
2021-05-10 15:15:42 +05:30
|
|
|
|
2021-06-06 17:49:56 +05:30
|
|
|
After installing, reload systemd so that you can enable `naxalnet.service`
|
2021-05-11 12:27:58 +05:30
|
|
|
without rebooting:
|
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-05-11 13:10:31 +05:30
|
|
|
You need more than one computer running for the connection to work.
|
2021-06-15 14:24:03 +05:30
|
|
|
|
|
|
|
### Communicate between peers
|
|
|
|
|
|
|
|
Connect a wifi adapter to all the computers you intend to run
|
|
|
|
naxalnet.
|
|
|
|
Start the naxalnet service on all of them:
|
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-06-15 14:24:03 +05:30
|
|
|
To test if it works, run `ip addr` to find out your address.
|
|
|
|
Note the `inet` or `inet6` address of `bridge0`. Ping the address
|
|
|
|
from another computer (example: `ping 169.254.62.90`) to find out
|
|
|
|
if it is online. Press Ctrl-C to stop.
|
|
|
|
|
|
|
|
### Getting internet access
|
|
|
|
|
|
|
|
Connect an ethernet to any of the peers and start naxalnet.
|
|
|
|
Now all the peers should be able to connect after renewing
|
|
|
|
their DHCP connection (`sudo networkctl renew bridge0`).
|
|
|
|
|
|
|
|
### Tethering via WiFi AP
|
|
|
|
|
|
|
|
Connect two wifi adapters on a device and start naxalnet.
|
|
|
|
Now an ap will be created on one of the devices 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
|
|
|
|
|
2021-06-06 17:49:56 +05:30
|
|
|
Starting the service will stop `NetworkManager.service` and
|
|
|
|
`wpa_supplicant.service` if it is running. If you start either of these
|
2021-06-09 17:22:20 +05:30
|
|
|
services after naxalnet is started, systemd will stop naxalnet.
|
2021-06-04 22:27:54 +05:30
|
|
|
|
2021-06-06 17:49:56 +05:30
|
|
|
To run naxalnet at boot, enable the service:
|
|
|
|
|
|
|
|
```sh
|
|
|
|
sudo systemctl enable naxalnet.service
|
2021-05-10 15:15:42 +05:30
|
|
|
```
|
2021-06-04 22:27:54 +05:30
|
|
|
|
2021-05-10 15:15:42 +05:30
|
|
|
Now naxalnet will configure a batman interface 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
|
|
|
|
```
|
|
|
|
|
|
|
|
## How it works
|
|
|
|
|
|
|
|
The program naxalnet copies predefined systemd-networkd configuration
|
|
|
|
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 now use
|
|
|
|
services like [IPFS][], [Jami][], [Secure Scuttlebutt][ssb]
|
|
|
|
and others which can work without internet access.
|
2021-05-10 15:15:42 +05:30
|
|
|
|
2021-05-11 12:16:32 +05:30
|
|
|
## Uninstalling
|
|
|
|
|
2021-06-04 22:27:54 +05:30
|
|
|
Currently there is now way to uninstall naxalnet than manually removing
|
2021-05-11 12:27:58 +05:30
|
|
|
the files:
|
2021-06-04 22:27:54 +05:30
|
|
|
|
|
|
|
```sh
|
|
|
|
sudo rm -rf /usr/{bin,share}/naxalnet \
|
|
|
|
/usr/lib/systemd/system/naxalnet.service
|
2021-05-11 12:27:58 +05:30
|
|
|
```
|
2021-06-04 22:27:54 +05:30
|
|
|
|
2021-06-19 12:40:08 +05:30
|
|
|
## Similar projects
|
|
|
|
|
|
|
|
- [LibreMesh][libremesh]: framework for OpenWrt-based
|
|
|
|
firmwares
|
|
|
|
- [disaster.radio][]: solar-powered communications network
|
|
|
|
|
2021-06-06 11:25:37 +05:30
|
|
|
## License
|
|
|
|
|
|
|
|
This program is free 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.
|
|
|
|
|
2021-06-09 13:12:39 +05:30
|
|
|
See [LICENSE](LICENSE) for the complete version of the
|
2021-06-06 11:25:37 +05:30
|
|
|
license.
|
|
|
|
|
2021-06-04 22:27:54 +05:30
|
|
|
This project is in alpha stage. Documentation is incomplete.
|
2021-06-09 17:22:20 +05:30
|
|
|
|
|
|
|
[batman-adv]: https://www.open-mesh.org/projects/batman-adv/wiki
|
|
|
|
[ipfs]: https://ipfs.io
|
|
|
|
[jami]: https://jami.net
|
|
|
|
[ssb]: https://scuttlebutt.nz
|
|
|
|
[python-dasbus]: https://github.com/rhinstaller/dasbus
|
2021-06-11 10:15:35 +05:30
|
|
|
[naxalnet-git]: https://aur.archlinux.org/packages/naxalnet-git
|
2021-06-14 11:11:36 +05:30
|
|
|
[arch-resolved]: https://wiki.archlinux.org/title/Systemd-resolved#DNS
|
2021-06-15 17:21:13 +05:30
|
|
|
[batman-systemd]: https://www.open-mesh.org/news/101
|
2021-06-19 12:40:08 +05:30
|
|
|
[libremesh]: https://libremesh.org
|
|
|
|
[disaster.radio]: https://disaster.radio/
|