From c9afa9f5ef7b8567bb086624aca90fb00b9cc26b Mon Sep 17 00:00:00 2001 From: Steve Fan <29133953+stevefan1999-personal@users.noreply.github.com> Date: Mon, 27 Jul 2020 21:02:11 +0800 Subject: [PATCH] add initial advertise(Addr|Port) support (cherry picked from commit 2a0b4f335eb54caa19ad908cdc441d73b57d68ca) --- cluster/cluster.go | 5 +++-- config.go | 5 +++++ main.go | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/cluster/cluster.go b/cluster/cluster.go index c5e1b2f..be6bbd1 100644 --- a/cluster/cluster.go +++ b/cluster/cluster.go @@ -31,7 +31,7 @@ type Cluster struct { // New is used to create a new Cluster instance // The returned instance is ready to be updated with the local node settings then joined -func New(name string, init bool, clusterKey []byte, bindAddr string, bindPort int, useIPAsName bool) (*Cluster, error) { +func New(name string, init bool, clusterKey []byte, bindAddr string, bindPort int, advertiseAddr string, advertisePort int, useIPAsName bool) (*Cluster, error) { state := &state{} if !init { loadState(state, name) @@ -47,7 +47,8 @@ func New(name string, init bool, clusterKey []byte, bindAddr string, bindPort in mlConfig.SecretKey = clusterKey mlConfig.BindAddr = bindAddr mlConfig.BindPort = bindPort - mlConfig.AdvertisePort = bindPort + mlConfig.AdvertiseAddr = advertiseAddr + mlConfig.AdvertisePort = advertisePort if useIPAsName && bindAddr != "0.0.0.0" { mlConfig.Name = bindAddr } diff --git a/config.go b/config.go index 34528c3..2c14489 100644 --- a/config.go +++ b/config.go @@ -17,6 +17,7 @@ type config struct { Init bool `desc:"whether to explicitly (re)initialize the cluster; any known state from previous runs will be forgotten"` BindAddr string `id:"bind-addr" desc:"IP address to bind to for cluster membership traffic (cannot be used with --bind-iface)"` BindIface string `id:"bind-iface" desc:"Interface to bind to for cluster membership traffic (cannot be used with --bind-addr)"` + AdvertiseAddr string `id:"advertise-addr" desc:"IP address to advertise to other nodes for NAT traversal"` ClusterPort int `id:"cluster-port" desc:"port used for membership gossip traffic (both TCP and UDP); must be the same across cluster" default:"7946"` WireguardPort int `id:"wireguard-port" desc:"port used for wireguard traffic (UDP); must be the same across cluster" default:"51820"` BaseMtu int `id:"mtu" desc:"MTU of the underlying network, taking intermediary hops into account" default:"1500"` @@ -80,6 +81,10 @@ func loadConfig() (*config, error) { } } + if config.AdvertiseAddr == "" { + config.AdvertiseAddr = config.BindAddr + } + return &config, nil } diff --git a/main.go b/main.go index 28c8fd3..86ddb41 100644 --- a/main.go +++ b/main.go @@ -35,7 +35,7 @@ func main() { logrus.SetLevel(logLevel) // Create the wireguard and cluster configuration - cluster, err := cluster.New(config.Interface, config.Init, config.ClusterKey, config.BindAddr, config.ClusterPort, config.UseIPAsName) + cluster, err := cluster.New(config.Interface, config.Init, config.ClusterKey, config.BindAddr, config.ClusterPort, config.AdvertiseAddr, config.ClusterPort, config.UseIPAsName) if err != nil { logrus.WithError(err).Fatal("could not create cluster") }