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.

> cd

> 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

> ./do

> ./cjdroute

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:

auto wlan0

iface wlan0 inet static



wireless-channel 1

wireless-essid MYNETWORK

wireless-mode ad-hoc

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

> ./peerStats

> ./dumptables

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/

Friends are too far away? you could try a long distance or get crazy with lasers!

Step 6: More Resources

Here are some helpful links to learn more!

About This Instructable




More by Malkaris:meshlocal, be the Internet. C.H.I.P Introduction (for Nerds) ev3 auto wheel calibration 
Add instructable to: