Add relay node tool (#825)

* Add relay node

* gosec

* add docker image config

* gazelle

* punctuation
This commit is contained in:
Preston Van Loon
2018-11-19 05:54:35 -05:00
committed by GitHub
parent be0284dc4c
commit 05adae57c5
2 changed files with 129 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
load("@io_bazel_rules_docker//go:image.bzl", "go_image")
load("@io_bazel_rules_docker//container:container.bzl", "container_push")
go_library(
name = "go_default_library",
srcs = ["relaynode.go"],
importpath = "github.com/prysmaticlabs/prysm/tools/relaynode",
visibility = ["//visibility:private"],
deps = [
"@com_github_ipfs_go_log//:go_default_library",
"@com_github_libp2p_go_libp2p//:go_default_library",
"@com_github_libp2p_go_libp2p_circuit//:go_default_library",
"@com_github_libp2p_go_libp2p_crypto//:go_default_library",
"@com_github_multiformats_go_multiaddr//:go_default_library",
],
)
go_image(
name = "image",
srcs = ["relaynode.go"],
importpath = "github.com/prysmaticlabs/prysm/tools/relaynode",
visibility = ["//visibility:private"],
static = "on",
tags = ["manual"],
goarch = "amd64",
goos = "linux",
deps = [
"@com_github_ipfs_go_log//:go_default_library",
"@com_github_libp2p_go_libp2p//:go_default_library",
"@com_github_libp2p_go_libp2p_circuit//:go_default_library",
"@com_github_libp2p_go_libp2p_crypto//:go_default_library",
"@com_github_multiformats_go_multiaddr//:go_default_library",
],
)
container_push(
name = "push_image",
format = "Docker",
image = ":image",
registry = "gcr.io",
repository = "prysmaticlabs/prysm/relaynode",
tag = "latest",
tags = ["manual"],
visibility = ["//visibility:private"],
)
go_binary(
name = "relaynode",
embed = [":go_default_library"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,77 @@
/**
* Relay node
*
* A simple libp2p relay node peers to connect inbound traffic behind a NAT or
* other network restriction.
*
* Usage: Run relaynode --help for flag options.
*/
package main
import (
"context"
"flag"
"fmt"
logging "github.com/ipfs/go-log"
libp2p "github.com/libp2p/go-libp2p"
circuit "github.com/libp2p/go-libp2p-circuit"
crypto "github.com/libp2p/go-libp2p-crypto"
multiaddr "github.com/multiformats/go-multiaddr"
)
var (
privateKey = flag.String("private", "", "Private key to use for peer ID")
port = flag.Int("port", 4000, "Port to listen for connections")
debug = flag.Bool("debug", false, "Enable debug logging")
log = logging.Logger("prysm-relaynode")
)
func main() {
flag.Parse()
if *debug {
logging.SetDebugLogging()
}
ctx := context.Background()
log.Start(ctx, "main")
defer log.Finish(ctx)
srcMAddr, err := multiaddr.NewMultiaddr(fmt.Sprintf("/ip4/0.0.0.0/tcp/%d", *port))
if err != nil {
log.Fatalf("Unable to construct multiaddr %v", err)
}
opts := []libp2p.Option{
libp2p.EnableRelay(circuit.OptHop),
libp2p.ListenAddrs(srcMAddr),
}
if *privateKey != "" {
b, err := crypto.ConfigDecodeKey(*privateKey)
if err != nil {
log.Fatalf("Failed to decode private key %v", err)
}
pk, err := crypto.UnmarshalPrivateKey(b)
if err != nil {
log.Fatalf("Failed to unmarshal private key %v", err)
}
opts = append(opts, libp2p.Identity(pk))
} else {
log.Warning("No private key provided. Using random key.")
}
h, err := libp2p.New(
ctx,
opts...,
)
if err != nil {
log.Fatalf("Failed to create host %v", err)
}
fmt.Printf("Relay available: /ip4/0.0.0.0/tcp/%v/p2p/%s\n", *port, h.ID().Pretty())
select {}
}