2017-12-29 04:16:20 +00:00
|
|
|
# Yggdrasil
|
|
|
|
|
2018-03-03 18:29:47 +00:00
|
|
|
[![CircleCI](https://circleci.com/gh/yggdrasil-network/yggdrasil-go.svg?style=shield&circle-token=:circle-token
|
|
|
|
)](https://circleci.com/gh/yggdrasil-network/yggdrasil-go)
|
2018-02-03 01:38:55 +00:00
|
|
|
|
2019-03-13 20:06:02 +00:00
|
|
|
## Introduction
|
|
|
|
|
|
|
|
Yggdrasil is an early-stage implementation of a fully end-to-end encrypted IPv6
|
|
|
|
network. It is lightweight, self-arranging, supported on multiple platforms and
|
|
|
|
allows pretty much any IPv6-capable application to communicate securely with
|
|
|
|
other Yggdrasil nodes. Yggdrasil does not require you to have IPv6 Internet
|
|
|
|
connectivity - it also works over IPv4.
|
|
|
|
|
|
|
|
Although Yggdrasil shares many similarities with
|
|
|
|
[cjdns](https://github.com/cjdelisle/cjdns), it employs a different routing
|
|
|
|
algorithm based on a globally-agreed spanning tree and greedy routing in a
|
|
|
|
metric space, and aims to implement some novel local backpressure routing
|
|
|
|
techniques. In theory, Yggdrasil should scale well on networks with
|
|
|
|
internet-like topologies.
|
|
|
|
|
|
|
|
## Supported Platforms
|
|
|
|
|
|
|
|
We actively support the following platforms, and packages are available for
|
|
|
|
some of the below:
|
|
|
|
|
|
|
|
- Linux
|
|
|
|
- `.deb` and `.rpm` packages are built by CI for Debian and Red Hat-based
|
|
|
|
distributions
|
2020-09-27 12:24:19 +00:00
|
|
|
- Arch, Nix, Void packages also available within their respective repositories
|
2019-03-13 20:06:02 +00:00
|
|
|
- macOS
|
|
|
|
- `.pkg` packages are built by CI
|
|
|
|
- Ubiquiti EdgeOS
|
|
|
|
- `.deb` Vyatta packages are built by CI
|
|
|
|
- Windows
|
|
|
|
- FreeBSD
|
|
|
|
- OpenBSD
|
2019-03-19 14:54:49 +00:00
|
|
|
- OpenWrt
|
2019-03-13 20:06:02 +00:00
|
|
|
|
2019-09-11 10:52:03 +00:00
|
|
|
Please see our [Platforms](https://yggdrasil-network.github.io/platforms.html) pages for more
|
2019-03-13 20:06:02 +00:00
|
|
|
specific information about each of our supported platforms, including
|
|
|
|
installation steps and caveats.
|
2017-12-29 04:16:20 +00:00
|
|
|
|
2019-03-13 20:21:01 +00:00
|
|
|
You may also find other platform-specific wrappers, scripts or tools in the
|
|
|
|
`contrib` folder.
|
|
|
|
|
2017-12-29 04:16:20 +00:00
|
|
|
## Building
|
|
|
|
|
2019-03-13 20:06:02 +00:00
|
|
|
If you want to build from source, as opposed to installing one of the pre-built
|
|
|
|
packages:
|
2017-12-29 04:16:20 +00:00
|
|
|
|
2021-03-07 08:45:47 +00:00
|
|
|
1. Install [Go](https://golang.org) (requires Go 1.16 or later)
|
2019-03-13 20:06:02 +00:00
|
|
|
2. Clone this repository
|
|
|
|
2. Run `./build`
|
2018-01-26 09:28:57 +00:00
|
|
|
|
2019-03-13 20:06:02 +00:00
|
|
|
Note that you can cross-compile for other platforms and architectures by
|
|
|
|
specifying the `GOOS` and `GOARCH` environment variables, e.g. `GOOS=windows
|
|
|
|
./build` or `GOOS=linux GOARCH=mipsle ./build`.
|
2017-12-29 04:16:20 +00:00
|
|
|
|
|
|
|
## Running
|
|
|
|
|
2019-03-13 20:08:50 +00:00
|
|
|
### Generate configuration
|
|
|
|
|
2019-03-13 20:06:02 +00:00
|
|
|
To generate static configuration, either generate a HJSON file (human-friendly,
|
|
|
|
complete with comments):
|
2017-12-29 04:16:20 +00:00
|
|
|
|
2018-02-16 14:12:44 +00:00
|
|
|
```
|
2019-03-13 20:08:50 +00:00
|
|
|
./yggdrasil -genconf > /path/to/yggdrasil.conf
|
2018-02-16 14:12:44 +00:00
|
|
|
```
|
2018-01-26 09:28:57 +00:00
|
|
|
|
2019-03-13 20:06:02 +00:00
|
|
|
... or generate a plain JSON file (which is easy to manipulate
|
|
|
|
programmatically):
|
2018-03-10 23:40:03 +00:00
|
|
|
|
2018-02-16 14:12:44 +00:00
|
|
|
```
|
2019-03-13 20:08:50 +00:00
|
|
|
./yggdrasil -genconf -json > /path/to/yggdrasil.conf
|
2018-02-16 14:12:44 +00:00
|
|
|
```
|
2018-01-03 21:27:13 +00:00
|
|
|
|
2019-03-13 20:06:02 +00:00
|
|
|
You will need to edit the `yggdrasil.conf` file to add or remove peers, modify
|
|
|
|
other configuration such as listen addresses or multicast addresses, etc.
|
2017-12-29 04:16:20 +00:00
|
|
|
|
2019-03-13 20:08:50 +00:00
|
|
|
### Run Yggdrasil
|
|
|
|
|
2019-03-13 20:06:02 +00:00
|
|
|
To run with the generated static configuration:
|
2017-12-29 04:16:20 +00:00
|
|
|
```
|
2019-03-13 20:06:02 +00:00
|
|
|
./yggdrasil -useconffile /path/to/yggdrasil.conf
|
2017-12-29 04:16:20 +00:00
|
|
|
```
|
|
|
|
|
2019-03-13 20:06:02 +00:00
|
|
|
To run in auto-configuration mode (which will use sane defaults and random keys
|
|
|
|
at each startup, instead of using a static configuration file):
|
2017-12-29 04:16:20 +00:00
|
|
|
|
2019-03-13 20:06:02 +00:00
|
|
|
```
|
2019-03-13 20:08:50 +00:00
|
|
|
./yggdrasil -autoconf
|
2019-03-13 20:06:02 +00:00
|
|
|
```
|
2018-01-15 14:43:06 +00:00
|
|
|
|
2019-03-13 20:06:02 +00:00
|
|
|
You will likely need to run Yggdrasil as a privileged user or under `sudo`,
|
|
|
|
unless you have permission to create TUN/TAP adapters. On Linux this can be done
|
|
|
|
by giving the Yggdrasil binary the `CAP_NET_ADMIN` capability.
|
|
|
|
|
|
|
|
## Documentation
|
|
|
|
|
2019-03-13 20:08:50 +00:00
|
|
|
Documentation is available on our [GitHub
|
|
|
|
Pages](https://yggdrasil-network.github.io) site, or in the base submodule
|
2019-03-13 20:06:02 +00:00
|
|
|
repository within `doc/yggdrasil-network.github.io`.
|
|
|
|
|
|
|
|
- [Configuration file options](https://yggdrasil-network.github.io/configuration.html)
|
|
|
|
- [Platform-specific documentation](https://yggdrasil-network.github.io/platforms.html)
|
|
|
|
- [Frequently asked questions](https://yggdrasil-network.github.io/faq.html)
|
|
|
|
- [Admin API documentation](https://yggdrasil-network.github.io/admin.html)
|
2019-03-13 20:21:01 +00:00
|
|
|
- [Version changelog](CHANGELOG.md)
|
2019-03-13 20:06:02 +00:00
|
|
|
|
2019-03-13 20:12:08 +00:00
|
|
|
## Community
|
|
|
|
|
2019-03-13 20:21:01 +00:00
|
|
|
Feel free to join us on our [Matrix
|
|
|
|
channel](https://matrix.to/#/#yggdrasil:matrix.org) at `#yggdrasil:matrix.org`
|
|
|
|
or in the `#yggdrasil` IRC channel on Freenode.
|
2018-01-15 14:43:06 +00:00
|
|
|
|
2017-12-29 04:16:20 +00:00
|
|
|
## License
|
|
|
|
|
2019-03-13 20:06:02 +00:00
|
|
|
This code is released under the terms of the LGPLv3, but with an added exception
|
|
|
|
that was shamelessly taken from [godeb](https://github.com/niemeyer/godeb).
|
|
|
|
Under certain circumstances, this exception permits distribution of binaries
|
|
|
|
that are (statically or dynamically) linked with this code, without requiring
|
|
|
|
the distribution of Minimal Corresponding Source or Minimal Application Code.
|
2017-12-29 04:16:20 +00:00
|
|
|
For more details, see: [LICENSE](LICENSE).
|