5
0
mirror of https://github.com/cwinfo/yggdrasil-network.github.io.git synced 2024-09-19 14:59:37 +00:00

Add blog post for v0.3

This commit is contained in:
Neil Alexander 2018-12-10 21:41:20 +00:00
parent c0ae35f3ba
commit 286fadbc80
No known key found for this signature in database
GPG Key ID: A02A2019A2BB0944

View File

@ -0,0 +1,122 @@
---
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!