mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-06-01 08:44:02 +02:00
Merge bitcoin/bitcoin#23077: Full CJDNS support
420695c193contrib: recognize CJDNS seeds as such (Vasil Dimov)f9c28330a0net: take the first 4 random bits from CJDNS addresses in GetGroup() (Vasil Dimov)29ff79c0a2net: relay CJDNS addresses even if we are not connected to CJDNS (Vasil Dimov)d96f8d304cnet: don't skip CJDNS from GetNetworkNames() (Vasil Dimov)c2d751abbanet: take CJDNS into account in CNetAddr::GetReachabilityFrom() (Vasil Dimov)9b43b3b257test: extend feature_proxy.py to test CJDNS (Vasil Dimov)508eb258fdtest: remove default argument of feature_proxy.py:node_test() (Vasil Dimov)6387f397b3net: recognize CJDNS addresses as such (Vasil Dimov)e6890fcb44net: don't skip CJDNS from GetNetworksInfo() (Vasil Dimov)e9d90d3c11net: introduce a new config option to enable CJDNS (Vasil Dimov)78f456c576net: recognize CJDNS from ParseNetwork() (Vasil Dimov)de01e312b3net: use -proxy for connecting to the CJDNS network (Vasil Dimov)aedd02ef27net: make it possible to connect to CJDNS addresses (Vasil Dimov) Pull request description: CJDNS overview ===== CJDNS is like a distributed, shared VPN with multiple entry points where every participant can reach any other participant. All participants use addresses from the `fc00::/8` network (reserved IPv6 range). Installation and configuration is done outside of applications, similarly to VPN (either in the host/OS or on the network router). Motivation ===== Even without this PR it is possible to connect two Bitcoin Core nodes through CJDNS manually by using e.g. `-addnode` in environments where CJDNS is set up. However, this PR is necessary for address relay to work properly and automatic connections to be made to CJDNS peers. I.e. to make CJDNS a first class citizen network like IPv4, IPv6, Tor and I2P. Considerations ===== An address from the `fc00::/8` network, could mean two things: 1. Part of a local network, as defined in RFC 4193. Like `10.0.0.0/8`. Bitcoin Core could be running on a machine with such address and have peers with those (e.g. in a local network), but those addresses are not relayed to other peers because they are not globally routable on the internet. 2. Part of the CJDNS network. This is like Tor or I2P - if we have connectivity to that network then we could reach such peers and we do relay them to other peers. So, Bitcoin Core needs to be able to tell which one is it when it encounters a bare `fc00::/8` address, e.g. from `-externalip=` or by looking up the machine's own addresses. Thus a new config option is introduced `-cjdnsreacable`: * `-cjdnsreacable=0`: it is assumed a `fc00::/8` address is a private IPv6 (1.) * `-cjdnsreacable=1`: it is assumed a `fc00::/8` address is a CJDNS one (2.) After setting up CJDNS outside of Bitcoin Core, a node operator only needs to enable this option. Addresses from P2P relay/gossip don't need that because they are properly tagged as IPv6 or as CJDNS. For testing ===== ``` [fc32:17ea:e415:c3bf:9808:149d:b5a2:c9aa]:8333 [fc68:7026:cb27:b014:5910:e609:dcdb:22a2]:8333 [fcb3:dc50:e1ae:7998:7dc0:7fa6:4582:8e46]:8333 [fcc7:be49:ccd1:dc91:3125:f0da:457d:8ce]:8333 [fcf2:d9e:3a25:4eef:8f84:251b:1b4d:c596]:8333 ``` ACKs for top commit: dunxen: ACK420695cjonatack: re-ACK420695c193per `git range-diff23ae7934fbff39 420695c` laanwj: Code review ACK420695c193Tree-SHA512: 21559886271aa84671d52b120fa3fa5a50fdcf0fcb26e5b32049c56fab0d606438d19dd366a9c8ce612d3894237ae6d552ead3338b326487e3534399b88a317a
This commit is contained in:
@@ -339,11 +339,13 @@ BOOST_AUTO_TEST_CASE(netbase_parsenetwork)
|
||||
BOOST_CHECK_EQUAL(ParseNetwork("ipv6"), NET_IPV6);
|
||||
BOOST_CHECK_EQUAL(ParseNetwork("onion"), NET_ONION);
|
||||
BOOST_CHECK_EQUAL(ParseNetwork("tor"), NET_ONION);
|
||||
BOOST_CHECK_EQUAL(ParseNetwork("cjdns"), NET_CJDNS);
|
||||
|
||||
BOOST_CHECK_EQUAL(ParseNetwork("IPv4"), NET_IPV4);
|
||||
BOOST_CHECK_EQUAL(ParseNetwork("IPv6"), NET_IPV6);
|
||||
BOOST_CHECK_EQUAL(ParseNetwork("ONION"), NET_ONION);
|
||||
BOOST_CHECK_EQUAL(ParseNetwork("TOR"), NET_ONION);
|
||||
BOOST_CHECK_EQUAL(ParseNetwork("CJDNS"), NET_CJDNS);
|
||||
|
||||
BOOST_CHECK_EQUAL(ParseNetwork(":)"), NET_UNROUTABLE);
|
||||
BOOST_CHECK_EQUAL(ParseNetwork("tÖr"), NET_UNROUTABLE);
|
||||
|
||||
Reference in New Issue
Block a user