Tue Mar 24 00:43:20 2026 UTC
Ladies and gentlemen,
I'm pleased to announce the source tarball for the version 0.0.50; the tarball is available in the downloads section.
Long things short, this time the fedaserv daemon instances
just became capable of exchanging node keys, checking them and storing the
results.
The problem I had to solve is that taking a yespower hash is a resource-consuming thing; low-end VPS machines are barely capable to perform it and it is too much stress for them, and older 32-bit computers can not do it at all. Besides that, even for a more or less powerful hardware this hash taking is obviously risky in respect of DoS attacks. So, first, it should be possible to delegate the tasks involving hash computation to a physical computer other than the one running the node, and, second, in case we're asked by a stranger from the Internet to verify a previously-unknown node's hash, we should let the stranger demonstrate some proof-of-work... well, technically in the present version it means we let the stranger take four hashes of things we supply, and only then we agree to take one hash of a thing the stranger supplies.
Three new peer types are implemented; from the
doc/peer_types.txt:
****** TYPE: trustncc Trusted node certificate center. Basically, we trust this peer (its node+point's key) in the sense of accepting foreign nodes' keys _without_ _computing_ _their_ _hashes_; furthermore, in case an unknown node tries to connect us, we can ask all (or some of) known&active trustncc peers whether they know the node, and they might send us the node's master cert (signed by them) so we can accept that node without computing the hash. For a point, it may be useful (although not necessary) to declare the point's own node as trustncc, specially if the point has good conectivity conditions and plans to establish direct connections with others. Besides, it may be useful for a node to declare some friendly peers as trustncc, just to save time and the CPU power. It is not strictly necessary to get their permission to do so; presently all fedanet instances respond to the respective type of requests properly. However, it might be a good idea to ask if they really don't mind. ****** TYPE: certhub This peer (which possibly belongs to another node, although this is not necessary) works as a ``hub'' for distributing node certs. This means it generally accepts introductions from new nodes, checks their hashes, saves checked keys in its local database and responds on requests for the stored certs. Technically, specifying this flag means our daemon will suggest newcomers with unknown node IDs to introduce themselves to this peer; hence, peers of this type must be specified as ip:port. You might want to always use the ``trustncc'' flag for peers of this type. At that peer, the fedaserv daemon must be configured accordinly, which means it must have the lines 'allow_nodehash yes' and 'intro_accept yes' in its configuration file, AND the properly generated challenge-response table file. ****** TYPE: introducer This peer, typically a more powerful machine working within the same node (e.g., a home machine of the node master), agrees to act as an introducer, which means that we can ask it to introduce our node to the given instance of fedaserv, so that we don't have to do this on our own. Besides, this peer checks foreign node certs forwarded by its siblings (that is, points of the same node), primarily the node itself. This is intended primarily for nodes that run on low-end machines, so that they can delegate introducing work to something powerful. This peer type may (and should, although is not obliged to) be specified by the node.point pair, not by the ip:port, so that the introcuder machine may run behind a NAT of any type, and once it establishes the cryptographic association with the node, the node becomes able to use its service. You might want to use the ``trustncc'' flag for peers of this type. If this flag is not specified, an introducer peer is still able to introduce its node to others, but its cert-checking job is fruitless. Please note the introducer peer MUST run as a point of the same node, otherwise it won't accept our requests.
The intended use for them is something like the following. Nodes are still run mostly on VPS machines. To change this, another major piece of the functionality must be implemented, namely network-wide broadcast messages; those messages will carry announces of the nodes sitting on temporary ports; well, we don't have the thing yet. So let's stick to VPS machines as of now, assuming they are not capable of computing the hashes. Every nodemaster perhaps has a more or less powerful computer at home, for which it's not a problem to take a hash or two, but the problem is that such computers are typically not accessible from the Internet.
So, to run your own introducer/certhub, you just configure a dedicated
fedaserv instance on such a machine (it is strongly
recommended to use a dedicated pseudo-user for this purpose); let this
instance be visible for the Internet using the fedaproxy feature on your
node instance; and configure it to be the introducer peer for
your node, basing on the node.point pair. Be sure to enable the
functions in your serv.conf; see the options
allow_nodehash, intro_issue and
intro_accept, a self-documented example of the file is
doc/serv.conf.
To give you a real-world example, I run my main node at
45.13.38.102:5080, that's the
c508097bd6c347a4a317.254 instance; the same daemon provides a
proxy port for one of the points, namely
c508097bd6c347a4a317.206 (206 is 0xCE in
hexadecimal), and the proxy port number is 52871 (0xCE87).
The point itself runs at my home machine behind NATs. Here's the
respective point configuration on the node instance:
peer c508_ce type proxyuser trustncc introducer node_id c508097bd6c347a4a317 point 206 proxyport 52871
The point itself has the following in its serv.conf:
peer brizo type mynode proxy ip 45.13.38.102 port 5080 # [ . . . ] allow_nodehash yes intro_issue yes intro_accept yes
Everyone's welcome (well, let's say "as of now") to use it as their
certhub/trustncc; to do so, add the following to your
serv.conf:
peer c508_ce type persist trustncc certhub ip 45.13.38.102 port 52871 node_id c508097bd6c347a4a317 point 206
Your daemon will then, first, ask this instance about unknown nodes whether the instance knows them, and will trust node certs signed by this point, without actually computing the hashes; second, your daemon will recommend strangers from the Internet to introduce their nodes to this instance.
However, I hope this certhub will not remain alone for long; please run your own certhubs and share their ip:port locations and node.point IDs.
The daemon's control console (that fedactl thing) now allows
to order your daemon to introduce your node to a hub at the given ip:port.
See the intro command.
Unfortunately, we are still unable to grow the network without human intervention; broadcast message distribution is needed for that. However, we don't have to manually exchange node cert files any longer, and any new network member can connect to existing nodes without asking their masters to do anything; once ready, such a new member can announce the new node (e.g. here on the site, in comments), so we add his/her node as a peer.
Doing this way, we can build a kind of a backbone, which we will need to distribute the broadcast messages (including node location announces). I think 10-12 nodes connected each with all others, running 5-6 publicly available certhubs, will be sufficient for the network to start functioning once I manage to implement node announce distribution.
Thanks to everyone who follows the project and specially to those who supported it with donations!
From Mihas (unverified) Sun Apr 5 14:19:47 2026 UTC
Add node to backbone
Hi, I managed to launch my node with rank 23. Add to backbone please:
peer mihas
type persist
ip 185.174.172.171
port 65242
node_id aeaff9d413d984527a88
point 254
Also running my certhub on address
peer mihas_certs
type persist trustncc certhub
ip 185.174.172.171
port 2222
node_id aeaff9d413d984527a88
point 1
reply
From Andrey Stolyarov
Sun Apr 5 16:01:24 2026 UTC
in reply to
this comment
Re: Add node to backbone
> port 2222
As far as I can tell, the port is actually 22222; on 2222, no response is received. Anyway, please lower the minimal rank configured there; see this comment for more info on this.
I didn't check your node yet, but I suspect it also has too high minimal rank. Presently there are several nodes with the rank 20 within the backbone, and perhaps we should accept lower-ranked nodes as well, may be not to be listed for the backbone, but at least to connect to the backbone as guests. I'd say minimal rank set to 19 or even 18 is reasonable. We can return to this question later and raise the limits to, like, 21, 22 or even 23 — when the project becomes more popular and, on the other hand, all experienced node masters manage to gain higher-ranked keys.
Anyway, actually it's your decision what to set right now as the limit for your node, I'm only asking to lower the limit at your certhub.
reply
From Mihas (unverified) Sun Apr 5 19:18:55 2026 UTC in reply to this comment
Re: Re: Add node to backbone
Yeah, port is 22222, also fixed this port in Node config. Lowered rank from 20 to 18 both on Node and cerhub.
reply
From Andrey Stolyarov
Sun Apr 5 20:04:41 2026 UTC
in reply to
this comment
Re: Re: Re: Add node to backbone
From one of my daemons' log:
This may be because your daemon doesn't have a challenge-response table needed for accepting introductions to work. Not the only possible problem but the most obvious.
P.S. meanwhile, I added your node to the backbone list, as the node itself seems to work great.
reply
From Mihas (unverified) Sun Apr 5 20:38:05 2026 UTC in reply to this comment
Re: Re: Re: Re: Add node to backbone
Yes, that was the problem, I was moving things around and forgot to change path to challenge-response table. Could you please try again, it should work now.
reply
From Andrey Stolyarov
Sun Apr 5 21:05:25 2026 UTC
in reply to
this comment
Re: Add node to backbone
Yeah, it works. Congratulations :-) I've added this certhub to the list.
reply
From feriman
Sat Mar 28 22:57:19 2026 UTC
New certhub/introducer
I have turn my point as certhub and introducer using fedaproxy. Please, add it to the list when it works as expected.
reply
From Andrey Stolyarov
Sun Mar 29 10:17:20 2026 UTC
in reply to
this comment
Re: New certhub/introducer
Thank you, it seems to work. List updated.
reply
From kitkat (unverified) Wed Mar 25 10:22:44 2026 UTC
Attempt to run a backbone node
Hello, I've set up a backbone node, rank 23. Running at 89.207.254.147:5080, node_id 863953a6d2244846d272. Also running a certhub/introducer point at the same address, port 52871. Would appreciate being added to the backbone list. The node's cert has been introduced to c508_ce.
reply
From Andrey Stolyarov
Wed Mar 25 12:19:37 2026 UTC
in reply to
this comment
Welcome aboard :-)
I'll add your node to the list right now. As of your certhub, may I ask you to lower the minimal prefix length for it? It may be lowered for that single point (fedaserv instance) alone, so that it accepts node certs of lower ranks. The parameter is in the file
$HOME/.fedanet/keys/feda.conf, namedminpref. By default it has the same value as your node rank, but this default is not very useful.I believe the value of
18is high enough to prevent anyone from performing DoS attack, but at the same time is low enough to let people like me have a sufficient supply of node keys for testing purposes. BTW, one of my two nodes (thatcroconet2one) has the rank20:-)reply
From kitkat (unverified) Wed Mar 25 12:39:54 2026 UTC in reply to this comment
Re: Welcome aboard :-)
Done, minpref lowered to 18 on the certhub instance. The challenge-response table is currently being generated (~10% filled), should be ready within a day. Thank you for adding!
reply
From Andrey Stolyarov
Wed Mar 25 13:01:39 2026 UTC
in reply to
this comment
Re: Re: Welcome aboard :-)
It is not really necessary to generate the table of the default size: that size is more or less optimal when the table is generated during the node key mining (with feda-ng).
If I get it right and you use the feda-ct fill option to get the table here and now, it is a real pain to generate a table that large. You can use watever power of 2 you want, so it fills quicker. Hardly on this stage anyone will try to make DoS with introductions, and it's the only risk of short CR tables.
Anyway, be sure to check the CR table for being full (100%) before starting to use it, and please report here when your certhub is ready.
reply
From kitkat (unverified) Wed Mar 25 15:28:13 2026 UTC in reply to this comment
Re: Re: Re: Welcome aboard :-)
The certhub is now ready. CR table filled (65536 entries, 100%). Available at 89.207.254.147:5081, node 863953a6d2244846d272 point 1.
reply
From Andrey Stolyarov
Wed Mar 25 16:43:50 2026 UTC
in reply to
this comment
Re: Welcome aboard :-)
Thank you, your certhub seems to work. I added it at the backbone info page.
reply
From feriman
Fri Mar 27 17:50:49 2026 UTC
in reply to
this comment
Re: Attempt to run a backbone node
I have these messages in the log (rank is 20):
sending introduction (certificates) to 89.207.254.147:5080 [node_8639] (~:863953a6d2244846d272.254)peer 89.207.254.147:5080 says (as plain) we caused error (09, your rank is too low)reply
From Andrey Stolyarov
Sat Mar 28 00:43:18 2026 UTC
in reply to
this comment
Re: Attempt to run a backbone node
Perhaps the 863953_ node's owner lowered the minimal acceptable rank on his certhub but not on the node itself. Well, it's his right, after all. Let's wait for him to visit this page again :-)
reply
From kitkat (unverified) Mon Mar 30 17:44:43 2026 UTC in reply to this comment
Re: Attempt to run a backbone node
Sorry about that. I had lowered minpref on the certhub but forgot to do the same the node itself. Fixed now -- minpref is set to 18 on both. Please try again.
reply