Updated documentation

This commit is contained in:
Mark Qvist 2022-04-28 10:19:43 +02:00
parent 5d90ea565a
commit fe065f8bdd
11 changed files with 360 additions and 140 deletions

View File

@ -9,9 +9,28 @@ scenarios.
Try Using a Reticulum-based Program Try Using a Reticulum-based Program
============================================= =============================================
If you simply want to try using a program built with Reticulum, you can take
a look at `Nomad Network <https://github.com/markqvist/nomadnet>`_, which If you simply want to try using a program built with Reticulum, a few different
provides a complete encrypted communications suite built with Reticulum. programs exist that allow basic communication and a range of other useful functions
over even extremely low-bandwidth Reticulum networks.
These programs will let you get a feel for how Reticulum works. They have been designed
to run well over networks based on LoRa or packet radio, but can also be used completely
over local WiFi, wired ethernet, the Internet, or any combination.
As such, it is easy to get started experimenting, without having to set up any radio
transceivers or infrastructure just to try it out. Launching the programs on separate
devices connected to the same WiFi network is enough to get started, and physical
radio interfaces can then be added later.
Nomad Network
^^^^^^^^^^^^^
The terminal-based program `Nomad Network <https://github.com/markqvist/nomadnet>`_
provides a complete encrypted communications suite built with Reticulum. It features
encrypted messaging (both direct and delayed-delivery for offline users), file sharing,
and has a built-in text-browser and page server with support for dynamically rendered pages,
user authentication and more.
.. image:: screenshots/nomadnet_3.png .. image:: screenshots/nomadnet_3.png
:target: _images/nomadnet_3.png :target: _images/nomadnet_3.png
@ -35,6 +54,9 @@ on your system, you might need to reboot your system for your program to become
available. If you get a "command not found" error or similar when running the available. If you get a "command not found" error or similar when running the
program, reboot your system and try again. program, reboot your system and try again.
Sideband
^^^^^^^^
If you would rather use a program with a graphical user interface, you can take If you would rather use a program with a graphical user interface, you can take
a look at `Sideband <https://unsigned.io/sideband>`_, which is available for Android, a look at `Sideband <https://unsigned.io/sideband>`_, which is available for Android,
Linux and macOS. Linux and macOS.
@ -44,6 +66,8 @@ Linux and macOS.
:align: center :align: center
:target: _images/sideband_1.png :target: _images/sideband_1.png
Sideband is currently in the early stages of development, but already provides basic
communication features, and interoperates with Nomad Network, or any other LXMF client.
Using the Included Utilities Using the Included Utilities
============================================= =============================================
@ -83,22 +107,29 @@ Once Reticulums knows which interfaces it should use, it will automatically
discover topography and configure transport of data to any destinations it discover topography and configure transport of data to any destinations it
knows about. knows about.
In situations where you already have an established WiFi or ethernet network, and
many devices that want to utilise the same external Reticulum network (for example over
LoRa), it will often be sufficient to let one system act as a Reticulum gateway, by
adding any external interfaces to this systems configuration, and enabling transport. Any
other device on your local WiFi will then be able to connect to this wider Reticulum
network just using the default interface configuration.
Possibly, the examples in the config file are enough to get you started. If Possibly, the examples in the config file are enough to get you started. If
you want more information, you can read the :ref:`Building Networks<networks-main>` you want more information, you can read the :ref:`Building Networks<networks-main>`
and :ref:`Interfaces<interfaces-main>` chapters of this manual. and :ref:`Interfaces<interfaces-main>` chapters of this manual.
Connecting Reticulum Instances Over the Internet Connecting Reticulum Instances Over the Internet
================================================ ================================================
Reticulum currently offers two interfaces for connecting instances over the Internet: :ref:`TCP<interfaces-tcps>` Reticulum currently offers two interfaces suitable for connecting instances over the Internet: :ref:`TCP<interfaces-tcps>`
and :ref:`I2P<interfaces-i2p>`. Each interface offers a different set of features, and Reticulum and :ref:`I2P<interfaces-i2p>`. Each interface offers a different set of features, and Reticulum
users should carefully choose the interface which best suites their needs. users should carefully choose the interface which best suites their needs.
The ``TCPServerInterface`` allows users to host an instance accessible over TCP/IP. This The ``TCPServerInterface`` allows users to host an instance accessible over TCP/IP. This
method is generally faster, lower latency, and more energy efficient than using ``I2PInterface``, method is generally faster, lower latency, and more energy efficient than using ``I2PInterface``,
however it also leaks considerable metadata about the server host. however it also leaks more data about the server host.
Direct TCP client connections are able to see the IP address of your instance and may be able TCP connections reveal the IP address of both your instance and the server to anyone who can
to use this information to determine your location or identity. Adversaries inspect the connection. Someone could use this information to determine your location or identity. Adversaries
inspecting your packets may be able to record packet metadata like time of transmission and packet size. inspecting your packets may be able to record packet metadata like time of transmission and packet size.
Even though Reticulum encrypts traffic, TCP does not, so an adversary may be able to use Even though Reticulum encrypts traffic, TCP does not, so an adversary may be able to use
packet inspection to learn that a system is running Reticulum, and what other IP adresses connect to it. packet inspection to learn that a system is running Reticulum, and what other IP adresses connect to it.
@ -107,10 +138,9 @@ which most Internet connections don't offer anymore.
The ``I2PInterface`` routes messages through the `Invisible Internet Protocol The ``I2PInterface`` routes messages through the `Invisible Internet Protocol
(I2P) <https://geti2p.net/en/>`_. To properly use this interface, users must also run an I2P daemon in (I2P) <https://geti2p.net/en/>`_. To properly use this interface, users must also run an I2P daemon in
parallel to ``rnsd``. For always-on I2P nodes it is recommended to use `i2pd <https://i2pd.website/>`_ because it parallel to ``rnsd``. For always-on I2P nodes it is recommended to use `i2pd <https://i2pd.website/>`_.
generally runs more efficiently.
By default, I2P will encrypt all traffic sent over the Internet, and By default, I2P will encrypt and mix all traffic sent over the Internet, and
hide both the sender and receiver Reticulum instance IP addresses. Running an I2P node hide both the sender and receiver Reticulum instance IP addresses. Running an I2P node
will also relay other I2P user's encrypted packets, which will use extra will also relay other I2P user's encrypted packets, which will use extra
bandwidth and compute power, but also makes timing attacks and other forms of bandwidth and compute power, but also makes timing attacks and other forms of

View File

@ -12,10 +12,11 @@ initialise Reticulum when it starts.
In many cases, this approach is sufficient. When any program needs to use In many cases, this approach is sufficient. When any program needs to use
Reticulum, it is loaded, initialised, interfaces are brought up, and the Reticulum, it is loaded, initialised, interfaces are brought up, and the
program can now communicate over Reticulum. If another program starts up program can now communicate over any Reticulum networks available. If another
and also wants access to the same Reticulum network, the instance is simply program starts up and also wants access to the same Reticulum network, the
shared. This works for any number of programs running concurrently, and is instance is simply shared. This works for any number of programs running
very easy to use, but depending on your use case, there are other options. concurrently, and is very easy to use, but depending on your use case, there
are other options.
Included Utility Programs Included Utility Programs
------------------------- -------------------------
@ -72,33 +73,49 @@ interfaces, similar to the ``ifconfig`` program.
# Example output # Example output
Shared Instance[37428] Shared Instance[37428]
Status: Up Status : Up
Connected applications: 1 Serving : 1 program
RX: 1.13 KB Rate : 1.00 Gbps
TX: 1.07 KB Traffic : 83.13 KB↑
86.10 KB↓
UDPInterface[Default UDP Interface/0.0.0.0:4242] AutoInterface[Local]
Status: Up Status : Up
RX: 1.01 KB Mode : Full
TX: 1.01 KB Rate : 10.00 Mbps
Peers : 1 reachable
Traffic : 63.23 KB↑
80.17 KB↓
TCPInterface[RNS Testnet Frankfurt/frankfurt.rns.unsigned.io:4965] TCPInterface[RNS Testnet Frankfurt/frankfurt.rns.unsigned.io:4965]
Status: Up Status : Up
RX: 1.37 KB Mode : Full
TX: 9.02 KB Rate : 10.00 Mbps
Traffic : 187.27 KB↑
74.17 KB↓
RNodeInterface[RNode UHF]
Status : Up
Mode : Access Point
Rate : 1.30 kbps
Access : 64-bit IFAC by <…e702c42ba8>
Traffic : 8.49 KB↑
9.23 KB↓
Reticulum Transport Instance <5245a8efe1788c6a70e1> running
.. code:: text .. code:: text
usage: rnsd [-h] [--config CONFIG] [-v] [-q] [--version] usage: rnstatus [-h] [--config CONFIG] [--version] [-a] [-v]
Reticulum Network Stack Daemon Reticulum Network Stack Status
optional arguments: optional arguments:
-h, --help show this help message and exit -h, --help show this help message and exit
--config CONFIG path to alternative Reticulum config directory --config CONFIG path to alternative Reticulum config directory
-v, --verbose
-q, --quiet
--version show program's version number and exit --version show program's version number and exit
-a, --all show all interfaces
-v, --verbose
The rnpath Utility The rnpath Utility
@ -117,7 +134,8 @@ destinations on the Reticulum network.
.. code:: text .. code:: text
usage: rnpath.py [-h] [--config CONFIG] [--version] [-v] [destination] usage: rnpath [-h] [--config CONFIG] [--version] [-t] [-d] [-w seconds] [-v]
[destination]
Reticulum Path Discovery Utility Reticulum Path Discovery Utility
@ -128,6 +146,9 @@ destinations on the Reticulum network.
-h, --help show this help message and exit -h, --help show this help message and exit
--config CONFIG path to alternative Reticulum config directory --config CONFIG path to alternative Reticulum config directory
--version show program's version number and exit --version show program's version number and exit
-t, --table show all known paths
-d, --drop remove the path to a destination
-w seconds timeout before giving up
-v, --verbose -v, --verbose

View File

@ -2,9 +2,9 @@
What is Reticulum? What is Reticulum?
****************** ******************
Reticulum is a cryptography-based networking stack for wide-area networks built on readily available hardware, that can operate even with very high latency and extremely low bandwidth. Reticulum is a cryptography-based networking stack for building wide-area networks with readily available hardware, that can continue to operate even with extremely low bandwidth and very high latency.
Reticulum allows you to build very wide-area networks with off-the-shelf tools, and offers end-to-end encryption, autoconfiguring cryptographically backed multi-hop transport, efficient addressing, unforgeable packet acknowledgements and more. Reticulum allows you to build wide-area networks with off-the-shelf tools, and offers end-to-end encryption, autoconfiguring cryptographically backed multi-hop transport, efficient addressing, unforgeable packet acknowledgements and more.
Reticulum is a complete networking stack, and does not need IP or higher layers, although it is easy to utilise IP (with TCP or UDP) as the underlying carrier for Reticulum. It is therefore trivial to tunnel Reticulum over the Internet or private IP networks. Reticulum is built directly on cryptographic principles, allowing resilience and stable functionality in open and trustless networks. Reticulum is a complete networking stack, and does not need IP or higher layers, although it is easy to utilise IP (with TCP or UDP) as the underlying carrier for Reticulum. It is therefore trivial to tunnel Reticulum over the Internet or private IP networks. Reticulum is built directly on cryptographic principles, allowing resilience and stable functionality in open and trustless networks.
@ -13,7 +13,7 @@ No kernel modules or drivers are required. Reticulum runs completely in userland
Current Status Current Status
============== ==============
Reticulum should currently be considered beta software. All core protocol features are implemented and functioning, but additions will probably occur as real-world use is explored. There will be bugs. The API and wire-format can be considered relatively stable at the moment, but could change if warranted. Reticulum should currently be considered beta software. All core protocol features are implemented and functioning, but additions will probably occur as real-world use is explored. There will be bugs. The API and wire-format can be considered stable at the moment, but could change if absolutely warranted.
What does Reticulum Offer? What does Reticulum Offer?
@ -24,9 +24,9 @@ What does Reticulum Offer?
* Complete initiator anonymity, communicate without revealing your identity * Complete initiator anonymity, communicate without revealing your identity
* Asymmetric X25519 encryption and Ed25519 signatures as a basis for all communication * Asymmetric encryption based on X25519, and Ed25519 signatures as a basis for all communication
* Forward Secrecy with ephemereal Elliptic Curve Diffie-Hellman keys on Curve25519 * Forward Secrecy by using ephemereal Elliptic Curve Diffie-Hellman keys on Curve25519
* Reticulum uses the `Fernet <https://github.com/fernet/spec/blob/master/Spec.md>`_ specification for on-the-wire / over-the-air encryption * Reticulum uses the `Fernet <https://github.com/fernet/spec/blob/master/Spec.md>`_ specification for on-the-wire / over-the-air encryption
@ -44,6 +44,12 @@ What does Reticulum Offer?
* An intuitive and developer-friendly API * An intuitive and developer-friendly API
* Efficient link establishment
* Total bandwidth cost of setting up a link is only 3 packets, totalling 237 bytes
* Low cost of keeping links open at only 0.62 bits per second
* Reliable and efficient transfer of arbritrary amounts of data * Reliable and efficient transfer of arbritrary amounts of data
* Reticulum can handle a few bytes of data or files of many gigabytes * Reticulum can handle a few bytes of data or files of many gigabytes
@ -52,11 +58,9 @@ What does Reticulum Offer?
* The API is very easy to use, and provides transfer progress * The API is very easy to use, and provides transfer progress
* Efficient link establishment * Authentication and virtual network segmentation on all supported interface types
* Total bandwidth cost of setting up a link is only 3 packets, totalling 237 bytes * Flexible scalability allowing extremely low-bandwidth networks to co-exist and interoperate with large, high-bandwidth networks
* Low cost of keeping links open at only 0.62 bits per second
Where can Reticulum be Used? Where can Reticulum be Used?
@ -68,9 +72,9 @@ ad-hoc WiFi, free-space optical links and similar systems are all examples
of the types of interfaces Reticulum was designed for. of the types of interfaces Reticulum was designed for.
An open-source LoRa-based interface called `RNode <https://unsigned.io/rnode>`_ An open-source LoRa-based interface called `RNode <https://unsigned.io/rnode>`_
has been designed specifically for use with Reticulum. It is possible to build has been designed as an example transceiver that is very suitable for
yourself, or it can be purchased as a complete transceiver that just needs a Reticulum. It is possible to build it yourself, to transform a common LoRa
USB connection to the host. development board into one, or it can be purchased as a complete transceiver.
Reticulum can also be encapsulated over existing IP networks, so there's Reticulum can also be encapsulated over existing IP networks, so there's
nothing stopping you from using it over wired ethernet or your local WiFi nothing stopping you from using it over wired ethernet or your local WiFi
@ -80,22 +84,40 @@ self-configuring, resilient and encrypted mesh.
As an example, it's possible to set up a Raspberry Pi connected to both a As an example, it's possible to set up a Raspberry Pi connected to both a
LoRa radio, a packet radio TNC and a WiFi network. Once the interfaces are LoRa radio, a packet radio TNC and a WiFi network. Once the interfaces are
configured, Reticulum will take care of the rest, and any device on the WiFi added, Reticulum will take care of the rest, and any device on the WiFi
network can communicate with nodes on the LoRa and packet radio sides of the network can communicate with nodes on the LoRa and packet radio sides of the
network, and vice versa. network, and vice versa.
Interface Types and Devices Interface Types and Devices
=========================== ===========================
Reticulum implements a range of generalised interface types that covers most of the communications hardware that Reticulum can run over. If your hardware is not supported, it's relatively simple to implement an interface class. Currently, the following interfaces are supported: Reticulum implements a range of generalised interface types that covers the communications hardware that Reticulum can run over. If your hardware is not supported, it's relatively simple to implement an interface class. Currently, Reticulum can use the following devices and communication mediums:
* Any ethernet device * Any ethernet device
* WiFi devices
* Wired ethernet devices
* Fibre-optic transceivers
* Data radios with ethernet ports
* LoRa using `RNode <https://unsigned.io/rnode>`_ * LoRa using `RNode <https://unsigned.io/rnode>`_
* Can be installed on `many popular LoRa boards <https://github.com/markqvist/rnodeconfigutil#supported-devices>`_
* Can be purchased as a `ready to use transceiver <https://unsigned.io/rnode>`_
* Packet Radio TNCs, such as `OpenModem <https://unsigned.io/openmodem>`_ * Packet Radio TNCs, such as `OpenModem <https://unsigned.io/openmodem>`_
* Any packet radio TNC in KISS mode
* Ideal for VHF and UHF radio
* Any device with a serial port * Any device with a serial port
* The I2P network
* TCP over IP networks * TCP over IP networks
* UDP over IP networks * UDP over IP networks

View File

@ -48,9 +48,23 @@ you want to do. This guide will outline sensible starting paths for different
scenarios.</p> scenarios.</p>
<div class="section" id="try-using-a-reticulum-based-program"> <div class="section" id="try-using-a-reticulum-based-program">
<h2>Try Using a Reticulum-based Program<a class="headerlink" href="#try-using-a-reticulum-based-program" title="Permalink to this headline"></a></h2> <h2>Try Using a Reticulum-based Program<a class="headerlink" href="#try-using-a-reticulum-based-program" title="Permalink to this headline"></a></h2>
<p>If you simply want to try using a program built with Reticulum, you can take <p>If you simply want to try using a program built with Reticulum, a few different
a look at <a class="reference external" href="https://github.com/markqvist/nomadnet">Nomad Network</a>, which programs exist that allow basic communication and a range of other useful functions
provides a complete encrypted communications suite built with Reticulum.</p> over even extremely low-bandwidth Reticulum networks.</p>
<p>These programs will let you get a feel for how Reticulum works. They have been designed
to run well over networks based on LoRa or packet radio, but can also be used completely
over local WiFi, wired ethernet, the Internet, or any combination.</p>
<p>As such, it is easy to get started experimenting, without having to set up any radio
transceivers or infrastructure just to try it out. Launching the programs on separate
devices connected to the same WiFi network is enough to get started, and physical
radio interfaces can then be added later.</p>
<div class="section" id="nomad-network">
<h3>Nomad Network<a class="headerlink" href="#nomad-network" title="Permalink to this headline"></a></h3>
<p>The terminal-based program <a class="reference external" href="https://github.com/markqvist/nomadnet">Nomad Network</a>
provides a complete encrypted communications suite built with Reticulum. It features
encrypted messaging (both direct and delayed-delivery for offline users), file sharing,
and has a built-in text-browser and page server with support for dynamically rendered pages,
user authentication and more.</p>
<a class="reference external image-reference" href="_images/nomadnet_3.png"><img alt="_images/nomadnet_3.png" src="_images/nomadnet_3.png" /></a> <a class="reference external image-reference" href="_images/nomadnet_3.png"><img alt="_images/nomadnet_3.png" src="_images/nomadnet_3.png" /></a>
<p><a class="reference external" href="https://github.com/markqvist/nomadnet">Nomad Network</a> is a user-facing client <p><a class="reference external" href="https://github.com/markqvist/nomadnet">Nomad Network</a> is a user-facing client
for the messaging and information-sharing protocol for the messaging and information-sharing protocol
@ -67,10 +81,16 @@ for the messaging and information-sharing protocol
on your system, you might need to reboot your system for your program to become on your system, you might need to reboot your system for your program to become
available. If you get a “command not found” error or similar when running the available. If you get a “command not found” error or similar when running the
program, reboot your system and try again.</p> program, reboot your system and try again.</p>
</div>
<div class="section" id="sideband">
<h3>Sideband<a class="headerlink" href="#sideband" title="Permalink to this headline"></a></h3>
<p>If you would rather use a program with a graphical user interface, you can take <p>If you would rather use a program with a graphical user interface, you can take
a look at <a class="reference external" href="https://unsigned.io/sideband">Sideband</a>, which is available for Android, a look at <a class="reference external" href="https://unsigned.io/sideband">Sideband</a>, which is available for Android,
Linux and macOS.</p> Linux and macOS.</p>
<a class="reference external image-reference" href="_images/sideband_1.png"><img alt="_images/sideband_1.png" class="align-center" src="_images/sideband_1.png" style="width: 400px;" /></a> <a class="reference external image-reference" href="_images/sideband_1.png"><img alt="_images/sideband_1.png" class="align-center" src="_images/sideband_1.png" style="width: 400px;" /></a>
<p>Sideband is currently in the early stages of development, but already provides basic
communication features, and interoperates with Nomad Network, or any other LXMF client.</p>
</div>
</div> </div>
<div class="section" id="using-the-included-utilities"> <div class="section" id="using-the-included-utilities">
<h2>Using the Included Utilities<a class="headerlink" href="#using-the-included-utilities" title="Permalink to this headline"></a></h2> <h2>Using the Included Utilities<a class="headerlink" href="#using-the-included-utilities" title="Permalink to this headline"></a></h2>
@ -102,20 +122,26 @@ or other things you might be used to from other network types.</p>
<p>Once Reticulums knows which interfaces it should use, it will automatically <p>Once Reticulums knows which interfaces it should use, it will automatically
discover topography and configure transport of data to any destinations it discover topography and configure transport of data to any destinations it
knows about.</p> knows about.</p>
<p>In situations where you already have an established WiFi or ethernet network, and
many devices that want to utilise the same external Reticulum network (for example over
LoRa), it will often be sufficient to let one system act as a Reticulum gateway, by
adding any external interfaces to this systems configuration, and enabling transport. Any
other device on your local WiFi will then be able to connect to this wider Reticulum
network just using the default interface configuration.</p>
<p>Possibly, the examples in the config file are enough to get you started. If <p>Possibly, the examples in the config file are enough to get you started. If
you want more information, you can read the <a class="reference internal" href="networks.html#networks-main"><span class="std std-ref">Building Networks</span></a> you want more information, you can read the <a class="reference internal" href="networks.html#networks-main"><span class="std std-ref">Building Networks</span></a>
and <a class="reference internal" href="interfaces.html#interfaces-main"><span class="std std-ref">Interfaces</span></a> chapters of this manual.</p> and <a class="reference internal" href="interfaces.html#interfaces-main"><span class="std std-ref">Interfaces</span></a> chapters of this manual.</p>
</div> </div>
<div class="section" id="connecting-reticulum-instances-over-the-internet"> <div class="section" id="connecting-reticulum-instances-over-the-internet">
<h2>Connecting Reticulum Instances Over the Internet<a class="headerlink" href="#connecting-reticulum-instances-over-the-internet" title="Permalink to this headline"></a></h2> <h2>Connecting Reticulum Instances Over the Internet<a class="headerlink" href="#connecting-reticulum-instances-over-the-internet" title="Permalink to this headline"></a></h2>
<p>Reticulum currently offers two interfaces for connecting instances over the Internet: <a class="reference internal" href="interfaces.html#interfaces-tcps"><span class="std std-ref">TCP</span></a> <p>Reticulum currently offers two interfaces suitable for connecting instances over the Internet: <a class="reference internal" href="interfaces.html#interfaces-tcps"><span class="std std-ref">TCP</span></a>
and <a class="reference internal" href="interfaces.html#interfaces-i2p"><span class="std std-ref">I2P</span></a>. Each interface offers a different set of features, and Reticulum and <a class="reference internal" href="interfaces.html#interfaces-i2p"><span class="std std-ref">I2P</span></a>. Each interface offers a different set of features, and Reticulum
users should carefully choose the interface which best suites their needs.</p> users should carefully choose the interface which best suites their needs.</p>
<p>The <code class="docutils literal notranslate"><span class="pre">TCPServerInterface</span></code> allows users to host an instance accessible over TCP/IP. This <p>The <code class="docutils literal notranslate"><span class="pre">TCPServerInterface</span></code> allows users to host an instance accessible over TCP/IP. This
method is generally faster, lower latency, and more energy efficient than using <code class="docutils literal notranslate"><span class="pre">I2PInterface</span></code>, method is generally faster, lower latency, and more energy efficient than using <code class="docutils literal notranslate"><span class="pre">I2PInterface</span></code>,
however it also leaks considerable metadata about the server host.</p> however it also leaks more data about the server host.</p>
<p>Direct TCP client connections are able to see the IP address of your instance and may be able <p>TCP connections reveal the IP address of both your instance and the server to anyone who can
to use this information to determine your location or identity. Adversaries inspect the connection. Someone could use this information to determine your location or identity. Adversaries
inspecting your packets may be able to record packet metadata like time of transmission and packet size. inspecting your packets may be able to record packet metadata like time of transmission and packet size.
Even though Reticulum encrypts traffic, TCP does not, so an adversary may be able to use Even though Reticulum encrypts traffic, TCP does not, so an adversary may be able to use
packet inspection to learn that a system is running Reticulum, and what other IP adresses connect to it. packet inspection to learn that a system is running Reticulum, and what other IP adresses connect to it.
@ -123,9 +149,8 @@ Hosting a publicly reachable instance over TCP also requires a publicly reachabl
which most Internet connections dont offer anymore.</p> which most Internet connections dont offer anymore.</p>
<p>The <code class="docutils literal notranslate"><span class="pre">I2PInterface</span></code> routes messages through the <a class="reference external" href="https://geti2p.net/en/">Invisible Internet Protocol <p>The <code class="docutils literal notranslate"><span class="pre">I2PInterface</span></code> routes messages through the <a class="reference external" href="https://geti2p.net/en/">Invisible Internet Protocol
(I2P)</a>. To properly use this interface, users must also run an I2P daemon in (I2P)</a>. To properly use this interface, users must also run an I2P daemon in
parallel to <code class="docutils literal notranslate"><span class="pre">rnsd</span></code>. For always-on I2P nodes it is recommended to use <a class="reference external" href="https://i2pd.website/">i2pd</a> because it parallel to <code class="docutils literal notranslate"><span class="pre">rnsd</span></code>. For always-on I2P nodes it is recommended to use <a class="reference external" href="https://i2pd.website/">i2pd</a>.</p>
generally runs more efficiently.</p> <p>By default, I2P will encrypt and mix all traffic sent over the Internet, and
<p>By default, I2P will encrypt all traffic sent over the Internet, and
hide both the sender and receiver Reticulum instance IP addresses. Running an I2P node hide both the sender and receiver Reticulum instance IP addresses. Running an I2P node
will also relay other I2P users encrypted packets, which will use extra will also relay other I2P users encrypted packets, which will use extra
bandwidth and compute power, but also makes timing attacks and other forms of bandwidth and compute power, but also makes timing attacks and other forms of
@ -299,7 +324,11 @@ for more information:</p>
<h3><a href="index.html">Table of Contents</a></h3> <h3><a href="index.html">Table of Contents</a></h3>
<ul> <ul>
<li><a class="reference internal" href="#">Getting Started Fast</a><ul> <li><a class="reference internal" href="#">Getting Started Fast</a><ul>
<li><a class="reference internal" href="#try-using-a-reticulum-based-program">Try Using a Reticulum-based Program</a></li> <li><a class="reference internal" href="#try-using-a-reticulum-based-program">Try Using a Reticulum-based Program</a><ul>
<li><a class="reference internal" href="#nomad-network">Nomad Network</a></li>
<li><a class="reference internal" href="#sideband">Sideband</a></li>
</ul>
</li>
<li><a class="reference internal" href="#using-the-included-utilities">Using the Included Utilities</a></li> <li><a class="reference internal" href="#using-the-included-utilities">Using the Included Utilities</a></li>
<li><a class="reference internal" href="#creating-a-network-with-reticulum">Creating a Network With Reticulum</a></li> <li><a class="reference internal" href="#creating-a-network-with-reticulum">Creating a Network With Reticulum</a></li>
<li><a class="reference internal" href="#connecting-reticulum-instances-over-the-internet">Connecting Reticulum Instances Over the Internet</a></li> <li><a class="reference internal" href="#connecting-reticulum-instances-over-the-internet">Connecting Reticulum Instances Over the Internet</a></li>

View File

@ -53,7 +53,11 @@ to participate in the development of Reticulum itself.</p>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference internal" href="gettingstartedfast.html">Getting Started Fast</a><ul> <li class="toctree-l1"><a class="reference internal" href="gettingstartedfast.html">Getting Started Fast</a><ul>
<li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#try-using-a-reticulum-based-program">Try Using a Reticulum-based Program</a></li> <li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#try-using-a-reticulum-based-program">Try Using a Reticulum-based Program</a><ul>
<li class="toctree-l3"><a class="reference internal" href="gettingstartedfast.html#nomad-network">Nomad Network</a></li>
<li class="toctree-l3"><a class="reference internal" href="gettingstartedfast.html#sideband">Sideband</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#using-the-included-utilities">Using the Included Utilities</a></li> <li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#using-the-included-utilities">Using the Included Utilities</a></li>
<li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#creating-a-network-with-reticulum">Creating a Network With Reticulum</a></li> <li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#creating-a-network-with-reticulum">Creating a Network With Reticulum</a></li>
<li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#connecting-reticulum-instances-over-the-internet">Connecting Reticulum Instances Over the Internet</a></li> <li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#connecting-reticulum-instances-over-the-internet">Connecting Reticulum Instances Over the Internet</a></li>

File diff suppressed because one or more lines are too long

View File

@ -50,10 +50,11 @@ Any program or application that uses Reticulum will automatically load and
initialise Reticulum when it starts.</p> initialise Reticulum when it starts.</p>
<p>In many cases, this approach is sufficient. When any program needs to use <p>In many cases, this approach is sufficient. When any program needs to use
Reticulum, it is loaded, initialised, interfaces are brought up, and the Reticulum, it is loaded, initialised, interfaces are brought up, and the
program can now communicate over Reticulum. If another program starts up program can now communicate over any Reticulum networks available. If another
and also wants access to the same Reticulum network, the instance is simply program starts up and also wants access to the same Reticulum network, the
shared. This works for any number of programs running concurrently, and is instance is simply shared. This works for any number of programs running
very easy to use, but depending on your use case, there are other options.</p> concurrently, and is very easy to use, but depending on your use case, there
are other options.</p>
<div class="section" id="included-utility-programs"> <div class="section" id="included-utility-programs">
<h2>Included Utility Programs<a class="headerlink" href="#included-utility-programs" title="Permalink to this headline"></a></h2> <h2>Included Utility Programs<a class="headerlink" href="#included-utility-programs" title="Permalink to this headline"></a></h2>
<p>If you often use Reticulum from several different programs, or simply want <p>If you often use Reticulum from several different programs, or simply want
@ -98,32 +99,48 @@ rnstatus
# Example output # Example output
Shared Instance[37428] Shared Instance[37428]
Status: Up Status : Up
Connected applications: 1 Serving : 1 program
RX: 1.13 KB Rate : 1.00 Gbps
TX: 1.07 KB Traffic : 83.13 KB↑
86.10 KB↓
UDPInterface[Default UDP Interface/0.0.0.0:4242] AutoInterface[Local]
Status: Up Status : Up
RX: 1.01 KB Mode : Full
TX: 1.01 KB Rate : 10.00 Mbps
Peers : 1 reachable
Traffic : 63.23 KB↑
80.17 KB↓
TCPInterface[RNS Testnet Frankfurt/frankfurt.rns.unsigned.io:4965] TCPInterface[RNS Testnet Frankfurt/frankfurt.rns.unsigned.io:4965]
Status: Up Status : Up
RX: 1.37 KB Mode : Full
TX: 9.02 KB Rate : 10.00 Mbps
Traffic : 187.27 KB↑
74.17 KB↓
RNodeInterface[RNode UHF]
Status : Up
Mode : Access Point
Rate : 1.30 kbps
Access : 64-bit IFAC by &lt;…e702c42ba8&gt;
Traffic : 8.49 KB↑
9.23 KB↓
Reticulum Transport Instance &lt;5245a8efe1788c6a70e1&gt; running
</pre></div> </pre></div>
</div> </div>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>usage: rnsd [-h] [--config CONFIG] [-v] [-q] [--version] <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>usage: rnstatus [-h] [--config CONFIG] [--version] [-a] [-v]
Reticulum Network Stack Daemon Reticulum Network Stack Status
optional arguments: optional arguments:
-h, --help show this help message and exit -h, --help show this help message and exit
--config CONFIG path to alternative Reticulum config directory --config CONFIG path to alternative Reticulum config directory
-v, --verbose
-q, --quiet
--version show program&#39;s version number and exit --version show program&#39;s version number and exit
-a, --all show all interfaces
-v, --verbose
</pre></div> </pre></div>
</div> </div>
</div> </div>
@ -138,7 +155,8 @@ rnpath eca6f4e4dc26ae329e61
Path found, destination &lt;eca6f4e4dc26ae329e61&gt; is 4 hops away via &lt;56b115c30cd386cad69c&gt; on TCPInterface[Testnet/frankfurt.rns.unsigned.io:4965] Path found, destination &lt;eca6f4e4dc26ae329e61&gt; is 4 hops away via &lt;56b115c30cd386cad69c&gt; on TCPInterface[Testnet/frankfurt.rns.unsigned.io:4965]
</pre></div> </pre></div>
</div> </div>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>usage: rnpath.py [-h] [--config CONFIG] [--version] [-v] [destination] <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>usage: rnpath [-h] [--config CONFIG] [--version] [-t] [-d] [-w seconds] [-v]
[destination]
Reticulum Path Discovery Utility Reticulum Path Discovery Utility
@ -149,6 +167,9 @@ optional arguments:
-h, --help show this help message and exit -h, --help show this help message and exit
--config CONFIG path to alternative Reticulum config directory --config CONFIG path to alternative Reticulum config directory
--version show program&#39;s version number and exit --version show program&#39;s version number and exit
-t, --table show all known paths
-d, --drop remove the path to a destination
-w seconds timeout before giving up
-v, --verbose -v, --verbose
</pre></div> </pre></div>
</div> </div>

View File

@ -43,13 +43,13 @@
<div class="section" id="what-is-reticulum"> <div class="section" id="what-is-reticulum">
<h1>What is Reticulum?<a class="headerlink" href="#what-is-reticulum" title="Permalink to this headline"></a></h1> <h1>What is Reticulum?<a class="headerlink" href="#what-is-reticulum" title="Permalink to this headline"></a></h1>
<p>Reticulum is a cryptography-based networking stack for wide-area networks built on readily available hardware, that can operate even with very high latency and extremely low bandwidth.</p> <p>Reticulum is a cryptography-based networking stack for building wide-area networks with readily available hardware, that can continue to operate even with extremely low bandwidth and very high latency.</p>
<p>Reticulum allows you to build very wide-area networks with off-the-shelf tools, and offers end-to-end encryption, autoconfiguring cryptographically backed multi-hop transport, efficient addressing, unforgeable packet acknowledgements and more.</p> <p>Reticulum allows you to build wide-area networks with off-the-shelf tools, and offers end-to-end encryption, autoconfiguring cryptographically backed multi-hop transport, efficient addressing, unforgeable packet acknowledgements and more.</p>
<p>Reticulum is a complete networking stack, and does not need IP or higher layers, although it is easy to utilise IP (with TCP or UDP) as the underlying carrier for Reticulum. It is therefore trivial to tunnel Reticulum over the Internet or private IP networks. Reticulum is built directly on cryptographic principles, allowing resilience and stable functionality in open and trustless networks.</p> <p>Reticulum is a complete networking stack, and does not need IP or higher layers, although it is easy to utilise IP (with TCP or UDP) as the underlying carrier for Reticulum. It is therefore trivial to tunnel Reticulum over the Internet or private IP networks. Reticulum is built directly on cryptographic principles, allowing resilience and stable functionality in open and trustless networks.</p>
<p>No kernel modules or drivers are required. Reticulum runs completely in userland, and can run on practically any system that runs Python 3. Reticulum runs well even on small single-board computers like the Pi Zero.</p> <p>No kernel modules or drivers are required. Reticulum runs completely in userland, and can run on practically any system that runs Python 3. Reticulum runs well even on small single-board computers like the Pi Zero.</p>
<div class="section" id="current-status"> <div class="section" id="current-status">
<h2>Current Status<a class="headerlink" href="#current-status" title="Permalink to this headline"></a></h2> <h2>Current Status<a class="headerlink" href="#current-status" title="Permalink to this headline"></a></h2>
<p>Reticulum should currently be considered beta software. All core protocol features are implemented and functioning, but additions will probably occur as real-world use is explored. There will be bugs. The API and wire-format can be considered relatively stable at the moment, but could change if warranted.</p> <p>Reticulum should currently be considered beta software. All core protocol features are implemented and functioning, but additions will probably occur as real-world use is explored. There will be bugs. The API and wire-format can be considered stable at the moment, but could change if absolutely warranted.</p>
</div> </div>
<div class="section" id="what-does-reticulum-offer"> <div class="section" id="what-does-reticulum-offer">
<h2>What does Reticulum Offer?<a class="headerlink" href="#what-does-reticulum-offer" title="Permalink to this headline"></a></h2> <h2>What does Reticulum Offer?<a class="headerlink" href="#what-does-reticulum-offer" title="Permalink to this headline"></a></h2>
@ -57,8 +57,8 @@
<li><p>Coordination-less globally unique adressing and identification</p></li> <li><p>Coordination-less globally unique adressing and identification</p></li>
<li><p>Fully self-configuring multi-hop routing</p></li> <li><p>Fully self-configuring multi-hop routing</p></li>
<li><p>Complete initiator anonymity, communicate without revealing your identity</p></li> <li><p>Complete initiator anonymity, communicate without revealing your identity</p></li>
<li><p>Asymmetric X25519 encryption and Ed25519 signatures as a basis for all communication</p></li> <li><p>Asymmetric encryption based on X25519, and Ed25519 signatures as a basis for all communication</p></li>
<li><p>Forward Secrecy with ephemereal Elliptic Curve Diffie-Hellman keys on Curve25519</p></li> <li><p>Forward Secrecy by using ephemereal Elliptic Curve Diffie-Hellman keys on Curve25519</p></li>
<li><p>Reticulum uses the <a class="reference external" href="https://github.com/fernet/spec/blob/master/Spec.md">Fernet</a> specification for on-the-wire / over-the-air encryption</p> <li><p>Reticulum uses the <a class="reference external" href="https://github.com/fernet/spec/blob/master/Spec.md">Fernet</a> specification for on-the-wire / over-the-air encryption</p>
<ul> <ul>
<li><p>All keys are ephemeral and derived from an ECDH key exchange on Curve25519</p></li> <li><p>All keys are ephemeral and derived from an ECDH key exchange on Curve25519</p></li>
@ -70,6 +70,12 @@
<li><p>Unforgeable packet delivery confirmations</p></li> <li><p>Unforgeable packet delivery confirmations</p></li>
<li><p>A variety of supported interface types</p></li> <li><p>A variety of supported interface types</p></li>
<li><p>An intuitive and developer-friendly API</p></li> <li><p>An intuitive and developer-friendly API</p></li>
<li><p>Efficient link establishment</p>
<ul>
<li><p>Total bandwidth cost of setting up a link is only 3 packets, totalling 237 bytes</p></li>
<li><p>Low cost of keeping links open at only 0.62 bits per second</p></li>
</ul>
</li>
<li><p>Reliable and efficient transfer of arbritrary amounts of data</p> <li><p>Reliable and efficient transfer of arbritrary amounts of data</p>
<ul> <ul>
<li><p>Reticulum can handle a few bytes of data or files of many gigabytes</p></li> <li><p>Reticulum can handle a few bytes of data or files of many gigabytes</p></li>
@ -77,12 +83,8 @@
<li><p>The API is very easy to use, and provides transfer progress</p></li> <li><p>The API is very easy to use, and provides transfer progress</p></li>
</ul> </ul>
</li> </li>
<li><p>Efficient link establishment</p> <li><p>Authentication and virtual network segmentation on all supported interface types</p></li>
<ul> <li><p>Flexible scalability allowing extremely low-bandwidth networks to co-exist and interoperate with large, high-bandwidth networks</p></li>
<li><p>Total bandwidth cost of setting up a link is only 3 packets, totalling 237 bytes</p></li>
<li><p>Low cost of keeping links open at only 0.62 bits per second</p></li>
</ul>
</li>
</ul> </ul>
</div> </div>
<div class="section" id="where-can-reticulum-be-used"> <div class="section" id="where-can-reticulum-be-used">
@ -93,9 +95,9 @@ modems, LoRa radios, serial lines, AX.25 TNCs, amateur radio digital modes,
ad-hoc WiFi, free-space optical links and similar systems are all examples ad-hoc WiFi, free-space optical links and similar systems are all examples
of the types of interfaces Reticulum was designed for.</p> of the types of interfaces Reticulum was designed for.</p>
<p>An open-source LoRa-based interface called <a class="reference external" href="https://unsigned.io/rnode">RNode</a> <p>An open-source LoRa-based interface called <a class="reference external" href="https://unsigned.io/rnode">RNode</a>
has been designed specifically for use with Reticulum. It is possible to build has been designed as an example transceiver that is very suitable for
yourself, or it can be purchased as a complete transceiver that just needs a Reticulum. It is possible to build it yourself, to transform a common LoRa
USB connection to the host.</p> development board into one, or it can be purchased as a complete transceiver.</p>
<p>Reticulum can also be encapsulated over existing IP networks, so theres <p>Reticulum can also be encapsulated over existing IP networks, so theres
nothing stopping you from using it over wired ethernet or your local WiFi nothing stopping you from using it over wired ethernet or your local WiFi
network, where itll work just as well. In fact, one of the strengths of network, where itll work just as well. In fact, one of the strengths of
@ -103,18 +105,36 @@ Reticulum is how easily it allows you to connect different mediums into a
self-configuring, resilient and encrypted mesh.</p> self-configuring, resilient and encrypted mesh.</p>
<p>As an example, its possible to set up a Raspberry Pi connected to both a <p>As an example, its possible to set up a Raspberry Pi connected to both a
LoRa radio, a packet radio TNC and a WiFi network. Once the interfaces are LoRa radio, a packet radio TNC and a WiFi network. Once the interfaces are
configured, Reticulum will take care of the rest, and any device on the WiFi added, Reticulum will take care of the rest, and any device on the WiFi
network can communicate with nodes on the LoRa and packet radio sides of the network can communicate with nodes on the LoRa and packet radio sides of the
network, and vice versa.</p> network, and vice versa.</p>
</div> </div>
<div class="section" id="interface-types-and-devices"> <div class="section" id="interface-types-and-devices">
<h2>Interface Types and Devices<a class="headerlink" href="#interface-types-and-devices" title="Permalink to this headline"></a></h2> <h2>Interface Types and Devices<a class="headerlink" href="#interface-types-and-devices" title="Permalink to this headline"></a></h2>
<p>Reticulum implements a range of generalised interface types that covers most of the communications hardware that Reticulum can run over. If your hardware is not supported, its relatively simple to implement an interface class. Currently, the following interfaces are supported:</p> <p>Reticulum implements a range of generalised interface types that covers the communications hardware that Reticulum can run over. If your hardware is not supported, its relatively simple to implement an interface class. Currently, Reticulum can use the following devices and communication mediums:</p>
<ul class="simple"> <ul class="simple">
<li><p>Any ethernet device</p></li> <li><p>Any ethernet device</p>
<li><p>LoRa using <a class="reference external" href="https://unsigned.io/rnode">RNode</a></p></li> <ul>
<li><p>Packet Radio TNCs, such as <a class="reference external" href="https://unsigned.io/openmodem">OpenModem</a></p></li> <li><p>WiFi devices</p></li>
<li><p>Wired ethernet devices</p></li>
<li><p>Fibre-optic transceivers</p></li>
<li><p>Data radios with ethernet ports</p></li>
</ul>
</li>
<li><p>LoRa using <a class="reference external" href="https://unsigned.io/rnode">RNode</a></p>
<ul>
<li><p>Can be installed on <a class="reference external" href="https://github.com/markqvist/rnodeconfigutil#supported-devices">many popular LoRa boards</a></p></li>
<li><p>Can be purchased as a <a class="reference external" href="https://unsigned.io/rnode">ready to use transceiver</a></p></li>
</ul>
</li>
<li><p>Packet Radio TNCs, such as <a class="reference external" href="https://unsigned.io/openmodem">OpenModem</a></p>
<ul>
<li><p>Any packet radio TNC in KISS mode</p></li>
<li><p>Ideal for VHF and UHF radio</p></li>
</ul>
</li>
<li><p>Any device with a serial port</p></li> <li><p>Any device with a serial port</p></li>
<li><p>The I2P network</p></li>
<li><p>TCP over IP networks</p></li> <li><p>TCP over IP networks</p></li>
<li><p>UDP over IP networks</p></li> <li><p>UDP over IP networks</p></li>
</ul> </ul>

View File

@ -9,9 +9,28 @@ scenarios.
Try Using a Reticulum-based Program Try Using a Reticulum-based Program
============================================= =============================================
If you simply want to try using a program built with Reticulum, you can take
a look at `Nomad Network <https://github.com/markqvist/nomadnet>`_, which If you simply want to try using a program built with Reticulum, a few different
provides a complete encrypted communications suite built with Reticulum. programs exist that allow basic communication and a range of other useful functions
over even extremely low-bandwidth Reticulum networks.
These programs will let you get a feel for how Reticulum works. They have been designed
to run well over networks based on LoRa or packet radio, but can also be used completely
over local WiFi, wired ethernet, the Internet, or any combination.
As such, it is easy to get started experimenting, without having to set up any radio
transceivers or infrastructure just to try it out. Launching the programs on separate
devices connected to the same WiFi network is enough to get started, and physical
radio interfaces can then be added later.
Nomad Network
^^^^^^^^^^^^^
The terminal-based program `Nomad Network <https://github.com/markqvist/nomadnet>`_
provides a complete encrypted communications suite built with Reticulum. It features
encrypted messaging (both direct and delayed-delivery for offline users), file sharing,
and has a built-in text-browser and page server with support for dynamically rendered pages,
user authentication and more.
.. image:: screenshots/nomadnet_3.png .. image:: screenshots/nomadnet_3.png
:target: _images/nomadnet_3.png :target: _images/nomadnet_3.png
@ -35,6 +54,9 @@ on your system, you might need to reboot your system for your program to become
available. If you get a "command not found" error or similar when running the available. If you get a "command not found" error or similar when running the
program, reboot your system and try again. program, reboot your system and try again.
Sideband
^^^^^^^^
If you would rather use a program with a graphical user interface, you can take If you would rather use a program with a graphical user interface, you can take
a look at `Sideband <https://unsigned.io/sideband>`_, which is available for Android, a look at `Sideband <https://unsigned.io/sideband>`_, which is available for Android,
Linux and macOS. Linux and macOS.
@ -44,6 +66,8 @@ Linux and macOS.
:align: center :align: center
:target: _images/sideband_1.png :target: _images/sideband_1.png
Sideband is currently in the early stages of development, but already provides basic
communication features, and interoperates with Nomad Network, or any other LXMF client.
Using the Included Utilities Using the Included Utilities
============================================= =============================================
@ -83,22 +107,29 @@ Once Reticulums knows which interfaces it should use, it will automatically
discover topography and configure transport of data to any destinations it discover topography and configure transport of data to any destinations it
knows about. knows about.
In situations where you already have an established WiFi or ethernet network, and
many devices that want to utilise the same external Reticulum network (for example over
LoRa), it will often be sufficient to let one system act as a Reticulum gateway, by
adding any external interfaces to this systems configuration, and enabling transport. Any
other device on your local WiFi will then be able to connect to this wider Reticulum
network just using the default interface configuration.
Possibly, the examples in the config file are enough to get you started. If Possibly, the examples in the config file are enough to get you started. If
you want more information, you can read the :ref:`Building Networks<networks-main>` you want more information, you can read the :ref:`Building Networks<networks-main>`
and :ref:`Interfaces<interfaces-main>` chapters of this manual. and :ref:`Interfaces<interfaces-main>` chapters of this manual.
Connecting Reticulum Instances Over the Internet Connecting Reticulum Instances Over the Internet
================================================ ================================================
Reticulum currently offers two interfaces for connecting instances over the Internet: :ref:`TCP<interfaces-tcps>` Reticulum currently offers two interfaces suitable for connecting instances over the Internet: :ref:`TCP<interfaces-tcps>`
and :ref:`I2P<interfaces-i2p>`. Each interface offers a different set of features, and Reticulum and :ref:`I2P<interfaces-i2p>`. Each interface offers a different set of features, and Reticulum
users should carefully choose the interface which best suites their needs. users should carefully choose the interface which best suites their needs.
The ``TCPServerInterface`` allows users to host an instance accessible over TCP/IP. This The ``TCPServerInterface`` allows users to host an instance accessible over TCP/IP. This
method is generally faster, lower latency, and more energy efficient than using ``I2PInterface``, method is generally faster, lower latency, and more energy efficient than using ``I2PInterface``,
however it also leaks considerable metadata about the server host. however it also leaks more data about the server host.
Direct TCP client connections are able to see the IP address of your instance and may be able TCP connections reveal the IP address of both your instance and the server to anyone who can
to use this information to determine your location or identity. Adversaries inspect the connection. Someone could use this information to determine your location or identity. Adversaries
inspecting your packets may be able to record packet metadata like time of transmission and packet size. inspecting your packets may be able to record packet metadata like time of transmission and packet size.
Even though Reticulum encrypts traffic, TCP does not, so an adversary may be able to use Even though Reticulum encrypts traffic, TCP does not, so an adversary may be able to use
packet inspection to learn that a system is running Reticulum, and what other IP adresses connect to it. packet inspection to learn that a system is running Reticulum, and what other IP adresses connect to it.
@ -107,10 +138,9 @@ which most Internet connections don't offer anymore.
The ``I2PInterface`` routes messages through the `Invisible Internet Protocol The ``I2PInterface`` routes messages through the `Invisible Internet Protocol
(I2P) <https://geti2p.net/en/>`_. To properly use this interface, users must also run an I2P daemon in (I2P) <https://geti2p.net/en/>`_. To properly use this interface, users must also run an I2P daemon in
parallel to ``rnsd``. For always-on I2P nodes it is recommended to use `i2pd <https://i2pd.website/>`_ because it parallel to ``rnsd``. For always-on I2P nodes it is recommended to use `i2pd <https://i2pd.website/>`_.
generally runs more efficiently.
By default, I2P will encrypt all traffic sent over the Internet, and By default, I2P will encrypt and mix all traffic sent over the Internet, and
hide both the sender and receiver Reticulum instance IP addresses. Running an I2P node hide both the sender and receiver Reticulum instance IP addresses. Running an I2P node
will also relay other I2P user's encrypted packets, which will use extra will also relay other I2P user's encrypted packets, which will use extra
bandwidth and compute power, but also makes timing attacks and other forms of bandwidth and compute power, but also makes timing attacks and other forms of

View File

@ -12,10 +12,11 @@ initialise Reticulum when it starts.
In many cases, this approach is sufficient. When any program needs to use In many cases, this approach is sufficient. When any program needs to use
Reticulum, it is loaded, initialised, interfaces are brought up, and the Reticulum, it is loaded, initialised, interfaces are brought up, and the
program can now communicate over Reticulum. If another program starts up program can now communicate over any Reticulum networks available. If another
and also wants access to the same Reticulum network, the instance is simply program starts up and also wants access to the same Reticulum network, the
shared. This works for any number of programs running concurrently, and is instance is simply shared. This works for any number of programs running
very easy to use, but depending on your use case, there are other options. concurrently, and is very easy to use, but depending on your use case, there
are other options.
Included Utility Programs Included Utility Programs
------------------------- -------------------------
@ -72,33 +73,49 @@ interfaces, similar to the ``ifconfig`` program.
# Example output # Example output
Shared Instance[37428] Shared Instance[37428]
Status: Up Status : Up
Connected applications: 1 Serving : 1 program
RX: 1.13 KB Rate : 1.00 Gbps
TX: 1.07 KB Traffic : 83.13 KB↑
86.10 KB↓
UDPInterface[Default UDP Interface/0.0.0.0:4242] AutoInterface[Local]
Status: Up Status : Up
RX: 1.01 KB Mode : Full
TX: 1.01 KB Rate : 10.00 Mbps
Peers : 1 reachable
Traffic : 63.23 KB↑
80.17 KB↓
TCPInterface[RNS Testnet Frankfurt/frankfurt.rns.unsigned.io:4965] TCPInterface[RNS Testnet Frankfurt/frankfurt.rns.unsigned.io:4965]
Status: Up Status : Up
RX: 1.37 KB Mode : Full
TX: 9.02 KB Rate : 10.00 Mbps
Traffic : 187.27 KB↑
74.17 KB↓
RNodeInterface[RNode UHF]
Status : Up
Mode : Access Point
Rate : 1.30 kbps
Access : 64-bit IFAC by <…e702c42ba8>
Traffic : 8.49 KB↑
9.23 KB↓
Reticulum Transport Instance <5245a8efe1788c6a70e1> running
.. code:: text .. code:: text
usage: rnsd [-h] [--config CONFIG] [-v] [-q] [--version] usage: rnstatus [-h] [--config CONFIG] [--version] [-a] [-v]
Reticulum Network Stack Daemon Reticulum Network Stack Status
optional arguments: optional arguments:
-h, --help show this help message and exit -h, --help show this help message and exit
--config CONFIG path to alternative Reticulum config directory --config CONFIG path to alternative Reticulum config directory
-v, --verbose
-q, --quiet
--version show program's version number and exit --version show program's version number and exit
-a, --all show all interfaces
-v, --verbose
The rnpath Utility The rnpath Utility
@ -117,7 +134,8 @@ destinations on the Reticulum network.
.. code:: text .. code:: text
usage: rnpath.py [-h] [--config CONFIG] [--version] [-v] [destination] usage: rnpath [-h] [--config CONFIG] [--version] [-t] [-d] [-w seconds] [-v]
[destination]
Reticulum Path Discovery Utility Reticulum Path Discovery Utility
@ -128,6 +146,9 @@ destinations on the Reticulum network.
-h, --help show this help message and exit -h, --help show this help message and exit
--config CONFIG path to alternative Reticulum config directory --config CONFIG path to alternative Reticulum config directory
--version show program's version number and exit --version show program's version number and exit
-t, --table show all known paths
-d, --drop remove the path to a destination
-w seconds timeout before giving up
-v, --verbose -v, --verbose

View File

@ -2,9 +2,9 @@
What is Reticulum? What is Reticulum?
****************** ******************
Reticulum is a cryptography-based networking stack for wide-area networks built on readily available hardware, that can operate even with very high latency and extremely low bandwidth. Reticulum is a cryptography-based networking stack for building wide-area networks with readily available hardware, that can continue to operate even with extremely low bandwidth and very high latency.
Reticulum allows you to build very wide-area networks with off-the-shelf tools, and offers end-to-end encryption, autoconfiguring cryptographically backed multi-hop transport, efficient addressing, unforgeable packet acknowledgements and more. Reticulum allows you to build wide-area networks with off-the-shelf tools, and offers end-to-end encryption, autoconfiguring cryptographically backed multi-hop transport, efficient addressing, unforgeable packet acknowledgements and more.
Reticulum is a complete networking stack, and does not need IP or higher layers, although it is easy to utilise IP (with TCP or UDP) as the underlying carrier for Reticulum. It is therefore trivial to tunnel Reticulum over the Internet or private IP networks. Reticulum is built directly on cryptographic principles, allowing resilience and stable functionality in open and trustless networks. Reticulum is a complete networking stack, and does not need IP or higher layers, although it is easy to utilise IP (with TCP or UDP) as the underlying carrier for Reticulum. It is therefore trivial to tunnel Reticulum over the Internet or private IP networks. Reticulum is built directly on cryptographic principles, allowing resilience and stable functionality in open and trustless networks.
@ -13,7 +13,7 @@ No kernel modules or drivers are required. Reticulum runs completely in userland
Current Status Current Status
============== ==============
Reticulum should currently be considered beta software. All core protocol features are implemented and functioning, but additions will probably occur as real-world use is explored. There will be bugs. The API and wire-format can be considered relatively stable at the moment, but could change if warranted. Reticulum should currently be considered beta software. All core protocol features are implemented and functioning, but additions will probably occur as real-world use is explored. There will be bugs. The API and wire-format can be considered stable at the moment, but could change if absolutely warranted.
What does Reticulum Offer? What does Reticulum Offer?
@ -24,9 +24,9 @@ What does Reticulum Offer?
* Complete initiator anonymity, communicate without revealing your identity * Complete initiator anonymity, communicate without revealing your identity
* Asymmetric X25519 encryption and Ed25519 signatures as a basis for all communication * Asymmetric encryption based on X25519, and Ed25519 signatures as a basis for all communication
* Forward Secrecy with ephemereal Elliptic Curve Diffie-Hellman keys on Curve25519 * Forward Secrecy by using ephemereal Elliptic Curve Diffie-Hellman keys on Curve25519
* Reticulum uses the `Fernet <https://github.com/fernet/spec/blob/master/Spec.md>`_ specification for on-the-wire / over-the-air encryption * Reticulum uses the `Fernet <https://github.com/fernet/spec/blob/master/Spec.md>`_ specification for on-the-wire / over-the-air encryption
@ -44,6 +44,12 @@ What does Reticulum Offer?
* An intuitive and developer-friendly API * An intuitive and developer-friendly API
* Efficient link establishment
* Total bandwidth cost of setting up a link is only 3 packets, totalling 237 bytes
* Low cost of keeping links open at only 0.62 bits per second
* Reliable and efficient transfer of arbritrary amounts of data * Reliable and efficient transfer of arbritrary amounts of data
* Reticulum can handle a few bytes of data or files of many gigabytes * Reticulum can handle a few bytes of data or files of many gigabytes
@ -52,11 +58,9 @@ What does Reticulum Offer?
* The API is very easy to use, and provides transfer progress * The API is very easy to use, and provides transfer progress
* Efficient link establishment * Authentication and virtual network segmentation on all supported interface types
* Total bandwidth cost of setting up a link is only 3 packets, totalling 237 bytes * Flexible scalability allowing extremely low-bandwidth networks to co-exist and interoperate with large, high-bandwidth networks
* Low cost of keeping links open at only 0.62 bits per second
Where can Reticulum be Used? Where can Reticulum be Used?
@ -68,9 +72,9 @@ ad-hoc WiFi, free-space optical links and similar systems are all examples
of the types of interfaces Reticulum was designed for. of the types of interfaces Reticulum was designed for.
An open-source LoRa-based interface called `RNode <https://unsigned.io/rnode>`_ An open-source LoRa-based interface called `RNode <https://unsigned.io/rnode>`_
has been designed specifically for use with Reticulum. It is possible to build has been designed as an example transceiver that is very suitable for
yourself, or it can be purchased as a complete transceiver that just needs a Reticulum. It is possible to build it yourself, to transform a common LoRa
USB connection to the host. development board into one, or it can be purchased as a complete transceiver.
Reticulum can also be encapsulated over existing IP networks, so there's Reticulum can also be encapsulated over existing IP networks, so there's
nothing stopping you from using it over wired ethernet or your local WiFi nothing stopping you from using it over wired ethernet or your local WiFi
@ -80,22 +84,40 @@ self-configuring, resilient and encrypted mesh.
As an example, it's possible to set up a Raspberry Pi connected to both a As an example, it's possible to set up a Raspberry Pi connected to both a
LoRa radio, a packet radio TNC and a WiFi network. Once the interfaces are LoRa radio, a packet radio TNC and a WiFi network. Once the interfaces are
configured, Reticulum will take care of the rest, and any device on the WiFi added, Reticulum will take care of the rest, and any device on the WiFi
network can communicate with nodes on the LoRa and packet radio sides of the network can communicate with nodes on the LoRa and packet radio sides of the
network, and vice versa. network, and vice versa.
Interface Types and Devices Interface Types and Devices
=========================== ===========================
Reticulum implements a range of generalised interface types that covers most of the communications hardware that Reticulum can run over. If your hardware is not supported, it's relatively simple to implement an interface class. Currently, the following interfaces are supported: Reticulum implements a range of generalised interface types that covers the communications hardware that Reticulum can run over. If your hardware is not supported, it's relatively simple to implement an interface class. Currently, Reticulum can use the following devices and communication mediums:
* Any ethernet device * Any ethernet device
* WiFi devices
* Wired ethernet devices
* Fibre-optic transceivers
* Data radios with ethernet ports
* LoRa using `RNode <https://unsigned.io/rnode>`_ * LoRa using `RNode <https://unsigned.io/rnode>`_
* Can be installed on `many popular LoRa boards <https://github.com/markqvist/rnodeconfigutil#supported-devices>`_
* Can be purchased as a `ready to use transceiver <https://unsigned.io/rnode>`_
* Packet Radio TNCs, such as `OpenModem <https://unsigned.io/openmodem>`_ * Packet Radio TNCs, such as `OpenModem <https://unsigned.io/openmodem>`_
* Any packet radio TNC in KISS mode
* Ideal for VHF and UHF radio
* Any device with a serial port * Any device with a serial port
* The I2P network
* TCP over IP networks * TCP over IP networks
* UDP over IP networks * UDP over IP networks