fedanet 0.0.50: let's begin building the backbone

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!


anonymous

From Mihas (unverified) Sun Apr 5 14:19:47 2026 UTC

pencil

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

admin.jpg's userpic

From Andrey Stolyarov profile Sun Apr 5 16:01:24 2026 UTC in reply to this comment

pencil

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.

anonymous

From Mihas (unverified) Sun Apr 5 19:18:55 2026 UTC in reply to this comment

pencil

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.

admin.jpg's userpic

From Andrey Stolyarov profile Sun Apr 5 20:04:41 2026 UTC in reply to this comment

pencil

Re: Re: Re: Add node to backbone

From one of my daemons' log:

Apr 05 19:59:14 [20285] sending nodeintro to 185.174.172.171:22222
Apr 05 19:59:18 [20285] peer 185.174.172.171:22222 says (as plain/plus) our cmd 1B caused error (10, internal error)

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.

anonymous

From Mihas (unverified) Sun Apr 5 20:38:05 2026 UTC in reply to this comment

pencil

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.

admin.jpg's userpic

From Andrey Stolyarov profile Sun Apr 5 21:05:25 2026 UTC in reply to this comment

pencil

Re: Add node to backbone

Yeah, it works. Congratulations :-) I've added this certhub to the list.

no userpic

From feriman profile Sat Mar 28 22:57:19 2026 UTC

pencil

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.

peer f226_ce
type persist trustncc certhub
ip 107.174.224.199
port 61990
node_id f226cb6a4412d7faa2c1
point 1
admin.jpg's userpic

From Andrey Stolyarov profile Sun Mar 29 10:17:20 2026 UTC in reply to this comment

pencil

Re: New certhub/introducer

Thank you, it seems to work. List updated.

anonymous

From kitkat (unverified) Wed Mar 25 10:22:44 2026 UTC

pencil

Attempt to run a backbone node

peer node_8639
type persist
ip 89.207.254.147
port 5080
node_id 863953a6d2244846d272

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.

admin.jpg's userpic

From Andrey Stolyarov profile Wed Mar 25 12:19:37 2026 UTC in reply to this comment

pencil

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, named minpref. By default it has the same value as your node rank, but this default is not very useful.

I believe the value of 18 is 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 (that croconet2 one) has the rank 20 :-)

anonymous

From kitkat (unverified) Wed Mar 25 12:39:54 2026 UTC in reply to this comment

pencil

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!

admin.jpg's userpic

From Andrey Stolyarov profile Wed Mar 25 13:01:39 2026 UTC in reply to this comment

pencil

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.

anonymous

From kitkat (unverified) Wed Mar 25 15:28:13 2026 UTC in reply to this comment

pencil

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.

admin.jpg's userpic

From Andrey Stolyarov profile Wed Mar 25 16:43:50 2026 UTC in reply to this comment

pencil

Re: Welcome aboard :-)

Thank you, your certhub seems to work. I added it at the backbone info page.

no userpic

From feriman profile Fri Mar 27 17:50:49 2026 UTC in reply to this comment

pencil

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)

admin.jpg's userpic

From Andrey Stolyarov profile Sat Mar 28 00:43:18 2026 UTC in reply to this comment

pencil

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 :-)

anonymous

From kitkat (unverified) Mon Mar 30 17:44:43 2026 UTC in reply to this comment

pencil

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.