From 66a150297a803d8ed85381a3b53397c80358100f Mon Sep 17 00:00:00 2001 From: Alex Akselrod Date: Wed, 16 Jan 2019 22:11:27 -0700 Subject: [PATCH] config: default to listening for p2p on localhost when tor enabled When Tor is enabled, this change allows manual hidden service configuration by defaulting to listening for p2p connections on the loopback address. It also allows overriding this manually for situations where the Tor daemon is running on another machine, such as when using Whonix or OnionPi-like systems. --- config.go | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/config.go b/config.go index 2441f1104..78e7825d0 100644 --- a/config.go +++ b/config.go @@ -502,12 +502,6 @@ func loadConfig() (*config, error) { case cfg.DisableListen && (cfg.Tor.V2 || cfg.Tor.V3): return nil, errors.New("listening must be enabled when " + "enabling inbound connections over Tor") - case cfg.Tor.Active && (!cfg.Tor.V2 && !cfg.Tor.V3): - // If an onion service version wasn't selected, we'll assume the - // user is only interested in outbound connections over Tor. - // Therefore, we'll disable listening in order to avoid - // inadvertent leaks. - cfg.DisableListen = true } if cfg.Tor.PrivateKeyPath == "" { @@ -866,9 +860,14 @@ func loadConfig() (*config, error) { // Listen on the default interface/port if no listeners were specified. // An empty address string means default interface/address, which on - // most unix systems is the same as 0.0.0.0. + // most unix systems is the same as 0.0.0.0. If Tor is active, we + // default to only listening on localhost for hidden service + // connections. if len(cfg.RawListeners) == 0 { addr := fmt.Sprintf(":%d", defaultPeerPort) + if cfg.Tor.Active { + addr = fmt.Sprintf("localhost:%d", defaultPeerPort) + } cfg.RawListeners = append(cfg.RawListeners, addr) } @@ -948,20 +947,6 @@ func loadConfig() (*config, error) { } } - // Ensure that we are only listening on localhost if Tor inbound support - // is enabled. - if cfg.Tor.V2 || cfg.Tor.V3 { - for _, addr := range cfg.Listeners { - if lncfg.IsLoopback(addr.String()) { - continue - } - - return nil, errors.New("lnd must *only* be listening " + - "on localhost when running with Tor inbound " + - "support enabled") - } - } - // Ensure that the specified minimum backoff is below or equal to the // maximum backoff. if cfg.MinBackoff > cfg.MaxBackoff {