mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 03:52:49 +01:00
merge bitcoin#22648: improve i2p/tor docs and i2p reachable unit tests
This commit is contained in:
parent
f04ce8bcda
commit
63d58534b6
52
doc/i2p.md
52
doc/i2p.md
@ -10,11 +10,22 @@ started with I2P terminology.
|
|||||||
## Run Dash Core with an I2P router (proxy)
|
## Run Dash Core with an I2P router (proxy)
|
||||||
|
|
||||||
A running I2P router (proxy) with [SAM](https://geti2p.net/en/docs/api/samv3)
|
A running I2P router (proxy) with [SAM](https://geti2p.net/en/docs/api/samv3)
|
||||||
enabled is required (there is an [official one](https://geti2p.net) and
|
enabled is required. Options include:
|
||||||
[a few alternatives](https://en.wikipedia.org/wiki/I2P#Routers)). Notice the IP
|
|
||||||
address and port the SAM proxy is listening to; usually, it is
|
- [i2prouter (I2P Router)](https://geti2p.net), the official implementation in
|
||||||
`127.0.0.1:7656`. Once it is up and running with SAM enabled, use the following
|
Java
|
||||||
Dash Core options:
|
- [i2pd (I2P Daemon)](https://github.com/PurpleI2P/i2pd)
|
||||||
|
([documentation](https://i2pd.readthedocs.io/en/latest)), a lighter
|
||||||
|
alternative in C++ (successfully tested with version 2.23 and up; version 2.36
|
||||||
|
or later recommended)
|
||||||
|
- [i2p-zero](https://github.com/i2p-zero/i2p-zero)
|
||||||
|
- [other alternatives](https://en.wikipedia.org/wiki/I2P#Routers)
|
||||||
|
|
||||||
|
Note the IP address and port the SAM proxy is listening to; usually, it is
|
||||||
|
`127.0.0.1:7656`.
|
||||||
|
|
||||||
|
Once an I2P router with SAM enabled is up and running, use the following Dash
|
||||||
|
Core configuration options:
|
||||||
|
|
||||||
```
|
```
|
||||||
-i2psam=<ip:port>
|
-i2psam=<ip:port>
|
||||||
@ -42,15 +53,30 @@ named `i2p_private_key` in the Dash Core data directory.
|
|||||||
|
|
||||||
## Additional configuration options related to I2P
|
## Additional configuration options related to I2P
|
||||||
|
|
||||||
You may set the `debug=i2p` config logging option to have additional
|
```
|
||||||
information in the debug log about your I2P configuration and connections. Run
|
-debug=i2p
|
||||||
`dash-cli help logging` for more information.
|
```
|
||||||
|
|
||||||
It is possible to restrict outgoing connections in the usual way with
|
Set the `debug=i2p` config logging option to see additional information in the
|
||||||
`onlynet=i2p`. I2P support was added to Dash Core in version 20.0 (fall-2023)
|
debug log about your I2P configuration and connections. Run `dash-cli help
|
||||||
and there may be fewer I2P peers than Tor or IP ones. Therefore, using
|
logging` for more information.
|
||||||
`onlynet=i2p` alone (without other `onlynet=`) may make a node more susceptible
|
|
||||||
to [Sybil attacks](https://en.dash.it/wiki/Weaknesses#Sybil_attack). Use
|
```
|
||||||
|
-onlynet=i2p
|
||||||
|
```
|
||||||
|
|
||||||
|
Make outgoing connections only to I2P addresses. Incoming connections are not
|
||||||
|
affected by this option. It can be specified multiple times to allow multiple
|
||||||
|
network types, e.g. onlynet=ipv4, onlynet=ipv6, onlynet=onion, onlynet=i2p.
|
||||||
|
|
||||||
|
Warning: if you use -onlynet with values other than onion, and the -onion or
|
||||||
|
-proxy option is set, then outgoing onion connections will still be made; use
|
||||||
|
-noonion or -onion=0 to disable outbound onion connections in this case.
|
||||||
|
|
||||||
|
I2P support was added to Dash Core in version 20.0 and there may be fewer I2P
|
||||||
|
peers than Tor or IP ones. Therefore, using I2P alone without other networks may
|
||||||
|
make a node more susceptible to [Sybil
|
||||||
|
attacks](https://en.bitcoin.it/wiki/Weaknesses#Sybil_attack). You can use
|
||||||
`dash-cli -addrinfo` to see the number of I2P addresses known to your node.
|
`dash-cli -addrinfo` to see the number of I2P addresses known to your node.
|
||||||
|
|
||||||
Another consideration with `onlynet=i2p` is that the initial blocks download
|
Another consideration with `onlynet=i2p` is that the initial blocks download
|
||||||
|
10
doc/tor.md
10
doc/tor.md
@ -51,11 +51,11 @@ outgoing connections, but more is possible.
|
|||||||
-onlynet=onion Make outgoing connections only to .onion addresses. Incoming
|
-onlynet=onion Make outgoing connections only to .onion addresses. Incoming
|
||||||
connections are not affected by this option. This option can be
|
connections are not affected by this option. This option can be
|
||||||
specified multiple times to allow multiple network types, e.g.
|
specified multiple times to allow multiple network types, e.g.
|
||||||
ipv4, ipv6 or onion. If you use this option with values other
|
onlynet=ipv4, onlynet=ipv6, onlynet=onion, onlynet=i2p.
|
||||||
than onion you *cannot* disable onion connections; outgoing onion
|
Warning: if you use -onlynet with values other than onion, and
|
||||||
connections will be enabled when you use -proxy or -onion. Use
|
the -onion or -proxy option is set, then outgoing onion
|
||||||
-noonion or -onion=0 if you want to be sure there are no outbound
|
connections will still be made; use -noonion or -onion=0 to
|
||||||
onion connections over the default proxy or your defined -proxy.
|
disable outbound onion connections in this case.
|
||||||
|
|
||||||
An example how to start the client if the Tor proxy is running on local host on
|
An example how to start the client if the Tor proxy is running on local host on
|
||||||
port 9050 and only allows .onion nodes to connect:
|
port 9050 and only allows .onion nodes to connect:
|
||||||
|
@ -761,37 +761,42 @@ BOOST_AUTO_TEST_CASE(ipv4_peer_with_ipv6_addrMe_test)
|
|||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(LimitedAndReachable_Network)
|
BOOST_AUTO_TEST_CASE(LimitedAndReachable_Network)
|
||||||
{
|
{
|
||||||
BOOST_CHECK_EQUAL(IsReachable(NET_IPV4), true);
|
BOOST_CHECK(IsReachable(NET_IPV4));
|
||||||
BOOST_CHECK_EQUAL(IsReachable(NET_IPV6), true);
|
BOOST_CHECK(IsReachable(NET_IPV6));
|
||||||
BOOST_CHECK_EQUAL(IsReachable(NET_ONION), true);
|
BOOST_CHECK(IsReachable(NET_ONION));
|
||||||
|
BOOST_CHECK(IsReachable(NET_I2P));
|
||||||
|
|
||||||
SetReachable(NET_IPV4, false);
|
SetReachable(NET_IPV4, false);
|
||||||
SetReachable(NET_IPV6, false);
|
SetReachable(NET_IPV6, false);
|
||||||
SetReachable(NET_ONION, false);
|
SetReachable(NET_ONION, false);
|
||||||
|
SetReachable(NET_I2P, false);
|
||||||
|
|
||||||
BOOST_CHECK_EQUAL(IsReachable(NET_IPV4), false);
|
BOOST_CHECK(!IsReachable(NET_IPV4));
|
||||||
BOOST_CHECK_EQUAL(IsReachable(NET_IPV6), false);
|
BOOST_CHECK(!IsReachable(NET_IPV6));
|
||||||
BOOST_CHECK_EQUAL(IsReachable(NET_ONION), false);
|
BOOST_CHECK(!IsReachable(NET_ONION));
|
||||||
|
BOOST_CHECK(!IsReachable(NET_I2P));
|
||||||
|
|
||||||
SetReachable(NET_IPV4, true);
|
SetReachable(NET_IPV4, true);
|
||||||
SetReachable(NET_IPV6, true);
|
SetReachable(NET_IPV6, true);
|
||||||
SetReachable(NET_ONION, true);
|
SetReachable(NET_ONION, true);
|
||||||
|
SetReachable(NET_I2P, true);
|
||||||
|
|
||||||
BOOST_CHECK_EQUAL(IsReachable(NET_IPV4), true);
|
BOOST_CHECK(IsReachable(NET_IPV4));
|
||||||
BOOST_CHECK_EQUAL(IsReachable(NET_IPV6), true);
|
BOOST_CHECK(IsReachable(NET_IPV6));
|
||||||
BOOST_CHECK_EQUAL(IsReachable(NET_ONION), true);
|
BOOST_CHECK(IsReachable(NET_ONION));
|
||||||
|
BOOST_CHECK(IsReachable(NET_I2P));
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(LimitedAndReachable_NetworkCaseUnroutableAndInternal)
|
BOOST_AUTO_TEST_CASE(LimitedAndReachable_NetworkCaseUnroutableAndInternal)
|
||||||
{
|
{
|
||||||
BOOST_CHECK_EQUAL(IsReachable(NET_UNROUTABLE), true);
|
BOOST_CHECK(IsReachable(NET_UNROUTABLE));
|
||||||
BOOST_CHECK_EQUAL(IsReachable(NET_INTERNAL), true);
|
BOOST_CHECK(IsReachable(NET_INTERNAL));
|
||||||
|
|
||||||
SetReachable(NET_UNROUTABLE, false);
|
SetReachable(NET_UNROUTABLE, false);
|
||||||
SetReachable(NET_INTERNAL, false);
|
SetReachable(NET_INTERNAL, false);
|
||||||
|
|
||||||
BOOST_CHECK_EQUAL(IsReachable(NET_UNROUTABLE), true); // Ignored for both networks
|
BOOST_CHECK(IsReachable(NET_UNROUTABLE)); // Ignored for both networks
|
||||||
BOOST_CHECK_EQUAL(IsReachable(NET_INTERNAL), true);
|
BOOST_CHECK(IsReachable(NET_INTERNAL));
|
||||||
}
|
}
|
||||||
|
|
||||||
CNetAddr UtilBuildAddress(unsigned char p1, unsigned char p2, unsigned char p3, unsigned char p4)
|
CNetAddr UtilBuildAddress(unsigned char p1, unsigned char p2, unsigned char p3, unsigned char p4)
|
||||||
@ -810,10 +815,10 @@ BOOST_AUTO_TEST_CASE(LimitedAndReachable_CNetAddr)
|
|||||||
CNetAddr addr = UtilBuildAddress(0x001, 0x001, 0x001, 0x001); // 1.1.1.1
|
CNetAddr addr = UtilBuildAddress(0x001, 0x001, 0x001, 0x001); // 1.1.1.1
|
||||||
|
|
||||||
SetReachable(NET_IPV4, true);
|
SetReachable(NET_IPV4, true);
|
||||||
BOOST_CHECK_EQUAL(IsReachable(addr), true);
|
BOOST_CHECK(IsReachable(addr));
|
||||||
|
|
||||||
SetReachable(NET_IPV4, false);
|
SetReachable(NET_IPV4, false);
|
||||||
BOOST_CHECK_EQUAL(IsReachable(addr), false);
|
BOOST_CHECK(!IsReachable(addr));
|
||||||
|
|
||||||
SetReachable(NET_IPV4, true); // have to reset this, because this is stateful.
|
SetReachable(NET_IPV4, true); // have to reset this, because this is stateful.
|
||||||
}
|
}
|
||||||
@ -825,12 +830,12 @@ BOOST_AUTO_TEST_CASE(LocalAddress_BasicLifecycle)
|
|||||||
|
|
||||||
SetReachable(NET_IPV4, true);
|
SetReachable(NET_IPV4, true);
|
||||||
|
|
||||||
BOOST_CHECK_EQUAL(IsLocal(addr), false);
|
BOOST_CHECK(!IsLocal(addr));
|
||||||
BOOST_CHECK_EQUAL(AddLocal(addr, 1000), true);
|
BOOST_CHECK(AddLocal(addr, 1000));
|
||||||
BOOST_CHECK_EQUAL(IsLocal(addr), true);
|
BOOST_CHECK(IsLocal(addr));
|
||||||
|
|
||||||
RemoveLocal(addr);
|
RemoveLocal(addr);
|
||||||
BOOST_CHECK_EQUAL(IsLocal(addr), false);
|
BOOST_CHECK(!IsLocal(addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
Loading…
Reference in New Issue
Block a user