Introduction: Meshlocal, Be the Internet.
Get out your tin foil hat, we're going for a ride!
Everyone should be concerned with privacy, even if you're a lawful person, your personal information has power and it shouldn't be squandered. If you're unfamiliar with "CJDNS" then take a trip to the link below.
To add my own summary, the spirit of this is for people to take back control over the internet. What cjdns has done is allow anyone to create a private (not anonymous) network without any centralized control.
You might not know it, but the "World Wide Web" isn't very web-like at all. The major telecoms own backbone connections and ultimately control where the data can go. Imagine if evil-telco decides to make a competing service for instructables, eventually they will realize their own service is enabling a competitor. They're evil so they might interrupt or redirect all traffic to instructables to their lame site. Or they may more subtly throttle the data rates to instructables, until you rage quit and go to their fast-loading site.
You might have unlimited faith in your elected officials, and trust that they will do the right thing. Uphold something like net-neutrality and defend the purity of data on the internet. Especially since elected officials are generally well educated and very savvy on how technology works. Or we can start to rebuild and protect the Internet ourselves.
Imagine instead, that you and your neighbors agreed to connect your networks, and so-on until your whole community was an interconnected WEB of data paths. Then these community networks connected to other communities. The more connections the stronger the network would be
This project is about setting up the nodes will do this.
Step 1: The Bits
There are many ways to set this up. But this is instructables and the venerable Raspberry pi is my weapon of choice.
1. Mesh node: Linux computer w/wireless (rpi is a good place to start)
1. Some wifi adapters are not cooperative in ad hoc mode, I spent 3 days fighting with a pair of wifi modules that would do ad hoc, but would not broadcast. If you find you can't enable ad hoc, or you can't seem get ad hoc to behave. Check you settings then try a different adapter.
• Another Linux computer w/wireless (it takes two to network!)
• cjdns https://github.com/cjdelisle/cjdns
Step 2: Install, Configure, Run CJDNS
Starting with your ready-to-go raspbian rpi (not required, but good place to start)
to download the source for cjdns you need 'git'
> sudo apt-get install git
then pick a place for the source code.
> git clone https://github.com/cjdelisle/cjdns
*The raspberry pi might not have a NaCl lib available, you'll have to install one (https://github.com/ajres/nacl4raspi)
> cd cjdns
If all has gone well, you'll get some use instructions
First we'll generate our configuration file. In this file will be the Private key and our randomly generated ipv6 "fc" address. All cjdns ip-address start with "fc". Why? That's a good homework question, let me know what you learn!
> sudo ./cjdroute --genconf > /etc/cjdroute.conf
> sudo chmod 600 /etc/cjdroute.conf
to start our node:
> sudo ./cjdroute < /etc/cjdroute.conf
Now test your node
> ifconfig tun0
This should exist and have an address starting in 'fc' if it doesn't... it could be many things, so ask in the comments
Step 3: Configure for Ad Hoc
Now we're going to create the "physical" connection for our mesh node. (RF obeys physics, so it's physical!)
We're going for a persistent node so we'll make the changes to /etc/network/interfaces.
We'll move our default to "wifi" and create an adhoc version of interfaces, then link that to the primary.
I like this method because I can see without looking inside what configuration is installed.
> sudo mv /etc/network/interfaces /etc/network/interfaces.wifi
> sudo nano /etc/network/interfaces.adhoc
> sudo ln -s /etc/network/interfaces.adhoc /etc/network/interfaces
Find your wlan0 (wireless) part and replace it with the following:
iface wlan0 inet static
Now restart networking:
> sudo ifdown wlan0; sleep 2; sudo ifup wlan0
or just restart the rpi.
You should soon be able to see your adhoc network appear on your wireless networks (as seen from your desktop computer) If this computer can ad-hoc, you should be able to connect to your rpi.
*NOTE* we're doing static IP-addresses so you'll need to keep track of who's where. Each node must have the same subnet (192.168.1, or whatever you prefer) but the last bit must be unique.
** there are some auto-configuration tools, but I don't know them well enough yet to explain them here
Step 4: Test
Now repeat the cjdns install and ad-hoc setup on the second Linux computer (maybe a second rpi?)
Test your network.
> ping6 fc::
> ssh fc::
If you look inside the cjdns/contrib directory, there are some useful tools. check out
> cd ~/cjdns/contrib/python
Step 5: What Now?
Hopefully you've got friends, and even better if these friends are nerds, and even bestest if they live within wifi range (wish I had this back in the dorms!)
Repeat this process and see how many connections you can get, add services to your local-mesh. Gateways to the "clearnet" or make a peer on hyperboria.
Yeah, I didn't tell you, but there's a hidden community of tinfoil hat aficionados collaborating on this. There is lots of work, and introducing yourself as the organizer of a substantial local-mesh would earn you big nerd-points with these folks. They call their world-wide network hyperboria(or hype) https://hyperboria.net/
Step 6: More Resources
Here are some helpful links to learn more!