5
0
mirror of https://github.com/cwinfo/yggdrasil-network.github.io.git synced 2024-11-10 03:20:25 +00:00

Merge pull request #69 from yggdrasil-network/v0.3.6

Version 0.3.6
This commit is contained in:
Neil Alexander 2019-08-03 12:06:43 +01:00 committed by GitHub
commit d2af7dcde4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 148 additions and 1 deletions

View File

@ -0,0 +1,114 @@
---
layout: post
title: "Version 0.3.6"
date: 2019-08-03 08:00:00 -0000
author: Neil Alexander
---
### Version 0.3.6
It's been nearly five months since we released version 0.3.5 of Yggdrasil. In
that time we've seen the node count rise to over 400 nodes on the public network
at times (over 80% of which are running the latest released version) and we've
gained valuable insight to the kinds of challenges that our users have. We've
worked to fix a number of bugs and to improve Yggdrasil.
In terms of lines of code changed, version 0.3.6 is the biggest release of
Yggdrasil to date, with several thousands of lines of code affected. It
represents a massive refactoring exercise in which we've broken up and
modularised the code, dividing core Yggdrasil functionality, TUN/TAP, admin
socket and multicast features into their own respective Go packages.
### Fixes
Most of the user-facing changes in this release are fairly minimal, however some
bugs have been corrected. A complete list is available in the [changelog](changelog.md).
Highlights include peers now being added correctly even when one or more
configured peers are unavailable or unreachable. Multicast interfaces are also
being evaluated more frequently now, which can help if an interface becomes
available or goes down after Yggdrasil has already started.
A number of bugs have been fixed in the TUN/TAP and IP-specific code, including
problems that affected ICMPv6 and Neighbour Discovery in TAP mode specifically.
This helps reliability on platforms where TAP mode is used more commonly, e.g.
on BSD platforms or on Windows, although this also improves TAP support on Linux
too.
### Refactoring and API
Around the previous release, it became obvious to us that our codebase was
turning into a monolith. We had pretty much all of the necessary behaviour in
a single `yggdrasil` package to run a single node, but this made our codebase
inflexible and difficult to maintain and extend. It also meant that Yggdrasil
was virtually impossible to integrate into other applications.
Our refactoring efforts in version 0.3.6 mean that our codebase is now easier to
manage and to understand. It also includes the first taste of our API! The
API makes it possible to take the Yggdrasil core, drop it into your own Go
application and use the Yggdrasil network as a fully end-to-end encrypted and
distributed transport layer. We've also moved all of the IP-specific code into
the TUN/TAP module, which means that Yggdrasil's core now provides a completely
protocol-agnostic transport.
Documentation on how to use the API to integrate Yggdrasil into your own
applications will follow soon—watch this space! In the meantime, `godoc` can be
used to examine our new API functions.
Please note though that **API functions are not yet finalised and may be subject
to change** in future versions. Yggdrasil is still alpha-grade software at this
point so all of the usual warnings apply.
### Platform Support
We enjoy great support from our community in bringing and packaging Yggdrasil on
new platforms. Since the release of version 0.3.5, the following third-party
packages have cropped up, and we are very grateful to the maintainers:
- A [new RPM build](https://copr.fedorainfracloud.org/coprs/leisteth/yggdrasil/) for Red Hat, Fedora, CentOS etc.
- An [AUR package](https://aur.archlinux.org/packages/yggdrasil-git/) for Arch Linux
- A [Void package](https://github.com/void-linux/void-packages/tree/master/srcpkgs/yggdrasil) for Void Linux
- A [MacPorts package](https://github.com/macports/macports-ports/blob/master/net/yggdrasil-go/Portfile) for macOS
We expect that any third-party packages which have not yet been updated for
v0.3.6 will be updated soon!
We are aware of a few outstanding issues with Windows, which are largely related
to one or two bugs in the [Water](https://github.com/songgao/water) library
which we use for TUN/TAP support. We are hoping to address these problems with
the maintainer of this library soon. Using Yggdrasil in router-only mode does
work as expected, but some bugs when using the TAP adapter still remain. In the
meantime, we'd certainly welcome any assistance in maintaining the Windows port
of Yggdrasil.
The iOS build has been largely neglected due to API changes, although hopefully
a new TestFlight build for version 0.3.6 will be available before too long.
### Upgrading
We recommend that all Yggdrasil users always run the latest version of the code
wherever possible, so please upgrade as soon as it is convenient. New downloads
are available from our [Builds](builds.md) page and
[Neil](https://github.com/neilalexander)'s S3 repositories are up-to-date for
Debian and EdgeRouter installs.
If you have installed through a package manager, you should be able to upgrade
in-place as soon as the new packages are available. On macOS, you can simply
install the new `.pkg` from the builds page over the top of the old one. On
Windows, and on any installation where the binary was installed by hand, you can
simply replace the `yggdrasil` and `yggdrasilctl` binaries with the newly
released builds.
Building from source is simple if you have Git and Go 1.11 or later installed:
```
git clone https://github.com/yggdrasil-network/yggdrasil-go
cd yggdrasil-go
./build
```
### Feedback
We always welcome feedback, so please do feel free to join us either in our
[Matrix channel](https://riot.im/app/#/room/%23yggdrasil:matrix.org) or on IRC
in `#yggdrasil` on Freenode. You can also raise bug reports and issues in [our
GitHub repository](https://github.com/yggdrasil-network/yggdrasil-go/issues).

View File

@ -25,6 +25,39 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- in case of vulnerabilities.
-->
## [0.3.6] - 2019-08-03
### Added
- Yggdrasil now has a public API with interfaces such as `yggdrasil.ConnDialer`, `yggdrasil.ConnListener` and `yggdrasil.Conn` for using Yggdrasil as a transport directly within applications
- Session gatekeeper functions, part of the API, which can be used to control whether to allow or reject incoming or outgoing sessions dynamically (compared to the previous fixed whitelist/blacklist approach)
- Support for logging to files or syslog (where supported)
- Platform defaults now include the ability to set sane defaults for multicast interfaces
### Changed
- Following a massive refactoring exercise, Yggdrasil's codebase has now been broken out into modules
- Core node functionality in the `yggdrasil` package with a public API
- This allows Yggdrasil to be integrated directly into other applications and used as a transport
- IP-specific code has now been moved out of the core `yggdrasil` package, making Yggdrasil effectively protocol-agnostic
- Multicast peer discovery functionality is now in the `multicast` package
- Admin socket functionality is now in the `admin` package and uses the Yggdrasil public API
- TUN/TAP, ICMPv6 and all IP-specific functionality is now in the `tuntap` package
- `PPROF` debug output is now sent to `stderr` instead of `stdout`
- Node IPv6 addresses on macOS are now configured as `secured`
- Upstream dependency references have been updated, which includes a number of fixes in the Water library
### Fixed
- Multicast discovery is no longer disabled if the nominated interfaces aren't available on the system yet, e.g. during boot
- Multicast interfaces are now re-evaluated more frequently so that Yggdrasil doesn't need to be restarted to use interfaces that have become available since startup
- Admin socket error cases are now handled better
- Various fixes in the TUN/TAP module, particularly surrounding Windows platform support
- Invalid keys will now cause the node to fail to start, rather than starting but silently not working as before
- Session MTUs are now always calculated correctly, in some cases they were incorrectly defaulting to 1280 before
- Multiple searches now don't take place for a single connection
- Concurrency bugs fixed
- Fixed a number of bugs in the ICMPv6 neighbor solicitation in the TUN/TAP code
- A case where peers weren't always added correctly if one or more peers were unreachable has been fixed
- Searches which include the local node are now handled correctly
- Lots of small bug tweaks and clean-ups throughout the codebase
## [0.3.5] - 2019-03-13
### Fixed
- The `AllowedEncryptionPublicKeys` option has now been fixed to handle incoming connections properly and no longer blocks outgoing connections (this was broken in v0.3.4)

View File

@ -11,7 +11,7 @@ Although Yggdrasil shares many similarities with [cjdns](https://github.com/cjde
## Project Status
The project is currently in early stages but it is being actively developed. We have recently released [version 0.3.5](changelog.md) and are still regularly working on updates.
The project is currently in early stages but it is being actively developed. We have recently released [version 0.3.6](changelog.md) and are still regularly working on updates.
A small number of users have been using and stress-testing Yggdrasil quite heavily for a number of purposes, including but not limited to secure remote access (SSH and VNC), access to Matrix, Jabber and IRC servers and even some video streams, large file transfers and performance tests. We have a number of [internal services](services.md) available, contributed and operated by the community.