mirror of
https://github.com/cwinfo/yggdrasil-network.github.io.git
synced 2024-11-10 05:30:30 +00:00
123 lines
6.4 KiB
Markdown
123 lines
6.4 KiB
Markdown
|
---
|
||
|
layout: post
|
||
|
title: "Announcing Yggdrasil Network v0.3"
|
||
|
date: 2018-12-12 00:00:00 -0000
|
||
|
author: Neil Alexander
|
||
|
---
|
||
|
|
||
|
### It's finally here
|
||
|
|
||
|
At the end of 2017, Yggdrasil's first commit was uploaded to GitHub - a project
|
||
|
to explore whether it was possible to build a decentralised, end-to-end
|
||
|
encrypted and scalable compact routing scheme modelled around the concept of a
|
||
|
global spanning tree. Many concept routing schemes that we have seen to date
|
||
|
seem to have problems with scalability - after the network exceeds a certain
|
||
|
size, they either fail to perform or they start to rely on centralised points in
|
||
|
order to consolidate routing information. We wanted to build something that
|
||
|
would not be subject to these limitations and to maintain decentralisation as
|
||
|
far as possible. To our knowledge, this hasn't quite been achieved before.
|
||
|
|
||
|
Throughout the course of 2018, Yggdrasil has gone from being a very early-stage
|
||
|
project supporting only a single platform to a feature-strong and relatively
|
||
|
stable project which now runs on many supported platforms. Although we currently
|
||
|
still haven't advanced from the "alpha" label, our network has grown to exceed
|
||
|
70 nodes across the world (and growing slowly but steadily), with a good portion
|
||
|
of these users coming on-board and contributing their own
|
||
|
[services](services.md) to the network and using the network for their own
|
||
|
purposes. We've even had a small amount of publicity - [Toronto
|
||
|
Mesh](https://tomesh.net) have been exploring using Yggdrasil on their city-wide
|
||
|
mesh net, and even [presented some Yggdrasil
|
||
|
fundamentals](https://www.nuug.no/aktiviteter/20181009-mesh/) to the Norwegian
|
||
|
Unix User Group (NUUG) back in October.
|
||
|
|
||
|
So far, we believe that Yggdrasil is well on track to delivering on its promises
|
||
|
to build a fully end-to-end encrypted, self-arranging IPv6 network. We also
|
||
|
believe that Yggdrasil should be scalable on paper; we have somewhat proven
|
||
|
this in simulations, but the real proof will come in how the Yggdrasil Network
|
||
|
scales up in the real world, on real hardware, across real links. Having users
|
||
|
helping us to test brings us closer to our goal and enhances our understanding
|
||
|
of how our software will behave on large-scale network graphs.
|
||
|
|
||
|
Version 0.3 has been quite some time coming - we released version 0.2.7 on the
|
||
|
13th October and we have been working since then on what will make it into this
|
||
|
release. Even though it feels in some ways that version 0.3 is a relatively
|
||
|
small evolutionary release, it's actually by far our biggest release yet. We've
|
||
|
included quite a large list of fixes, changes and even new features and over
|
||
|
2000 lines of code changed. We've taken a lot of feedback from our users about
|
||
|
their use-cases and pain points, and we've collected topographical data from
|
||
|
various contributor nodes to try and get a good view of what the network looks
|
||
|
like. We've even experienced some rather large topology changes and enjoyed
|
||
|
relatively good network stability throughout.
|
||
|
|
||
|
For much of the time that we were developing v0.3, we had thought that there
|
||
|
would end up being protocol-breaking changes and that this would render v0.3
|
||
|
incompatible with nodes running previous versions. I am happy to announce that
|
||
|
we have **not** needed to introduce breaking changes at this stage and currently
|
||
|
the network has been running a mix of both older and newer developmental nodes
|
||
|
without any particular issues.
|
||
|
|
||
|
### New features
|
||
|
|
||
|
You'll be able to see the full list of modifications that have been made in our
|
||
|
[changelog](changelog.md), but I'd like to take the time to discuss some of our
|
||
|
bigger changes.
|
||
|
|
||
|
Perhaps the largest user-facing change is the introduction of Crypto-Key Routing
|
||
|
for traffic tunnelling, allowing you to effectively use Yggdrasil as a VPN for
|
||
|
both IPv4 and IPv6 traffic between any two given points on the network. This
|
||
|
tunnelled traffic enjoys the same benefits as regular Yggdrasil IPv6 traffic in
|
||
|
that it is end-to-end encrypted and our many optimisations assist in preventing
|
||
|
TCP-over-TCP anomalies that often arise in other solutions. I wrote an
|
||
|
introductory [blog post](_posts/2018-11-06-crypto-key-routing.md) back at the
|
||
|
beginning of November about CKR, which explains some more about how to
|
||
|
configure it and how it works.
|
||
|
|
||
|
In the background, we've made a change from using a Kademlia-based DHT to a
|
||
|
Chord-based DHT. This has some advantages in that a node can bootstrap and start
|
||
|
working with far less state information than was needed before. Additional
|
||
|
state, which we learn about automatically through searches, helps to speed up
|
||
|
DHT lookups. We also believe that using Chord can help us to reduce some idle
|
||
|
DHT chatter on the network in the future, and to help nodes converge more
|
||
|
quickly when they change their coordinates on the network.
|
||
|
|
||
|
We've fixed a reasonable number of bugs and crashes, including in the DHT,
|
||
|
switch and ICMPv6 code, and have made a number of additions to the admin socket
|
||
|
in order to support new functionality and to make parameter naming more
|
||
|
consistent throughout.
|
||
|
|
||
|
### Upgrading
|
||
|
|
||
|
Our CI pipeline automatically produces builds for all supported platforms and
|
||
|
these will become available on our [Builds page](builds.md). In addition, our S3
|
||
|
repository for Debian and RPM-based distributions will also be updated with the
|
||
|
new package releases.
|
||
|
|
||
|
New macOS .pkg installers are now available as a part of the v0.3 release too,
|
||
|
so installing and upgrading on macOS is now significantly easier than before.
|
||
|
You can find these installers on the [Builds page](builds.md) also.
|
||
|
|
||
|
On other platforms, simply download the latest binary for your platform and drop
|
||
|
it into place. Remember to take a backup of your configuration and normalise it,
|
||
|
which will add any new options for features in v0.3:
|
||
|
```
|
||
|
cp /path/to/yggdrasil.conf /var/backups/yggdrasil.conf
|
||
|
yggdrasil -useconffile /var/backups/yggdrasil.conf -normaliseconf > /path/to/yggdrasil.conf
|
||
|
```
|
||
|
|
||
|
### What's next?
|
||
|
|
||
|
Our work is far from over. We still have a list of things that can potentially
|
||
|
be rolled into future releases and we will be looking to see what we should
|
||
|
prioritise for our next version.
|
||
|
|
||
|
As always, we'll be hanging around in our Matrix/IRC channel too, so please feel
|
||
|
free to join and chat to us:
|
||
|
|
||
|
- `#yggdrasil:matrix.org` on Matrix
|
||
|
- `chat.freenode.net` channel `#yggdrasil` on IRC
|
||
|
|
||
|
A big thanks to our contributors, particularly those who have worked on creating
|
||
|
packages for Yggdrasil and bringing it to their distributions of choice, and to
|
||
|
all of the users who use Yggdrasil, contributing services and providing feedback
|
||
|
to us on a regular basis!
|