Skip to content

Commit

Permalink
Add sections and sections of docs
Browse files Browse the repository at this point in the history
  • Loading branch information
benhylau committed Dec 10, 2019
1 parent b138567 commit 08c2e38
Show file tree
Hide file tree
Showing 69 changed files with 869 additions and 63 deletions.
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
Meshnet @ DWeb Camp 2019
========================
# Meshnet 📡 DWeb Camp 2019

See project website on: [https://dweb-camp-2019.github.io/meshnet/](https://dweb-camp-2019.github.io/meshnet/)
_Design, build, and stewardship of the participatory network_

Project website: [https://dweb-camp-2019.github.io/meshnet/](https://dweb-camp-2019.github.io/meshnet/)
30 changes: 28 additions & 2 deletions docs/2.0-network-design.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,35 @@ navigation: 20

## 2.0 Network Design

![network-diagram](images/network-diagram.jpg)
The DWeb Camp 2019 mesh network is designed as an experimental network that prioritizes flexibility and modularity over reliability.

TODO
### Hardware Components

The central router of each node is an ESPRESSObin single-board computer (SBC). If you are unfamiliar with SBCs, think your smart phone, but instead of having a screen and a camera it now has gigabit network ports. These relatively low-cost but powerful boards (lots of RAM and CPU cycles) are usually used for tinkering rather than running production networks, which means we have wandered pretty far off from "reliable networking equipment", in exchange for great flexibility, to perhaps one day play with resource intensive routing protocols or host dockerized peer-to-peer services right on our routers.

![node-mesh-hall](images/node-mesh-hall.jpg)

Another important feature is modularity, which allows us to easily construct different mesh nodes according to the network topology. For example, switching a pair of MikroTik Wireless Wire for an ethernet cable requires no software configuration, neither does switching between different types of Access Points or Network Switches. We also discovered an unanticipated consequence of having modular devices; it allowed us to hold a device and describe its single purpose in a mesh node, allowing new network participants to visualize the different components necessary to form a mesh node and build a mental picture of a network exchanging information over different wireless frequencies across the venue. This allowed us to form small teams of [Network Stewards](3.2-network-stewards.html) that go around the site rapidly extending, altering, and repairing the network, while on-boarding new participants in the process.

The diagram below illustrates how the router in **Node 1** uses two `lan` ports connect its Local Area Network (LAN) and one `wan` port to connect a mesh radio to access the Wide Area Network (WAN). In this example, Camp participants would connect their wireless devices (e.g. phones and laptops) to an Access Point attached to `lan0` and wired devices (e.g. Raspberry Pi and servers) to a Network Switch attached to `lan1`. In another node, both `lan` ports can each be attached to an Access Point in order to cover a large hall, for example, and no software changes would be necessary as explained above.

![network-diagram](images/network-diagram.jpg)

Since we only have one `wan` port, in cases where we use more than one mesh radio (i.e. not an edge node), we connect a VLAN-tagging switch to the `wan` port and then the mesh radios to the switch ports. This way, the router sees `wan.1`, `wan.2`, ..., `wan.N` network interfaces, for `N` mesh radios connected, and Babel can route traffic between them. The above diagram shows an example edge node, **Node 1**, that is connected to a relay node, **Node 2**, that utilizes a VLAN-tagging switch to connect three mesh radios.

We ended up deploying 6 nodes throughout Camp, and a 7th node as an activity. All our nodes have different components and some of them evolved throughout the days of Camp. You can see a [list of hardware](5.2-hardware-inventory.html) that make up these mesh nodes. Participants have no expectation of roaming across different building zones, and they can check their IP address to see exactly which node they are connected to.

### IP Assignments

![model-mesh-hall](images/model-mesh-hall.jpg)

The network assigns each connected device an IP address from the `10.X.0.0/16` subnet that is unique across Camp, where `X` corresponds to the building number on the physical map. For example, the `Mesh Hall` node has IP address `10.8.0.1` and assigns from `10.8.0.0/16` because it building number is `8`.

![network-physical-map](images/network-physical-map.png)

The lack of Network Address Translation (NAT) allows for any device to work as a server, having a stable IP address that other devices can reach. This eliminates the need for intermediary nodes with public IP addresses, making it easy for peer-to-peer protocols to bootstrap with anyone during Camp.

When a device moves from one building to another, and it decides to associate with another mesh node's Access Point, it will be assigned a new IP address meanwhile the last two octets will generally be the same as before. If one is running a server, this will change its IP address, so most service-hosting devices are connected via ethernet cable at a building.

### Credits

Expand Down
6 changes: 5 additions & 1 deletion docs/2.1-espressobin-router.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ The router is responsible for three things:

It is the central point of each node where all other devices are connected to.

![espressobin](images/espressobin.jpg)

### ESPRESSObin SBUD102 V5

We will configure the ESPRESSObin board so `wan` is used to connect point-to-point mesh radios, and `lan0` and `lan1` are bridged as `lan` for the local wired and wireless network:
Expand Down Expand Up @@ -73,4 +75,6 @@ We will configure the ESPRESSObin board so `wan` is used to connect point-to-poi
# wget https://raw.githubusercontent.com/dweb-camp-2019/meshnet/master/prodnet/espressobin/install
# chmod +x install
# ./install TYPE NODE_ID
```
```
_The ESPRESSObin V5 has been discontinued and became unavailable weeks before DWeb Camp 2019. The ESPRESSObin V7 can be used in place of the V5._
8 changes: 4 additions & 4 deletions docs/2.2-vlan-managed-switch.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ navigation: 22

## 2.2 VLAN Managed Switch

TODO

### NETGEAR GS305E Gigabit Managed Switch

This device is only necessary for `relay` and `gateway` nodes.

We configured the ESPRESSObin to have only one `wan` port. Babel needs to distinguish different network interfaces in order to compute route metrics between the different links and make routing decisions accordingly. So we will make virtual interfaces by tagged each mesh radio with a different VLAN ID, essentially multiplexing differently tagged packets into `wan` which then seperates them out on `wan.1` `wan.2` `wan.3` and `wan.4` on the ESPRESSObin, and what Babel sees are seperate network interfaces as if the ESPRESSObin has 4 `wan` ports.

![vlan-switch](images/vlan-switch.jpg)

### NETGEAR GS305E Gigabit Managed Switch

1. Connect to the GS305E default IP and login to the admin interface

1. Enable `Basic 802.1Q VLAN Status` then configure the following VLAN ID settings:
Expand Down
2 changes: 2 additions & 0 deletions docs/2.3-point-to-point-mesh-radios.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ navigation: 23

Directional radios that make a point-to-point link are put into bridge mode to serve as a wireless replacement of an ethernet cable. These high gain radios need to be aligned carefully to be pointed at one another within about 20 degrees to get optimal speeds.

![mesh-radio](images/mesh-radio.jpg)

### MikroTik SXTsq 5 ac (5 GHz)

1. Download the latest release of [RouterOS for the SXTsq 5 ac](https://mikrotik.com/product/sxtsq_5_ac) (`v6.44.3 (stable)` is the version used)
Expand Down
2 changes: 2 additions & 0 deletions docs/2.4-access-point-radios.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ Password: dwebcamp

There will be two users: `admin` with `ADMIN_PASSWORD`, and `me` with no password and read-only access to the access point web UI.

![access-points](images/access-points.jpg)

### MikroTik OmniTIK 5 PoE ac (Outdoor Omnidirectional)

1. Connect your computer to one of the LAN ethernet ports of the MikroTik device and configure the static IP `192.168.88.100` on the local network interface
Expand Down
4 changes: 3 additions & 1 deletion docs/2.5-client-poe-switches.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ navigation: 25

## 2.5 Client PoE Switches

Two models of Linksys PoE switches are used, SRW208P (8-port) and SRW224P (24-port), with 10/100 ports and two gigabit ports on each. 802.3af PoE splitters of 5V (micro-USB) and 12V (barrel-jack) are used to provide power and 10/100 networking to client devices, such as Raspberry Pis and laptops. They are on the same `10.X.0.0/16` LAN as client devices that are wirelessly connected through Access Points.

![network-switch](images/network-switch.jpg)

Two models of Linksys PoE switches are used, SRW208P (8-port) and SRW224P (24-port), with 10/100 ports and two gigabit ports on each. 802.3af PoE splitters of 5V (micro-USB) and 12V (barrel-jack) are used to provide power and 10/100 networking to client devices, such as Raspberry Pis and laptops. They are on the same `10.X.0.0/24` LAN as client devices that are wirelessly connected through Access Points.
At Camp, we used many more client switches, most of them loaned by Internet Archive or other networking-savvy participants. The variety of PoE and non-PoE devices behaved similarly without any custom configurations.
9 changes: 9 additions & 0 deletions docs/3.0-social-experience.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
layout: page
title: 3.0 Social Experience
navigation: 30
---

## 3.0 Social Experience

![mesh-activities](images/mesh-activities.jpg)
17 changes: 17 additions & 0 deletions docs/3.1-collaborative-planning.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
layout: page
title: 3.1 Collaborative Planning
navigation: 31
---

## 3.1 Collaborative Planning

- Async software development
- Testnet for applications
- Skills & hardware sourcing
- Hack day event @ Internet Archive

![planning-board](images/planning-board.jpg)
![planning-map](images/planning-map.jpg)
![hack-day](images/hack-day.jpg)
![node-hardware](images/node-hardware.jpg)
14 changes: 14 additions & 0 deletions docs/3.2-network-stewards.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
layout: page
title: 3.2 Network Stewards
navigation: 32
---

## 3.2 Network Stewards

- Spreading network knowledge
- Planning workshops
- Call: https://github.com/dweb-camp-2019/meshnet/issues/21

![network-model](images/network-model.jpg)
![planning-workshops](images/planning-workshops.jpg)
15 changes: 15 additions & 0 deletions docs/3.3-incident-response.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
layout: page
title: 3.3 Incident Response
navigation: 33
---

## 3.3 Incident Response

- Faulty cable, heat sink
- Rogue DHCP server Raspberry Pi
- Radio saturation
- Corrupt SD cards
- Reference standing issues

![rogue-dhcp](images/rogue-dhcp.jpg)
17 changes: 17 additions & 0 deletions docs/3.4-local-services.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
layout: page
title: 3.4 Local Services
navigation: 34
---

## 3.4 Local Services

- SSB, Scuttlebooth
- PLAN Systems: https://www.plan-systems.org
- Dinesh's Namma School Radio recording device: https://www.namdu1radio.com
- Riley's
- Geocities archive

![local-services](images/local-services.jpg)
![scuttlebooth](images/scuttlebooth.jpg)
![namma-school-radio](images/namma-school-radio.jpg)
19 changes: 19 additions & 0 deletions docs/3.5-retrospective.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
layout: page
title: 3.5 Retrospective
navigation: 35
---

## 3.5 Retrospective

- Metrics
- DNS
- Harder to engage for new ppl in short couple days packed with activities
- Highly subjective decisions
- https://communitynetworks.group/t/community-network-travel-fellowships/133/2

![metrics](images/metrics.jpg)

- Hiure: https://vimeo.com/355405732 / https://archive.org/details/008511397
- communitynetworks.group: https://communitynetworks.group/t/community-network-travel-fellowships/133
- Dinesh: https://photos.google.com/share/AF1QipP-x5iVSi9QJrj9cnB2urpo4A1y9OApwHqb1PG7v_aNUQ-VC5fpzyV_q1reP29LeA?key=SW52cEsxQXZBTksxaUFRcXZLWW0wVUFDUXdaNFpn
10 changes: 6 additions & 4 deletions docs/3.0-initial-plan.md → docs/4.0-planning-notes.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
---
layout: page
title: 3.0 Initial Plan
navigation: 30
title: 4.0 Planning Notes
navigation: 40
---

## 3.0 Initial Plan
## 4.0 Planning Notes

![access-point-positions](images/access-point-positions.png)
This section contains preliminary plans for the network design, when all the information we had was a satellite image of the potential venue for DWeb Camp 2019. Many things about the network has changed since then as more information becomes available, such as the event areas, existing structures, number of participants, power availability, device availability, financial budgets, and results of technical discussions and experimentations. This section presents some of these early planning summaries to give an idea of our network during its planning stages.

### Hardware

![access-point-positions](images/access-point-positions.png)

The diagram above is the area map, with preliminary positions of _mesh nodes_ that together form the local mesh network.
Each node has a 100 m radius circle around it, representing the region where client devices are expected to form a good connection with the node's access point.
There is a larger 150 m radius circle around where devices may be able to connect. The green dotted lines represent point-to-point links between nodes that together form the local mesh network.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
layout: page
title: 3.1 Client Device Roaming
navigation: 31
title: 4.1 Client Device Roaming
navigation: 41
---

## 3.1 Client Device Roaming
## 4.1 Client Device Roaming

### Summary

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
layout: page
title: 3.2 Babel + WireGuard Mesh
navigation: 32
title: 4.2 Babel + WireGuard Mesh
navigation: 42
---

## 3.2 Babel + WireGuard Mesh
## 4.2 Babel + WireGuard Mesh

### Summary

Expand Down
6 changes: 3 additions & 3 deletions docs/3.3-site-survey.md → docs/4.3-site-survey.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
layout: page
title: 3.3 Site Survey
navigation: 33
title: 4.3 Site Survey
navigation: 43
---

## 3.3 Site Survey
## 4.3 Site Survey

This is a summary of notes from my visit to The Farm that is relevant to the planning of the local mesh network, and some follow-up discussions with various people that happened over April.

Expand Down
5 changes: 0 additions & 5 deletions docs/4.4-photo-gallery.md

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
layout: page
title: 3.4 Planning Questions
navigation: 34
title: 4.4 Planning Questions
navigation: 44
---

## 3.4 Planning Questions
## 4.4 Planning Questions

_This is the place to collect questions and comments that have come up in the planning stages.
If you want to learn more or contribute to the project, this is probably a good read after looking at the [README](README.md).
Expand Down Expand Up @@ -63,3 +63,5 @@ I think this is an important piece we need to plan, not only as network operator
The meshnet is _a_ network that we can spend some time to plan ahead of time, and can test at the venue, to make sure there is power at the nodes, etc. People are also free to bring their own network gear and set up say... a LoRa network or a parallel WiFi network.

The building will be collaborative, with human processes drawn from community networks rather than "here's your IP and no you cannot connect your own radios to it". We will discuss the protocols on GitHub and if someone brings a radio and antenna they should be able to hook into the network too. The hardware build is very much part of the camp! If someone brings a solar node I'd be thrilled :)

_[More questions](https://github.com/dweb-camp-2019/meshnet/issues/2) were discussed on [GitHub Issues](https://github.com/dweb-camp-2019/meshnet/issues?utf8=%E2%9C%93&q=is%3Aissue) as we got closer to the event date._
17 changes: 17 additions & 0 deletions docs/5.0-additional-resources.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
layout: page
title: 5.0 Additional Resources
navigation: 50
---

## 5.0 Additional Resources

This section contains important project resources that don't fit into the above sections.

[5.1 Application Testnet](5.1-application-testnet.html) contains software that allows application developers to use two Raspberry Pis to emulate the mesh network environment. This was useful for developers to test their applications prior to arriving to the experimental network.

[5.2 Hardware Inventory](5.2-hardware-inventory.html) contains a list of hardware used and budget information. The only items that are not tracked on this list that made up part of the network are Internet backhaul equipment provided by the venue and Internet Service Provider, and standard network switches brought to Camp by participants.

[5.3 Graphic Assets](5.3-graphic-assets.html) contains high-res digital art created by various designers at Camp for the purpose of the mesh network project.

[5.4 Photo Gallery](gallery/2019/) contains photos taken by various Camp participants that are related to setting up of the mesh network. You can find many more general photos about the event at Internet Archive's [DWeb Camp 2019 Collection](https://archive.org/details/dwebcamp2019).
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
layout: page
title: 4.1 Application Testnet
navigation: 41
title: 5.1 Application Testnet
navigation: 51
---

## 4.1 Application Testnet
## 5.1 Application Testnet

This uses two Raspberry Pi 3B or 3B+ to emulate the network environment from the perspective of a device plugged into the local mesh network.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
layout: page
title: 4.2 Hardware Inventory
navigation: 42
title: 5.2 Hardware Inventory
navigation: 52
---

## 4.2 Hardware Inventory
## 5.2 Hardware Inventory

We are expecting to set up 6-8 _Mesh Nodes_ depending on the area of coverage, which we will not know until early-July when registration level will tell us how far out the camp sites will spread.

Expand Down
6 changes: 3 additions & 3 deletions docs/4.3-graphic-assets.md → docs/5.3-graphic-assets.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
layout: page
title: 4.3 Graphic Assets
navigation: 43
title: 5.3 Graphic Assets
navigation: 53
---

## 4.3 Graphic Assets
## 5.3 Graphic Assets

### Network Physical Map

Expand Down
5 changes: 5 additions & 0 deletions docs/5.4-photo-gallery.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
permalink: /gallery/2019/
title: 5.4 Photo Gallery
navigation: 54
---
Loading

0 comments on commit 08c2e38

Please sign in to comment.