Skip to content

Releases: yggdrasil-network/yggdrasil-go

Version 0.5.2

06 Nov 09:33
7ac38e3
Compare
Choose a tag to compare

Added

  • New -publickey command line option that prints the derived public key from a configuration file
  • Support for connecting to TLS peers via SOCKS with the new sockstls:// link schema

Changed

  • Stabilise tree parent selection algorithm
  • Improved logging when the TUN interface fails to set up

Fixed

  • Fixed a panic that could occur when a connection reaches an inconsistent error state
  • The admin socket will now report more peering handshake error conditions in getPeers
  • Yggdrasil will no longer panic at startup when duplicate peers are configured
  • The build script will no longer incorrectly import LDFLAGS from the environment

Version 0.5.1

28 Oct 15:36
a6b316e
Compare
Choose a tag to compare

Fixed

  • Fix the Debian package so that upgrades are handled more smoothly

Version 0.5.0

28 Oct 14:55
d781fef
Compare
Choose a tag to compare

NOTE: If you are using the Debian package and upgrading an existing installation, you may need to update your AdminListen line in your configuration file to unix:///var/run/yggdrasil/yggdrasil.sock or delete the AdminListen line altogether.

Added

  • Authenticated peering handshake with optional password, i.e.
    • For listeners: tls://[::]:12345?password=123456abcdef
    • For peers: tls://a.b.c.d:12345?password=123456abcdef
    • For multicast interfaces with the new Password option in each MulticastInterfaces section
    • Maximum password length is 64 characters
  • QUIC support for peerings, by using the new quic:// scheme in Listen and Peers
    • This has not been extensively tested and may perform worse than TCP or TLS peers
  • The private key can now be stored in PEM format separately to the main configuration file with the new PrivateKeyPath configuration file option
    • Use the -exportkey flag to export the key to a file from an existing config

Changed

  • New routing scheme, which is backwards incompatible with previous versions of Yggdrasil
    • The wire protocol version number, exchanged as part of the peer setup handshake, has been increased to 0.5
    • Nodes running this new version will not be able to peer with earlier versions of Yggdrasil
    • A DHT is no longer used to map public keys and routes through treespace
    • Bloom filters are used to track on-tree links and nodes reachable via that link
    • Nodes now gossip separate per-link information which is tracked in CRDT structures, forcing local consistency and preventing unnecessary flapping when a route to the root node has changed or is broken
    • Greedy routing is once again used instead of source routing
    • Per-link keepalives have been replaced with periodic acknowledgements, reducing idle bandwidth
  • The link handshake and multicast beacon formats have been revised for better future extensibility
  • The link code has been refactored for more robust tracking of peering states
    • As a result, the admin socket is now able to report information about configured peerings that are down
    • Reconnect intervals are now tracked separately for each configured peer with exponential backoffs

Removed

  • Yggdrasil will no longer request BBR congestion control for TCP and TLS peerings on Linux

Version 0.5.0 RC3

23 Oct 21:35
90c6288
Compare
Choose a tag to compare
Version 0.5.0 RC3 Pre-release
Pre-release

Fixed

  • Restored removePeer admin socket endpoint
  • Fixed the RetryPeersNow API call for mobile

Version 0.5.0 RC2

18 Oct 21:52
a2053b5
Compare
Choose a tag to compare
Version 0.5.0 RC2 Pre-release
Pre-release

Fixed

  • A bug which could result in high CPU usage after a network interface change has been fixed
  • TLS listeners no longer require a TLS client certificate, as it is not necessary
  • A panic in the mobile wrapper has been fixed when getting peers JSON

Version 0.5.0 RC1

15 Oct 16:31
e110dd4
Compare
Choose a tag to compare
Version 0.5.0 RC1 Pre-release
Pre-release

Added

  • Authenticated peering handshake with optional password, i.e.
    • For listeners: tls://[::]:12345?password=123456abcdef
    • For peers: tls://a.b.c.d:12345?password=123456abcdef
    • For multicast interfaces with the new Password option in each MulticastInterfaces section
    • Maximum password length is 64 characters
  • QUIC support for peerings, by using the new quic:// scheme in Listen and Peers
    • This has not been extensively tested and may perform worse than TCP or TLS peers
  • The private key can now be stored in PEM format separately to the main configuration file with the new PrivateKeyPath configuration file option
    • Use the -exportkey flag to export the key to a file from an existing config

Changed

  • New routing scheme, which is backwards incompatible with previous versions of Yggdrasil
    • The wire protocol version number, exchanged as part of the peer setup handshake, has been increased to 0.5
    • Nodes running this new version will not be able to peer with earlier versions of Yggdrasil
    • A DHT is no longer used to map public keys and routes through treespace
    • Bloom filters are used to track on-tree links and nodes reachable via that link
    • Nodes now gossip separate per-link information which is tracked in CRDT structures, forcing local consistency and preventing unnecessary flapping when a route to the root node has changed or is broken
    • Greedy routing is once again used instead of source routing
    • Per-link keepalives have been replaced with periodic acknowledgements, reducing idle bandwidth
  • The link handshake and multicast beacon formats have been revised for better future extensibility
  • The link code has been refactored for more robust tracking of peering states
    • As a result, the admin socket is now able to report information about configured peerings that are down
    • Reconnect intervals are now tracked separately for each configured peer with exponential backoffs

Removed

  • Yggdrasil will no longer request BBR congestion control for TCP and TLS peerings on Linux

Version 0.4.7

20 Nov 21:21
14f1cd4
Compare
Choose a tag to compare

Added

  • Dropped outbound peerings will now try to reconnect after a single second, rather than waiting up to 60 seconds for the normal peer timer

Changed

  • Session encryption keys are now rotated at most once per minute, which reduces CPU usage and improves throughput on fast low latency links
  • Buffers are now reused in the session encryption handler, which improves session throughput and reduces memory allocations
  • Buffers are now reused in the router for DHT and path traffic, which improves overall routing throughput and reduces memory allocations

Fixed

  • A bug in the admin socket where requests fail unless arguments is specified has been fixed
  • Certificates on TLS listeners will no longer expire after a year
  • The -address and -subnet command line options now return a useful warning when no configuration is specified

Version 0.4.6

26 Oct 17:27
4c66a13
Compare
Choose a tag to compare

Added

  • Support for prioritising multiple peerings to the same node has been added, useful for nodes with multiple network interfaces
    • The priority can be configured by specifying ?priority=X in a Peers or Listen URI, or by specifying Priority within a MulticastInterfaces configuration entry
    • Priorities are values between 0 and 254 (default is 0), lower numbers are prioritised and nodes will automatically negotiate the higher of the two values

Changed

  • On Linux, SO_REUSEADDR is now used on the multicast port instead of SO_REUSEPORT, which should allow processes running under different users to run simultaneously

Fixed

  • Adding peers using the InterfacePeers configuration option should now work correctly again
  • Multiple connections from the same remote IP address will no longer be incorrectly dropped
  • The admin socket will no longer incorrectly claim TCP connections as TLS
  • A panic that could occur when calling GetPeers while a peering link is being set up has been fixed

Version 0.4.5

18 Oct 22:04
b8a2d9f
Compare
Choose a tag to compare

Added

  • Support for peering over UNIX sockets is now available, by configuring Listen and peering URIs in the unix:///path/to/socket.sock format

Changed

  • yggdrasilctl has been refactored and now has cleaner output
  • It is now possible to addPeer and removePeer using the admin socket again
  • The getSessions admin socket call reports number of bytes received and transmitted again
  • The link setup code has been refactored, making it easier to support new peering types in the future
  • Yggdrasil now maintains configuration internally, rather than relying on a shared and potentially mutable structure

Fixed

  • Tracking information about expired root nodes has been fixed, which should hopefully resolve issues with reparenting and connection failures when the root node disappears
  • A bug in the mobile framework code which caused a crash on Android when multicast failed to set up has been fixed
  • Yggdrasil should now shut down gracefully and clean up correctly when running as a Windows service

Version 0.4.4

07 Jul 17:47
Compare
Choose a tag to compare

Fixed

  • ICMPv6 "Packet Too Big" payload size has been increased, which should fix Path MTU Discovery (PMTUD) when two nodes have different IfMTU values configured
  • A crash has been fixed when handling debug packet responses
  • yggdrasilctl getSelf should now report coordinates correctly again

Changed

  • Go 1.17 is now required to build Yggdrasil