On 2024-11-24, yeti <
yeti@tilde.institute> wrote:
So if/when I'll drop Tor because of my Rust-allergy, I probably have an alternative for my SSH backdoors via I2P. The rest is just optional
candy atop that, but really smells like including a lot of bonus fun.
\o/
What do you think about the yggdrasil-network project?, and would you
maybe use it?, every host has it's own public key, and doing a few simple operations (and chopping a few bytes off of the pubkey[1]), you can get a
IPv6 address inside the 200::/7 range[5], and on Linux[6] you get a tun
device and IPv6 routes added.
For this backdoor thingy, you'd be using the network's (so other
people's) traffic, most likely, but yggdrasil also supports multicast
peerings.
If you're running yggdrasil-go, you'd have to configure a firewall to
forbid other users from connecting to your node, and set a list of
whitelisted IP addresses if you want to go that route, or maybe you just
want to limit it to only being able to connect to port 22/tcp.
You'd also have to setup some peers, for this to work, as yggdrasil by
itself won't find peers, and you have to add them, or use something like peers_updater[8] to automatically update your yggdrasil peers via the
admin API (unix domain sockets or tcp)
Do keep in mind that if you add multiple peers, there's a chance[9] the best route will be trough your host, and that if you only add one peer, you're relying on that peer being up.
And also that this, differently from tor, isn't an anonymity network, so
you're able to be identified, in a not too hard way.
Their homepage:
https://yggdrasil-network.github.io/
The source code for their single binary program:v
https://github.com/yggdrasil-network/yggdrasil-go
References:
[1] I believe it truncates 16 bytes?
PublicKeySize = 32[2] whilst Address is represented as 16 bytes[3], and
32-16=16.
Yes, this has the practical side effect you can't get the pubkey of a
node based on the IP address if you're unable to access the network, and
someone could get a ed25519 key that happens to collide with your
address, but I'm unsure on how likely that is.[4]
[2]
https://pkg.go.dev/crypto/ed25519#PublicKeySize
[3]
https://github.com/yggdrasil-network/yggdrasil-go/blob/8c454a146cb70aa07ee2c87af964f5c1394da299/src/address/address.go#L10
[4] Also, if you want to, I think there's some way to directly have
yggdrasil work without the IP stack part, but I'm not sure how that
can be done.
[5] 200::/7 is marked as reserved by IETF, so it might be used for something
else later?
https://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xhtml
https://iana.org/go/rfc4048 301 to
https://www.rfc-editor.org/rfc/rfc4048.html
[6] On NetBSD I've been told the go tunnel support is missing IIRC, and
I'm not sure it works on OpenBSD or other POSIX compliant systems,
but you can use yggstack[7] if you still wish to do so, but you'd
lose the receiving the IP that connected for the -remote-(tcp|udp)
options, and for part of what this message talks about you might have to
patch the code to limit who can connect.
[7]
https://github.com/yggdrasil-network/yggstack
[8]
https://github.com/ygguser/peers_updater
[9] I've been told this chance problem is slim and is trying to be
removed by updating how the DHT works.
P.S. Maybe this entire message is not valid as you also have a
Go-allergy?
--
~jmjl
--- Synchronet 3.19b-Linux NewsLink 1.113