diff --git a/config/flags_node.go b/config/flags_node.go index 533ef18ecc..6eee2a7cf4 100644 --- a/config/flags_node.go +++ b/config/flags_node.go @@ -83,6 +83,12 @@ var ( Usage: "IP address to bind provided services to", Value: "0.0.0.0", } + // FlagProxyBindAddress IP address to bind proxy listener to in proxy mode. + FlagProxyBindAddress = cli.StringFlag{ + Name: "proxy.bind.address", + Usage: "IP address to bind proxy listener to in proxy mode", + Value: "0.0.0.0", + } // FlagFeedbackURL URL of Feedback API. FlagFeedbackURL = cli.StringFlag{ Name: "feedback.url", @@ -322,6 +328,7 @@ func RegisterFlagsNode(flags *[]cli.Flag) error { *flags = append(*flags, &FlagBindAddress, + &FlagProxyBindAddress, &FlagDiscoveryType, &FlagDiscoveryPingInterval, &FlagDiscoveryFetchInterval, @@ -385,6 +392,7 @@ func ParseFlagsNode(ctx *cli.Context) { ParseFlagsBlockchainNetwork(ctx) Current.ParseStringFlag(ctx, FlagBindAddress) + Current.ParseStringFlag(ctx, FlagProxyBindAddress) Current.ParseStringSliceFlag(ctx, FlagDiscoveryType) Current.ParseDurationFlag(ctx, FlagDiscoveryPingInterval) Current.ParseDurationFlag(ctx, FlagDiscoveryFetchInterval) @@ -423,7 +431,7 @@ func ParseFlagsNode(ctx *cli.Context) { Current.ParseDurationFlag(ctx, FlagDNSResolutionHeadstart) Current.ParseIntFlag(ctx, FlagWireguardMTU) - ValidateAddressFlags(FlagTequilapiAddress) + ValidateAddressFlags(FlagTequilapiAddress, FlagProxyBindAddress) } // ValidateAddressFlags validates given address flags for public exposure diff --git a/services/wireguard/endpoint/proxyclient/client.go b/services/wireguard/endpoint/proxyclient/client.go index 28854d27b8..96a0d8441c 100644 --- a/services/wireguard/endpoint/proxyclient/client.go +++ b/services/wireguard/endpoint/proxyclient/client.go @@ -31,6 +31,7 @@ import ( "golang.zx2c4.com/wireguard/conn" "golang.zx2c4.com/wireguard/device" + "github.com/mysteriumnetwork/node/config" "github.com/mysteriumnetwork/node/services/wireguard/endpoint/netstack" "github.com/mysteriumnetwork/node/services/wireguard/endpoint/userspace" "github.com/mysteriumnetwork/node/services/wireguard/wgcfg" @@ -104,7 +105,7 @@ func (c *client) PeerStats(iface string) (wgcfg.Stats, error) { } stats, statErr := userspace.ParseDevicePeerStats(deviceState) - if err != nil { + if statErr != nil { err = statErr log.Warn().Err(err).Msg("Failed to parse device stats, will try again") } else { @@ -135,8 +136,13 @@ func (c *client) Proxy(tnet *netstack.Net, proxyPort int) error { c.mu.Lock() defer c.mu.Unlock() + bind := fmt.Sprintf(":%d", proxyPort) + if addr := config.GetString(config.FlagProxyBindAddress); addr != "" { + bind = addr + bind + } + server := http.Server{ - Addr: fmt.Sprintf(":%d", proxyPort), + Addr: bind, Handler: newProxyHandler(60*time.Second, tnet), ReadTimeout: 0, ReadHeaderTimeout: 0, @@ -144,7 +150,7 @@ func (c *client) Proxy(tnet *netstack.Net, proxyPort int) error { IdleTimeout: 0, } - log.Info().Msgf("Starting proxy server at :%d ...", proxyPort) + log.Info().Msgf("Starting proxy server at %s ...", bind) c.proxyClose = func() error { ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) defer cancel()