A flexible configuration manager for Wireguard networks



Drago

A flexible configuration manager for WireGuard networks

Go report: A+ GitHub Gitter

Drago is a flexible configuration manager for WireGuard networks which is designed to make it simple to configure network overlays spanning heterogeneous hosts distributed across different clouds and physical locations.

Features

  • Single-binary, lightweight
  • Encrypted node-to-node communication
  • Support for multiple storage backends
  • Dynamic network configuration
  • Support for wireguard-go
  • Automatic key rotation
  • Extensible via REST API
  • Slick management dashboard
  • Automatic IP assignment

Status & Roadmap

We are preparing a new release, which includes significant refactoring, and a bunch of new functionalities targeting production environments. More specifically, we are focusing on:

  • Replacing Postgres with Etcd as the primary storage backend. Etcd will be embedded in the Drago server, hence allowing operation in cluster mode;
  • Implementing an ACL system for fine-grained access control heavily inspired on that provided by Hashicorp Nomad;
  • Refactoring the client, more specifically the node registration and reconciliation mechanisms in order to make them more secure and robust;
  • We're working on supporting plugins (for IP leasing, meshing, discovery, anomaly detection, as well for integrating with other tools we're developing). The idea is to move all non-core functionality to a plugin. As it requires a bit more work, this is probably not going to be ready in the next version, though;
  • Improving the documentation;
  • Improving test coverage.

Any feedback from the community is much appreciated, and so are feature requests.

Use cases

  • Securely connect IoT devices
  • Build your own cloud with RaspberryPIs
  • Connect servers/services running on multiple cloud providers
  • Manage access to sensitive services deployed to private hosts
  • Expose development servers for debugging and demonstration purposes
  • Secure home automation, SSH access, etc
  • Establish secure VPNs for your company

Overview

WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec, while avoiding the massive headache. It intends to be considerably more performant than OpenVPN. WireGuard is designed as a general purpose VPN for running on embedded interfaces and super computers alike, fit for many different circumstances. Initially released for the Linux kernel, it is now cross-platform and widely deployable, being regarded as the most secure, easiest to use, and simplest VPN solution in the industry.

WireGuard presents several advantages over other VPN solutions, but it does not allow for the dynamic configuration of network parameters such as IP addresses and firewall rules.

Drago builds on top of WireGuard, allowing users to dynamically manage the configuration of their VPN networks, providing a unified control plane for overlays spanning from containers to virtual machines to IoT devices.

How it works

Drago follows a client-server paradigm, in which a centralized server provides multiple clients running alongside WireGuard with their desired state. The desired state is retrieved from the server in a periodic basis and applied to WireGuard running on each host. In other words, the Drago server works as a gateway for accessing network configurations safely stored in a database.



It exposes a comprehensive API through which these configurations can be retrieved and modified, implements authentication mechanisms to prevent unauthorized access, and serves a slick web UI to facilitate the process of managing and visualizing the state of the managed networks.

The Drago client, which runs on every host in the network, is responsible for directly interacting with the server through the API, and for retrieving the most up-to-date configurations. Through a simple reconciliation process, the Drago client then guarantees that the WireGuard configurations on each host match the desired state stored in the database. When running in client mode, Drago also takes care of automatically generating key pairs for WireGuard, and sharing the public key so that hosts can always connect to each other.

The only assumption made by Drago is that each host running the client is also running WireGuard, and that the host in which the configuration server is located is reachable through the network.

Drago does not enforce any specific network topology. Its sole responsibility is to distribute the desired configurations, and guarantee that they are correctly applied to WireGuard on every single registered host. This means that it is up to you to define how your hosts are connected to each other and how your network should look like.

Drago is meant to be simple, and provide a solid foundation for higher-level functionality. Need automatic IP assignment, dynamic firewall rules, or some kind of telemetry? You are free to implement on top of the already existing API.

Build

System requirements:

  • Golang 1.14+
  • Node 10.17.0+
  • yarn 1.12.3+
$ go generate
$ go build

Alternatively, you can build with make, for example:

$ make dev
...

To see help on building with make, run:

$ make help
...

Usage

drago --help
drago agent --config=<config_file>

Development

Server

Build the UI:

go generate

Start the Drago server with air:

ROOT_SECRET="<my-root-secret>" ./air.sh

Note that the env variable ROOT_SECRET contains the secret used by Drago to sign and check tokens.

UI

Once Drago server is up and running, start a dev server for the web UI:

cd ui
REACT_APP_REST_API_URL="localhost:8080/api/" yarn start

Both the backend server and the UI server have hot-reloading capabilities.

Build and run the Drago client:

sudo ./drago --config="./dist/client.yml"

Contributing

  • Fork it
  • Download your fork (git clone https://github.com/your_username/drago && cd drago)
  • Create your feature branch (git checkout -b my-new-feature)
  • Make changes and stage them (git add .)
  • Commit your changes (git commit -m 'Add some feature')
  • Push to the branch (git push origin my-new-feature)
  • Create new pull request

License

Drago is released under the Apache 2.0 license. See LICENSE.txt

Comments
  • Base URL option

    Base URL option

    Wanting to try Drago in my setup I've created my own docker image to spin up (based on the build process found here), but it won't do API calls properly.

    The issue is that it's expecting it to be run from localhost, so all API calls in the UI is trying to send to http://localhost:8080 - so it seems you can only use the UI if you're actually running it locally, and accessing UI locally.

    Is there an option to change this in some way? I can't find it in the docs at least. Because if not I don't see how I'd get it working with my proxy either.

  • Client not connecting to server

    Client not connecting to server

    Trying to setup Drago, got the server up and running currently. On my other host (VM) I'm trying to setup a client with this configuration:

    name = "docker2"
    ports {
        http = 8181
        rpc = 8282
    }
    
    client {
        enabled = true
        servers = ["10.0.10.2:8080"]
    }
    

    It's called docker2 since that's the name of the host, but the client is currently not running in docker

    I get this output when starting my client (this is the 2nd or 3rd run) and it says it has registered successfully, but I can't see it inside the UI under clients (which is where I expect it to appear).

    ==> Loading configurations from: [config.hcl]
    ==> Starting Drago agent...
    ==> Drago agent configuration:
    
    Bind Addrs: HTTP: 0.0.0.0:8181; RPC: 0.0.0.0:8282
    Advertise Addrs: Peer: 0.0.0.0; Server: 0.0.0.0:8282
    Log Level: DEBUG
    Client: true
    Server: true
    Version: dev
    Acl Enabled: false
    Data Dir: /tmp/drago
    
    [DEBUG] server: rpc server started at 0.0.0.0:8282
    [INFO] client: using state directory /tmp/drago
    [DEBUG] client: interface updates: (created: 0, deleted: 0, updated: 0, unchanged: 0)
    [INFO] client: started client node 63c6db4a-192b-88ea-d329-1f796c77ed3e
    [DEBUG] agent: http server started at [::]:8181
    [DEBUG] client: registering node (client -> server)
    [DEBUG] client: running node
    [DEBUG] client: updating interface status (client -> server)
    [DEBUG] client: updating interface configuration (server -> client)
    [DEBUG] client: interface updates: (created: 0, deleted: 0, updated: 0, unchanged: 0)
    [DEBUG] server: node 63c6db4a-192b-88ea-d329-1f796c77ed3e already registered.
    [DEBUG] client: heartbeating (client -> server)
    [DEBUG] client: updating node status (client -> server)
    [DEBUG] server: heartbeat from node 63c6db4a-192b-88ea-d329-1f796c77ed3e
    [DEBUG] client: updating interface status (client -> server)
    

    Something I'm missing?

  • Dockerfile or pre-compiled docker images support

    Dockerfile or pre-compiled docker images support

    Thank you for your efforts on this project. It looks like a great idea! Could you provide a Dockerfile for compiling the whole project? Or are there any provide a pre-compiled docker images? I just want to try a demo :)

  • Alliance

    Alliance

    Hello, my name is Alfonso Hernandez. I work for the Astian Foundation, a non-profit organization that offers free software and technologies.

    We are the organization responsible for development and maintenance of Midori Browser, a popular browser, light, fast, secure and open source.

    We are developing a service called K-LamarVPN using WireGuard, which we hope to link with Midori. We would like to establish an alliance with the project to implement it.

    What do you think?

  • support drago managing a subset of wireguard devices on a client

    support drago managing a subset of wireguard devices on a client

    At the moment Drago agent on the client deletes all defined wireguard devices during the reconciliation loop

    So if a client, say a windows desktop user, wishes to use use Drago in addition to another VPN solution that also uses wireguard, Drago will delete their connection.

    One idea could be for the client to prefix all Drago managed devices with drago_. The server won't know about the prefix.

  • Docker tweaks (mostly upgrades)

    Docker tweaks (mostly upgrades)

    Changes in this PR:

    • Upgrade builder image to Go 1.17.0 (everything builds successfully with this version)
    • Switch to alpine for builder image (takes less space and less time to build; everything builds correctly and works on non-alpine Linux systems too - confirmed on openSUSE Tumbleweed)
    • Simplify builder Dockerfile significantly (no custom repos or compiler toolchains needed)
    • Upgrade to Alpine 3.14 for linux_amd64 image

    I've confirmed that the above changes build successfully

  • Client in docker unable to create interface

    Client in docker unable to create interface

    Describe the bug When running a client in Docker, it is unable to create an interface to route traffic through.

    To Reproduce Steps to reproduce the behavior:

    1. Run the docker image as a client
    2. Connect to a network
    3. Notice a lack of Drago interface

    Expected behavior The interface should be created regardless

    Additional context I believe this is purely down to a lack of some volumes being passed through to the container, in which case this is just a small documentation issue. This could be of use: https://github.com/gravitl/netmaker/blob/master/compose/docker-compose.reference.yml#L15

  • Add --dev flag to agent command

    Add --dev flag to agent command

    Is your feature request related to a problem? Please describe. I'd like to be able to run the agent in dev mode, i.e., running both the Drago server and the client.

    Describe the solution you'd like I'd like a flag to be added to the drago agent command (--dev), which causes both the server and the client to be launched with default configurations so that the server runs on localhost, and the client is able to connect to it. No authentication should be enforced, as this is primarily meant for developing and testing.

  • Implement pagination or infinite scrolling on the UI

    Implement pagination or infinite scrolling on the UI

    Is your feature request related to a problem? Please describe. This feature would allow the frontend to fetch data from the backend as needed, in an efficient way.

    Describe the solution you'd like Pagination: For every screen in which a list of resources (i.e., networks, hosts, interfaces, and links) is shown, I'd like to be able to select how many entries will be included in each page fetched and displayed at a time, and also the current page. Infinite scrolling: As I scroll down, I'd like the frontend to asynchronously fetch more data from the backend and display it in the UI.

    Describe alternatives you've considered react-paginate, react-infinite-scroll-component, or a similar alternative in conjunction with Apollo client.

  • `PopulateRepository` in Server Run method

    `PopulateRepository` in Server Run method

    https://github.com/seashell/drago/blob/b9584f631a8bcd27618500f84ae7579bf2c1eb07/agent/server/server.go#L30 I did not start the server locally to check if the /links or /hosts endpoint returns the dummies but it seems like this line should be deleted. It gets called here https://github.com/seashell/drago/blob/983a2e9c4bf21ffbb93d632b983bc312ff2ae25f/agent/agent.go#L54

    I assume the "dummies" it creates are for testing purposes only?

  • Consider all config before complaining about lack of --server or --client

    Consider all config before complaining about lack of --server or --client

    When starting the agent, Drago will complain about the lack of --server or --client even if those settings are present in the config file. This doesn't make much sense, so now Drago will consider the config file too before complaining.

  • Bump minimist from 1.2.5 to 1.2.6 in /ui

    Bump minimist from 1.2.5 to 1.2.6 in /ui

    Bumps minimist from 1.2.5 to 1.2.6.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • Bump async from 2.6.3 to 2.6.4 in /ui

    Bump async from 2.6.3 to 2.6.4 in /ui

    Bumps async from 2.6.3 to 2.6.4.

    Changelog

    Sourced from async's changelog.

    v2.6.4

    • Fix potential prototype pollution exploit (#1828)
    Commits
    Maintainer changes

    This version was pushed to npm by hargasinski, a new releaser for async since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • Bump nanoid from 3.1.20 to 3.3.4 in /ui

    Bump nanoid from 3.1.20 to 3.3.4 in /ui

    Bumps nanoid from 3.1.20 to 3.3.4.

    Changelog

    Sourced from nanoid's changelog.

    3.3.4

    3.3.3

    • Reduced size (by Anton Khlynovskiy).

    3.3.2

    • Fixed enhanced-resolve support.

    3.3.1

    • Reduced package size.

    3.3

    • Added size argument to function from customAlphabet (by Stefan Sundin).

    3.2

    • Added --size and --alphabet arguments to binary (by Vitaly Baev).

    3.1.32

    • Reduced async exports size (by Artyom Arutyunyan).
    • Moved from Jest to uvu (by Vitaly Baev).

    3.1.31

    • Fixed collision vulnerability on object in size (by Artyom Arutyunyan).

    3.1.30

    • Reduced size for project with brotli compression (by Anton Khlynovskiy).

    3.1.29

    • Reduced npm package size.

    3.1.28

    • Reduced npm package size.

    3.1.27

    • Cleaned dependencies from development tools.

    3.1.26

    • Improved performance (by Eitan Har-Shoshanim).
    • Reduced npm package size.

    3.1.25

    • Fixed browserify support.

    3.1.24

    • Fixed browserify support (by Artur Paikin).

    3.1.23

    • Fixed esbuild support.

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • Bump moment from 2.29.1 to 2.29.2 in /ui

    Bump moment from 2.29.1 to 2.29.2 in /ui

    Bumps moment from 2.29.1 to 2.29.2.

    Changelog

    Sourced from moment's changelog.

    2.29.2 See full changelog

    • Release Apr 3 2022

    Address https://github.com/moment/moment/security/advisories/GHSA-8hfj-j24r-96c4

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • make container DOCKER=1 not working centos 7

    make container DOCKER=1 not working centos 7

    Describe the bug Attempting to build the docker image on centos 7 results in an error, see screenshot for build output

    To Reproduce On Centos 7 $ git clone https://github.com/seashell/drago.git drago $

    Expected behavior Successful build of docker image.

    Screenshots Full attempted build output:

    sudo make container DOCKER=1
    make[1]: Entering directory `/home/paul/drago'
    ==> Building Web UI...
    docker run --rm -v /home/paul/drago:/home/paul/drago --workdir=/home/paul/drago drago_builder \
    /bin/sh -c "go generate"
    go: downloading github.com/caarlos0/env v3.5.0+incompatible
    go: downloading github.com/dimiro1/banner v1.1.0
    go: downloading github.com/hashicorp/hcl/v2 v2.9.1
    go: downloading github.com/joho/godotenv v1.3.0
    go: downloading github.com/rodaine/table v1.0.1
    go: downloading github.com/spf13/pflag v1.0.5
    go: downloading github.com/fatih/color v1.10.0
    go: downloading github.com/common-nighthawk/go-figure v0.0.0-20200609044655-c4b36f998cf2
    go: downloading github.com/mattn/go-isatty v0.0.12
    go: downloading github.com/hashicorp/go-cleanhttp v0.5.2
    go: downloading github.com/pkg/errors v0.9.1
    go: downloading github.com/mattn/go-colorable v0.1.8
    go: downloading golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae
    go: downloading github.com/agext/levenshtein v1.2.1
    go: downloading github.com/apparentlymart/go-textseg/v13 v13.0.0
    go: downloading github.com/apparentlymart/go-textseg v1.0.0
    go: downloading github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7
    go: downloading github.com/zclconf/go-cty v1.8.0
    go: downloading github.com/go-playground/validator/v10 v10.4.1
    go: downloading golang.org/x/text v0.3.5
    go: downloading github.com/google/go-cmp v0.4.0
    go: downloading github.com/vmihailenco/msgpack v4.0.4+incompatible
    go: downloading github.com/vishvananda/netlink v1.1.1-0.20200604160102-dc0e1b988c57
    go: downloading golang.zx2c4.com/wireguard/wgctrl v0.0.0-20200609130330-bd2cb7843e1b
    go: downloading golang.zx2c4.com/wireguard v0.0.20200121
    go: downloading go.etcd.io/bbolt v1.3.5
    go: downloading go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738
    go: downloading github.com/imdario/mergo v0.3.12
    go: downloading github.com/go-playground/universal-translator v0.17.0
    go: downloading github.com/leodido/go-urn v1.2.0
    go: downloading golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9
    go: downloading github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df
    go: downloading github.com/google/uuid v1.0.0
    go: downloading go.uber.org/zap v1.16.0
    go: downloading google.golang.org/grpc v1.23.1
    go: downloading github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf
    go: downloading github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
    go: downloading github.com/grpc-ecosystem/grpc-gateway v1.9.5
    go: downloading github.com/soheilhy/cmux v0.1.4
    go: downloading github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8
    go: downloading golang.org/x/net v0.0.0-20200301022130-244492dfa37a
    go: downloading sigs.k8s.io/yaml v1.1.0
    go: downloading github.com/go-playground/locales v0.13.0
    go: downloading github.com/mdlayher/genetlink v1.0.0
    go: downloading github.com/mdlayher/netlink v1.1.0
    go: downloading github.com/gogo/protobuf v1.2.1
    go: downloading github.com/golang/protobuf v1.3.4
    go: downloading github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7
    go: downloading go.uber.org/atomic v1.6.0
    go: downloading go.uber.org/multierr v1.5.0
    go: downloading google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8
    go: downloading github.com/prometheus/client_golang v1.0.0
    go: downloading github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c
    go: downloading github.com/sirupsen/logrus v1.8.1
    go: downloading github.com/coreos/go-semver v0.2.0
    go: downloading github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4
    go: downloading github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2
    go: downloading golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2
    go: downloading github.com/jonboulle/clockwork v0.1.0
    go: downloading github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4
    go: downloading gopkg.in/yaml.v2 v2.3.0
    go: downloading github.com/beorn7/perks v1.0.0
    go: downloading github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90
    go: downloading github.com/prometheus/common v0.4.1
    go: downloading github.com/prometheus/procfs v0.0.2
    go: downloading github.com/dgrijalva/jwt-go v3.2.0+incompatible
    go: downloading github.com/google/btree v1.0.0
    go: downloading github.com/matttproud/golang_protobuf_extensions v1.0.1
    go: downloading github.com/json-iterator/go v1.1.7
    go: downloading github.com/modern-go/reflect2 v1.0.1
    go: downloading github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
    yarn install v1.22.15
    [1/4] Resolving packages...
    [2/4] Fetching packages...
    info [email protected]: The platform "linux" is incompatible with this module.
    info "[email protected]" is an optional dependency and failed compatibility check. Excluding it from installation.
    info [email protected]: The platform "linux" is incompatible with this module.
    info "[email protected]" is an optional dependency and failed compatibility check. Excluding it from installation.
    [3/4] Linking dependencies...
    warning " > @reach/[email protected]" has incorrect peer dependency "[email protected] || 16.x || 16.4.0-alpha.0911da3".
    warning " > @reach/[email protected]" has incorrect peer dependency "[email protected] || 16.x || 16.4.0-alpha.0911da3".
    warning "@reach/router > [email protected]" has incorrect peer dependency "react@^0.14.0 || ^15.0.0 || ^16.0.0".
    warning " > [email protected]" has unmet peer dependency "qs@>=6".
    warning " > [email protected]" has incorrect peer dependency "react@^16.8.0".
    warning " > [email protected]" has incorrect peer dependency "react@^15.0.0 || ^16.0.0".
    warning " > [email protected]" has incorrect peer dependency "react@^17.0.0 | ^16.14.0".
    warning " > [email protected]" has incorrect peer dependency "react@^16.4.1".
    warning " > [email protected]" has incorrect peer dependency "react@^15.6.0 || ^16.0.0".
    warning " > [email protected]" has incorrect peer dependency "react@^0.14 || ^15 || ^16".
    warning " > [email protected]" has incorrect peer dependency "react-dom@^0.14 || ^15 || ^16".
    warning "react-scripts > @typescript-eslint/eslint-plugin > [email protected]" has unmet peer dependency "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta".
    warning " > [email protected]" has incorrect peer dependency "react@^0.14.0 || ^15.0.0 || ^16.0.0".
    warning " > [email protected]" has incorrect peer dependency "react-dom@^0.14.0 || ^15.0.0 || ^16.0.0".
    warning " > [email protected]" has incorrect peer dependency "react@^15.0.0 || ^16.0.0".
    warning " > [email protected]" has incorrect peer dependency "react-dom@^15.0.0 || ^16.0.0".
    warning " > [email protected]" has incorrect peer dependency "react@^16.8.0".
    warning " > [email protected]" has incorrect peer dependency "react-dom@^16.8.0".
    warning " > [email protected]" has incorrect peer dependency "react@^15.3.0 || ^16.0.0-alpha".
    warning " > [email protected]" has incorrect peer dependency "react-dom@^15.3.0 || ^16.0.0-alpha".
    warning " > [email protected]" has incorrect peer dependency "react@^15.3.0 || ^16.0.0-alpha".
    warning " > [email protected]" has incorrect peer dependency "react-dom@^15.3.0 || ^16.0.0-alpha".
    warning " > [email protected]" has incorrect peer dependency "react@^15.0.0 || ^16.0.0".
    warning " > [email protected]" has incorrect peer dependency "react-dom@^15.0.0 || ^16.0.0".
    warning "recharts > [email protected]" has incorrect peer dependency "react@^0.14.7 || ^15.0.0 || ^16.0.0".
    warning "recharts > [email protected]" has incorrect peer dependency "react@^15.0.0 || ^16.0.0".
    warning "recharts > [email protected]" has incorrect peer dependency "react-dom@^15.0.0 || ^16.0.0".
    warning " > [email protected]" has incorrect peer dependency "react@^0.14.0 || ^15.0.0 || ^16.0.0".
    warning " > [email protected]" has unmet peer dependency "react-is@>= 16.8.0".
    warning " > [email protected]" has incorrect peer dependency "react@^16.9.0".
    warning " > [email protected]" has incorrect peer dependency "react-dom@^16.9.0".
    warning " > [email protected]" has unmet peer dependency "webpack@>=1.11.0".
    warning " > [email protected]" has incorrect peer dependency "[email protected] || 3.x".
    warning "react-app-rewire-styled-components > [email protected]" has incorrect peer dependency "react-scripts@^1.0.14".
    [4/4] Building fresh packages...
    Done in 98.08s.
    yarn run v1.22.15
    $ react-app-rewired build
    Creating an optimized production build...
    Browserslist: caniuse-lite is outdated. Please run:
    npx browserslist@latest --update-db
    
    Why you should do it regularly:
    https://github.com/browserslist/browserslist#browsers-data-updating
    Compiled successfully.
    
    File sizes after gzip:
    
      254.21 KB  build/static/js/2.63d1b46f.chunk.js
      78.11 KB   build/static/js/main.5d8f5566.chunk.js
      1.94 KB    build/static/css/2.e37103c0.chunk.css
      1.47 KB    build/static/css/main.8c8a6e54.chunk.css
      774 B      build/static/js/runtime-main.96e6ffe6.js
    
    The project was built assuming it is hosted at /ui/.
    You can control this with the homepage field in your package.json.
    
    The build folder is ready to be deployed.
    
    Find out more about deployment here:
    
      https://cra.link/deployment
    
    Done in 105.87s.
    bash: go: command not found
    bash: go: command not found
    make[2]: *** No rule to make target `_'.  Stop.
    make[1]: *** [dev] Error 2
    make[1]: Leaving directory `/home/paul/drago'
    make: *** [container] Error 2
    

    Server (please complete the following information):

    • OS: Centos 7
    • uname -r 3.10.0-1160.45.1.el7.centos.plus.x86_64
🐉 Simple WireGuard proxy with minimal overhead for WireGuard traffic.

swgp-go ?? Simple WireGuard proxy with minimal overhead for WireGuard traffic. Proxy Modes 1. Zero overhead Simply AES encrypt the first 16 bytes of a

Jan 8, 2023
Simple Web based configuration generator for WireGuard. Demo:
Simple Web based configuration generator for WireGuard. Demo:

Wg Gen Web Simple Web based configuration generator for WireGuard. Why another one ? All WireGuard UI implementations are trying to manage the service

Jan 1, 2023
A Wireguard VPN Server Manager and API to add and remove clients

Wireguard Manager And API A manager and API to add, remove clients as well as other features such as an auto reapplier which deletes and adds back a c

Dec 22, 2022
A standalone Web Server developed with the standard http library, suport reverse proxy & flexible configuration
A standalone Web Server developed with the standard http library, suport reverse proxy & flexible configuration

paddy 简介 paddy是一款单进程的独立运行的web server,基于golang的标准库net/http实现。 paddy提供以下功能: 直接配置http响应 目录文件服务器 proxy_pass代理 http反向代理 支持请求和响应插件 部署 编译 $ go build ./main/p

Oct 18, 2022
Traefik config validator: a CLI tool to (syntactically) validate your Traefik configuration filesTraefik config validator: a CLI tool to (syntactically) validate your Traefik configuration files
Traefik config validator: a CLI tool to (syntactically) validate your Traefik configuration filesTraefik config validator: a CLI tool to (syntactically) validate your Traefik configuration files

Traefik Config Validator Note This is currently pre-release software. traefik-config-validator is a CLI tool to (syntactically) validate your Traefik

Dec 16, 2021
A library for working with IP addresses and networks in Go

IPLib I really enjoy Python's ipaddress library and Ruby's ipaddr, I think you can write a lot of neat software if some of the little problems around

Dec 20, 2022
A fork of the simple WireGuard VPN server GUI community maintained
A fork of the simple WireGuard VPN server GUI community maintained

Subspace - A simple WireGuard VPN server GUI Subspace - A simple WireGuard VPN server GUI Slack Screenshots Features Contributing Setup 1. Get a serve

Dec 25, 2022
webrpc is a schema-driven approach to writing backend services for modern Web apps and networks
webrpc is a schema-driven approach to writing backend services for modern Web apps and networks

webrpc is a schema-driven approach to writing backend servers for the Web. Write your server's api interface in a schema format of RIDL or JSON, and t

Jan 7, 2023
The Swiss Army knife for 802.11, BLE and Ethernet networks reconnaissance and MITM attacks.
The Swiss Army knife for 802.11, BLE and Ethernet networks reconnaissance and MITM attacks.

bettercap is a powerful, easily extensible and portable framework written in Go which aims to offer to security researchers, red teamers and reverse e

Jan 3, 2023
Transfer 10Gbps http traffic over 1Gbps networks :)

httpteleport Teleports 10Gbps http traffic over 1Gbps networks. Built on top of fastrpc. Use cases httpteleport may significantly reduce inter-server

Nov 30, 2022
Netmaker is a tool for creating and managing virtual networks
Netmaker is a tool for creating and managing virtual networks

Netmaker is a tool for creating and managing virtual networks. The goal is to make virtual/overlay/mesh networking easy for non-networking people. It should be like clicking a button. Netmaker consists of a server, an agent, and a UI.

Jan 2, 2023
The easiest, most secure way to use WireGuard and 2FA.

This repository contains all the open source Tailscale client code and the tailscaled daemon and tailscale CLI tool. The tailscaled daemon runs primarily on Linux; it also works to varying degrees on FreeBSD, OpenBSD, Darwin, and Windows.

Jan 8, 2023
Connect your devices into a single private WireGuard®-based mesh network.

Wiretrustee A WireGuard®-based mesh network that connects your devices into a single private network. Why using Wiretrustee? Connect multiple devices

Dec 31, 2022
A Lightweight VPN Built on top of Libp2p for Truly Distributed Networks.
A Lightweight VPN Built on top of Libp2p for Truly Distributed Networks.

Hyprspace A Lightweight VPN Built on top of Libp2p for Truly Distributed Networks. demo.mp4 Table of Contents A Bit of Backstory Use Cases A Digital N

Dec 29, 2022
An userspace SORACOM Arc client powered by wireguard-go

soratun An easy-to-use, userspace SORACOM Arc client powered by wireguard-go. For deploying and scaling Linux servers/Raspberry Pi devices working wit

Jun 2, 2022
Data source provider for Terraform that interacts with the Solana networks

Terraform Solana Provider Registry Page Requirements Terraform >= 0.13.x Go 1.16.x (for building from source) Example Usage Full provider documentatio

Aug 6, 2022
Layer2 version of wireguard with Floyd Warshall implement in go.

Etherguard 中文版README A Full Mesh Layer2 VPN based on wireguard-go OSPF can find best route based on it's cost. But sometimes the lentancy are differen

Dec 29, 2022
Magic util that "bridges" Wireguard with OpenVPN without a TUN/TAP interface

wg-ovpn Magic util that "bridges" Wireguard with OpenVPN without a TUN/TAP interface Warning: really ugly and unstable code! Building Obtain latest so

Sep 27, 2022
Attach services to specified networks automatically

Docker swarm network attacher Description docker-swarm-network-attacher aims to solve the problem of sharing a network between unrelated services. Wit

Nov 11, 2021