dash/doc/i2p.md
UdjinM6 1b8d9ecc6b
docs: update tor and i2p docs (#5673)
## Issue being fixed or feature implemented
Fix Dash Core version in i2p.md and update list of nodes in tor.md (we
do not support v2 tor anymore).

## What was done?
ran a node with `-onlynet=oinion` and picked 8 nodes

## How Has This Been Tested?
n/a

## Breaking Changes
n/a

## Checklist:
- [x] I have performed a self-review of my own code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have added or updated relevant unit/integration/functional/e2e
tests
- [ ] I have made corresponding changes to the documentation
- [x] I have assigned this pull request to a milestone _(for repository
code-owners and collaborators only)_
2023-11-06 09:23:20 -06:00

3.7 KiB

I2P support in Dash Core

It is possible to run Dash Core as an I2P (Invisible Internet Project) service and connect to such services.

This glossary may be useful to get started with I2P terminology.

Run Dash Core with an I2P router (proxy)

A running I2P router (proxy) with SAM enabled is required (there is an official one and a few alternatives). Notice the IP address and port the SAM proxy is listening to; usually, it is 127.0.0.1:7656. Once it is up and running with SAM enabled, use the following Dash Core options:

-i2psam=<ip:port>
     I2P SAM proxy to reach I2P peers and accept I2P connections (default:
     none)

-i2pacceptincoming
     If set and -i2psam is also set then incoming I2P connections are
     accepted via the SAM proxy. If this is not set but -i2psam is set
     then only outgoing connections will be made to the I2P network.
     Ignored if -i2psam is not set. Listening for incoming I2P
     connections is done through the SAM proxy, not by binding to a
     local address and port (default: 1)

In a typical situation, this suffices:

dashd -i2psam=127.0.0.1:7656

The first time Dash Core connects to the I2P router, its I2P address (and corresponding private key) will be automatically generated and saved in a file named i2p_private_key in the Dash Core data directory.

You may set the debug=i2p config logging option to have additional information in the debug log about your I2P configuration and connections. Run dash-cli help logging for more information.

It is possible to restrict outgoing connections in the usual way with onlynet=i2p. I2P support was added to Dash Core in version 20.0 (fall 2023) and there may be fewer I2P peers than Tor or IP ones. Therefore, using onlynet=i2p alone (without other onlynet=) may make a node more susceptible to Sybil attacks. Use dash-cli -addrinfo to see the number of I2P addresses known to your node.

There are several ways to see your I2P address in Dash Core:

  • in the debug log (grep for AddLocal, the I2P address ends in .b32.i2p)
  • in the output of the getnetworkinfo RPC in the "localaddresses" section
  • in the output of dash-cli -netinfo peer connections dashboard

To see which I2P peers your node is connected to, use dash-cli -netinfo 4 or the getpeerinfo RPC (e.g. dash-cli getpeerinfo).

To see which I2P addresses your node knows, use the getnodeaddresses 0 i2p RPC.

Compatibility

Dash Core uses the SAM v3.1 protocol to connect to the I2P network. Any I2P router that supports it can be used.

Ports in I2P and Dash Core

Dash Core uses the SAM v3.1 protocol. One particularity of SAM v3.1 is that it does not support ports, unlike newer versions of SAM (v3.2 and up) that do support them and default the port numbers to 0. From the point of view of peers that use newer versions of SAM or other protocols that support ports, a SAM v3.1 peer is connecting to them on port 0, from source port 0.

To allow future upgrades to newer versions of SAM, Dash Core sets its listening port to 0 when listening for incoming I2P connections and advertises its own I2P address with port 0. Furthermore, it will not attempt to connect to I2P addresses with a non-zero port number because with SAM v3.1 the destination port (TO_PORT) is always set to 0 and is not in the control of Dash Core.