First draft of internet bridge section

Open to any and all criticism here, writing documentation isn't my strong suit. But here is a decent start at explaining the differences between the transports. Also I believe there should be a way to "compile" this markdown to html, not exactly sure how to accomplish that, will try to look into this further in the weekend.
This commit is contained in:
4c3e 2022-04-01 23:15:24 -04:00 committed by GitHub
parent a4a9a1dd53
commit 02f9c32da7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -71,6 +71,61 @@ you want more information, you can read the :ref:`Building Networks<networks-mai
and :ref:`Interfaces<interfaces-main>` chapters of this manual.
Bridging Over the Internet
=============================================
Reticulum currently offers two interfaces for connecting nodes over the internet:
`TCP <https://markqvist.github.io/Reticulum/manual/interfaces.html#tcp-server-interface>`_ and `I2P <https://markqvist.github.io/Reticulum/manual/interfaces.html#i2p-interface>`_. Each interface offers a different set of features, and Reticulum
users should carefully choose the interface which best suites their needs.
The ``TCPServerInterface`` allows users to host a node accessible over TCP/IP. This
method is generally faster, lower latency, and more energy efficient than using ``I2PInterface``, however it leaks considerable
metadata about the server host.
Direct TCP client connections are able to see your node's IP address and may be able
to use this information to determine your location or identity. Adversaries
inspecting your network's internet packets may be able to record packet metadata
like time of transmission and packet size. By default TCP does not encrypt traffic,
so unencrypted Reticulum packets will be transmitted in clear text. Hosting a
node via TCP server also requires a static IP address.
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
parallel to ``rnsd``. For always-on nodes it is recommended to use `i2pd <https://i2pd.website/>`_ because it
generally runs more efficiently.
By default, I2P will fully encrypt all traffic sent over the network, and
obfuscate both the sender's and receiver's IP addresses. Running an I2P node
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
deep-packet-inspection much more difficult. Similar to RNS, I2P uses cryptographic
public keys as destination addresses, which allows users to host nodes on non-static IPs.
In general it is recommended to use an I2P node if you are hosting your node
publicly.
There is a experimental public testnet you can join by adding the following
interfaces to your ``.reticulum/config`` file:
.. code::
# For connecting over TCP/IP:
[[RNS Testnet Frankfurt]]
type = TCPClientInterface
interface_enabled = yes
outgoing = True
target_host = frankfurt.rns.unsigned.io
target_port = 4965
# For connecting over I2P:
[[RNS Testnet I2P Node A]]
type = I2PInterface
interface_enabled = yes
peers = ykzlw5ujbaqc2xkec4cpvgyxj257wcrmmgkuxqmqcur7cq3w3lha.b32.i2p
Develop a Program with Reticulum
===========================================
If you want to develop programs that use Reticulum, the easiest way to get