Tor option to override target ip address
This commit is contained in:
parent
35027e52fc
commit
b1fc008433
@ -219,6 +219,7 @@ type torConfig struct {
|
|||||||
DNS string `long:"dns" description:"The DNS server as host:port that Tor will use for SRV queries - NOTE must have TCP resolution enabled"`
|
DNS string `long:"dns" description:"The DNS server as host:port that Tor will use for SRV queries - NOTE must have TCP resolution enabled"`
|
||||||
StreamIsolation bool `long:"streamisolation" description:"Enable Tor stream isolation by randomizing user credentials for each connection."`
|
StreamIsolation bool `long:"streamisolation" description:"Enable Tor stream isolation by randomizing user credentials for each connection."`
|
||||||
Control string `long:"control" description:"The host:port that Tor is listening on for Tor control connections"`
|
Control string `long:"control" description:"The host:port that Tor is listening on for Tor control connections"`
|
||||||
|
TargetIPAddress string `long:"targetipaddress" description:"IP address that Tor should use as the target of the hidden service"`
|
||||||
V2 bool `long:"v2" description:"Automatically set up a v2 onion service to listen for inbound connections"`
|
V2 bool `long:"v2" description:"Automatically set up a v2 onion service to listen for inbound connections"`
|
||||||
V3 bool `long:"v3" description:"Automatically set up a v3 onion service to listen for inbound connections"`
|
V3 bool `long:"v3" description:"Automatically set up a v3 onion service to listen for inbound connections"`
|
||||||
PrivateKeyPath string `long:"privatekeypath" description:"The path to the private key of the onion service being created"`
|
PrivateKeyPath string `long:"privatekeypath" description:"The path to the private key of the onion service being created"`
|
||||||
|
@ -542,7 +542,7 @@ func newServer(listenAddrs []net.Addr, chanDB *channeldb.DB,
|
|||||||
// automatically create an onion service, we'll initiate our Tor
|
// automatically create an onion service, we'll initiate our Tor
|
||||||
// controller and establish a connection to the Tor server.
|
// controller and establish a connection to the Tor server.
|
||||||
if cfg.Tor.Active && (cfg.Tor.V2 || cfg.Tor.V3) {
|
if cfg.Tor.Active && (cfg.Tor.V2 || cfg.Tor.V3) {
|
||||||
s.torController = tor.NewController(cfg.Tor.Control)
|
s.torController = tor.NewController(cfg.Tor.Control, cfg.Tor.TargetIPAddress)
|
||||||
}
|
}
|
||||||
|
|
||||||
chanGraph := chanDB.ChannelGraph()
|
chanGraph := chanDB.ChannelGraph()
|
||||||
|
@ -81,12 +81,17 @@ type Controller struct {
|
|||||||
|
|
||||||
// version is the current version of the Tor server.
|
// version is the current version of the Tor server.
|
||||||
version string
|
version string
|
||||||
|
|
||||||
|
// The IP address which we tell the Tor server to use to connect to the LND node.
|
||||||
|
// This is required when the Tor server runs on another host, otherwise the service
|
||||||
|
// will not be reachable.
|
||||||
|
targetIPAddress string
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewController returns a new Tor controller that will be able to interact with
|
// NewController returns a new Tor controller that will be able to interact with
|
||||||
// a Tor server.
|
// a Tor server.
|
||||||
func NewController(controlAddr string) *Controller {
|
func NewController(controlAddr string, targetIPAddress string) *Controller {
|
||||||
return &Controller{controlAddr: controlAddr}
|
return &Controller{controlAddr: controlAddr, targetIPAddress: targetIPAddress}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start establishes and authenticates the connection between the controller and
|
// Start establishes and authenticates the connection between the controller and
|
||||||
@ -469,13 +474,24 @@ func (c *Controller) AddOnion(cfg AddOnionConfig) (*OnionAddr, error) {
|
|||||||
// port. If no target ports were specified, we'll use the virtual port
|
// port. If no target ports were specified, we'll use the virtual port
|
||||||
// to provide a one-to-one mapping.
|
// to provide a one-to-one mapping.
|
||||||
var portParam string
|
var portParam string
|
||||||
if len(cfg.TargetPorts) == 0 {
|
|
||||||
portParam += fmt.Sprintf("Port=%d,%d ", cfg.VirtualPort,
|
// Helper function which appends the correct Port param depending on
|
||||||
cfg.VirtualPort)
|
// whether the user chose to use a custom target IP address or not.
|
||||||
} else {
|
pushPortParam := func(targetPort int) {
|
||||||
for _, targetPort := range cfg.TargetPorts {
|
if c.targetIPAddress == "" {
|
||||||
portParam += fmt.Sprintf("Port=%d,%d ", cfg.VirtualPort,
|
portParam += fmt.Sprintf("Port=%d,%d ", cfg.VirtualPort,
|
||||||
targetPort)
|
targetPort)
|
||||||
|
} else {
|
||||||
|
portParam += fmt.Sprintf("Port=%d,%s:%d ", cfg.VirtualPort,
|
||||||
|
c.targetIPAddress, targetPort)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(cfg.TargetPorts) == 0 {
|
||||||
|
pushPortParam(cfg.VirtualPort)
|
||||||
|
} else {
|
||||||
|
for _, targetPort := range cfg.TargetPorts {
|
||||||
|
pushPortParam(targetPort)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user