Difference between revisions of "Mesh/Firmware/Overview"

From Sudo Room
Jump to navigation Jump to search
m (Redconfetti moved page Mesh/SudoWRT Tour to Mesh/Firmware/Overview: overview for misc notes and links to other more detailed pages)
 
(15 intermediate revisions by the same user not shown)
Line 1: Line 1:
= Accessing Home Node via SSH ==
= OpenWRT Build =


NOTE: This is a work in progress. These notes are not necessarily accurate.
The SudoMesh project maintains firmware builds for a certain set of Wireless routers (home nodes) and extender antennas. The code used to create these builds is available in [https://github.com/sudomesh/sudowrt-firmware SudoWRT-Firmware].


You should be able to connect to your device via one of the WiFi SSID's detected by your computer. Inspect the network settings assigned to your machine to discover the gateway address, which is the IP address of your home node.
== Included Software Packages ==


Once you've obtained this IP address, make sure to write it down. You can use it to SSH into your home node when you are connected to the SudoMesh network. Alternatively you can always connect to the private network port of your home node (port 3) and SSH into the node as root on 172.30.0.1
The SudoWRT-Firmware code contains a configured list of software packages that are included within the builds for home nodes and the extender antennas.  


  ssh root@172.30.0.1
* Home Node Packages - [https://github.com/sudomesh/sudowrt-firmware/blob/master/openwrt_config/packages openwrt_config/packages].  
* Extender Antenna Packages - [https://github.com/sudomesh/sudowrt-firmware/blob/master/openwrt_config/packages.extender-node openwrt_config/packages.extender-node]
 
=== uhttpd ===
 
[https://wiki.openwrt.org/doc/howto/http.uhttpd uhttpd] is an efficient and stable web server daemon, suitable for lightweight tasks commonly used with embedded devices and proper integration with [https://wiki.openwrt.org/doc/uci OpenWrt's configuration framework (UCI)]. In particular, it is configured by default for the [https://wiki.openwrt.org/doc/techref/luci LuCI web interface] to administer OpenWrt. SudoMesh uses it's own [https://github.com/sudomesh/sudowrt-web-ui SudoWRT-Web-UI], see [[Mesh/Firmware/Web_Admin_Development]] for more information.
 
=== uhttpd-mod-ubus ===
 
[https://wiki.openwrt.org/doc/techref/ubus#access_to_ubus_over_http uhttpd-mod-ubus] is a module for uhttpd that acts as a proxy between the HTTP interface of the home node, and the local ubus that is available to processes running on the home node.
 
= Web Interface =
 
The [https://wiki.openwrt.org/doc/howto/webinterface.overview web interface] for OpenWRT is supported by a framework of components known as [https://wiki.openwrt.org/doc/techref/luci LuCI].
 
= Discovering Network Configuration =
 
== IP ==
 
Run <tt>ip addr show</tt> to discover the IP addresses assigned to your home node.
 
== IW ==
 
Use <tt>iw</tt> to inspect the wireless interfaces that are configured.
 
<tt>iw phy</tt> will display physical interfaces and capabilities, seeing each radio that is available.
 
<tt>iw dev</tt> will display devices
 
= Switch Configuration =
 
[https://wiki.openwrt.org/doc/techref/swconfig swconfig] is an OpenWRT binary for switch configuration. The routers have a switch that can be used to recognized [https://en.wikipedia.org/wiki/Virtual_LAN Virtual LAN (VLAN)]. You 5 different Ethernet devices,
but it's not that there are 5 different Ethernet interfaces, but instead the router is a switch that uses VLANs. You can configure traffic coming in on a specific VLAN so that it can be recognized (VLAN tagged) and routed as needed. You can have multiple layer 2 Ethernet networks on the same wire.
 
Use swconfig to see if there are other switches available by running `swconfig list`. Once you identify the device, run `swconfig dev eth0 show`. You will see
the various physical ports first, then you will see each VLAN.
 
The uplink port may show up in the list depending on the device.
 
Get the IP for the extenders from:
less /etc/config/notdhcpserver
 
There is a library that can be used to read from this config file, as well as
a command, called `uci` (unified configuration interface) that allows you to
obtain information such as the IP address of the extender nodes.
 
  uci show notdhcpserver
  uci show notdhcpserver[0].addresses
 
= Babeld =
 
[https://wiki.openwrt.org/doc/uci/babeld Babel] provides the entire routing table for the network.
 
  babeld -i
 
This provides you with the data on every node on the entire network. Every node and extender node connected to the mesh that you can reach will be listed. babeld is the daemon that broadcasts routes that are available via the ad-hoc network connection (pplsopen.net-node2node). The age shown in the output provides how long ago the node announced it's existence on the network. When a node becomes too old, it gets dropped from the table.
 
The mesh node will always try to route via the node that has the lowest metric. It tracks the metric also. The 'nexthop' value helps provide information used for routing. It's very lightweight, not complex.
 
SudoMesh uses a modified version of [https://github.com/sudomesh/babeld babeld], with support for adding or removing interfaces while babeld is running added.
 
= Exit Node =
 
Every home node routes traffic to the exit node that was setup for PeoplesOpen.net. This exit node acts as the gateway from the Virtual Private Network (VPN) used by PeoplesOpen.net to contain the SudoMesh network to the Internet.
 
= Extender Antenna Nodes =
 
A client/server system called [https://github.com/sudomesh/notdhcp notdhcp] was developed to help extender nodes obtain an IP address and establish a trust relationship with a SudoMesh home node upon physical connection.
 
As of May 2016 the wired interface between the extender node and the home node does not use SSL for communication, however this is planned for implementation after the completion of the [https://github.com/sudomesh/ubus-https-forwarder ubus-https-forwarder].
 
The ubus-https-forwarder software will be responsible for enabling the home nodes to receive requests on the HTTP interface provided by [https://wiki.openwrt.org/doc/techref/ubus#access_to_ubus_over_http uhttpd-mod-ubus] that are addressed for the extender nodes instead of the home node, and then forwarding those requests to the extender nodes.
 
Authentication is required when accessing the ubus HTTP interface, which may not yet be setup for the extender nodes. A possible approach is to update [https://github.com/sudomesh/notdhcp notdhcp] so that it provisions a password to the extender node upon physical connection. Then the notdhcp server could make the password available to the home node or the web interface client.

Latest revision as of 21:02, 5 May 2016

OpenWRT Build

The SudoMesh project maintains firmware builds for a certain set of Wireless routers (home nodes) and extender antennas. The code used to create these builds is available in SudoWRT-Firmware.

Included Software Packages

The SudoWRT-Firmware code contains a configured list of software packages that are included within the builds for home nodes and the extender antennas.

uhttpd

uhttpd is an efficient and stable web server daemon, suitable for lightweight tasks commonly used with embedded devices and proper integration with OpenWrt's configuration framework (UCI). In particular, it is configured by default for the LuCI web interface to administer OpenWrt. SudoMesh uses it's own SudoWRT-Web-UI, see Mesh/Firmware/Web_Admin_Development for more information.

uhttpd-mod-ubus

uhttpd-mod-ubus is a module for uhttpd that acts as a proxy between the HTTP interface of the home node, and the local ubus that is available to processes running on the home node.

Web Interface

The web interface for OpenWRT is supported by a framework of components known as LuCI.

Discovering Network Configuration

IP

Run ip addr show to discover the IP addresses assigned to your home node.

IW

Use iw to inspect the wireless interfaces that are configured.

iw phy will display physical interfaces and capabilities, seeing each radio that is available.

iw dev will display devices

Switch Configuration

swconfig is an OpenWRT binary for switch configuration. The routers have a switch that can be used to recognized Virtual LAN (VLAN). You 5 different Ethernet devices, but it's not that there are 5 different Ethernet interfaces, but instead the router is a switch that uses VLANs. You can configure traffic coming in on a specific VLAN so that it can be recognized (VLAN tagged) and routed as needed. You can have multiple layer 2 Ethernet networks on the same wire.

Use swconfig to see if there are other switches available by running `swconfig list`. Once you identify the device, run `swconfig dev eth0 show`. You will see the various physical ports first, then you will see each VLAN.

The uplink port may show up in the list depending on the device.

Get the IP for the extenders from: less /etc/config/notdhcpserver

There is a library that can be used to read from this config file, as well as a command, called `uci` (unified configuration interface) that allows you to obtain information such as the IP address of the extender nodes.

 uci show notdhcpserver
 uci show notdhcpserver[0].addresses

Babeld

Babel provides the entire routing table for the network.

 babeld -i

This provides you with the data on every node on the entire network. Every node and extender node connected to the mesh that you can reach will be listed. babeld is the daemon that broadcasts routes that are available via the ad-hoc network connection (pplsopen.net-node2node). The age shown in the output provides how long ago the node announced it's existence on the network. When a node becomes too old, it gets dropped from the table.

The mesh node will always try to route via the node that has the lowest metric. It tracks the metric also. The 'nexthop' value helps provide information used for routing. It's very lightweight, not complex.

SudoMesh uses a modified version of babeld, with support for adding or removing interfaces while babeld is running added.

Exit Node

Every home node routes traffic to the exit node that was setup for PeoplesOpen.net. This exit node acts as the gateway from the Virtual Private Network (VPN) used by PeoplesOpen.net to contain the SudoMesh network to the Internet.

Extender Antenna Nodes

A client/server system called notdhcp was developed to help extender nodes obtain an IP address and establish a trust relationship with a SudoMesh home node upon physical connection.

As of May 2016 the wired interface between the extender node and the home node does not use SSL for communication, however this is planned for implementation after the completion of the ubus-https-forwarder.

The ubus-https-forwarder software will be responsible for enabling the home nodes to receive requests on the HTTP interface provided by uhttpd-mod-ubus that are addressed for the extender nodes instead of the home node, and then forwarding those requests to the extender nodes.

Authentication is required when accessing the ubus HTTP interface, which may not yet be setup for the extender nodes. A possible approach is to update notdhcp so that it provisions a password to the extender node upon physical connection. Then the notdhcp server could make the password available to the home node or the web interface client.