Skip to content

Commit

Permalink
no dns resolution on back, connect to tor nodes from front
Browse files Browse the repository at this point in the history
  • Loading branch information
pm47 committed Mar 15, 2022
1 parent 7b5cefa commit b03d9d1
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 16 deletions.
30 changes: 17 additions & 13 deletions eclair-core/src/main/scala/fr/acinq/eclair/NodeParams.scala
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,22 @@ object NodeParams extends Logging {

def chainFromHash(chainHash: ByteVector32): String = chain2Hash.map(_.swap).getOrElse(chainHash, throw new RuntimeException(s"invalid chainHash '$chainHash'"))

def parseSocks5ProxyParams(config: Config): Option[Socks5ProxyParams] = {
if (config.getBoolean("socks5.enabled")) {
Some(Socks5ProxyParams(
address = new InetSocketAddress(config.getString("socks5.host"), config.getInt("socks5.port")),
credentials_opt = None,
randomizeCredentials = config.getBoolean("socks5.randomize-credentials"),
useForIPv4 = config.getBoolean("socks5.use-for-ipv4"),
useForIPv6 = config.getBoolean("socks5.use-for-ipv6"),
useForTor = config.getBoolean("socks5.use-for-tor"),
useForWatchdogs = config.getBoolean("socks5.use-for-watchdogs"),
))
} else {
None
}
}

def makeNodeParams(config: Config, instanceId: UUID, nodeKeyManager: NodeKeyManager, channelKeyManager: ChannelKeyManager,
torAddress_opt: Option[NodeAddress], database: Databases, blockHeight: AtomicLong, feeEstimator: FeeEstimator,
pluginParams: Seq[PluginParams] = Nil): NodeParams = {
Expand Down Expand Up @@ -302,19 +318,7 @@ object NodeParams extends Logging {

val syncWhitelist: Set[PublicKey] = config.getStringList("sync-whitelist").asScala.map(s => PublicKey(ByteVector.fromValidHex(s))).toSet

val socksProxy_opt = if (config.getBoolean("socks5.enabled")) {
Some(Socks5ProxyParams(
address = new InetSocketAddress(config.getString("socks5.host"), config.getInt("socks5.port")),
credentials_opt = None,
randomizeCredentials = config.getBoolean("socks5.randomize-credentials"),
useForIPv4 = config.getBoolean("socks5.use-for-ipv4"),
useForIPv6 = config.getBoolean("socks5.use-for-ipv6"),
useForTor = config.getBoolean("socks5.use-for-tor"),
useForWatchdogs = config.getBoolean("socks5.use-for-watchdogs"),
))
} else {
None
}
val socksProxy_opt = parseSocks5ProxyParams(config)

val publicTorAddress_opt = if (config.getBoolean("tor.publish-onion-address")) torAddress_opt else None

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ class ReconnectionTask(nodeParams: NodeParams, remoteNodeId: PublicKey) extends
private def connect(address: InetSocketAddress, origin: ActorRef, isPersistent: Boolean): Unit = {
log.info(s"connecting to $address")
val req = ClientSpawner.ConnectionRequest(address, remoteNodeId, origin, isPersistent)
if (context.system.hasExtension(Cluster) && !address.getHostName.endsWith("onion")) {
if (context.system.hasExtension(Cluster)) {
mediator ! Send(path = "/user/client-spawner", msg = req, localAffinity = false)
} else {
context.system.eventStream.publish(req)
Expand Down Expand Up @@ -218,7 +218,7 @@ object ReconnectionTask {
selectNodeAddress(nodeParams, nodeAddresses).map(_.socketAddress)
}

def hostAndPort2InetSocketAddress(hostAndPort: HostAndPort): InetSocketAddress = new InetSocketAddress(hostAndPort.getHost, hostAndPort.getPort)
def hostAndPort2InetSocketAddress(hostAndPort: HostAndPort): InetSocketAddress = NodeAddress.fromParts(hostAndPort.getHost, hostAndPort.getPort).get.socketAddress

/**
* This helps prevent peers reconnection loops due to synchronization of reconnection attempts.
Expand Down
4 changes: 3 additions & 1 deletion eclair-front/src/main/scala/fr/acinq/eclair/FrontSetup.scala
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,8 @@ class FrontSetup(datadir: File)(implicit system: ActorSystem) extends Logging {
config.getString("server.binding-ip"),
config.getInt("server.port"))

val socks5ProxyParams_opt = NodeParams.parseSocks5ProxyParams(config)

def bootstrap: Future[Unit] = {

val frontJoinedCluster = Promise[Done]()
Expand Down Expand Up @@ -112,7 +114,7 @@ class FrontSetup(datadir: File)(implicit system: ActorSystem) extends Logging {
frontRouter = system.actorOf(SimpleSupervisor.props(FrontRouter.props(routerConf, remoteRouter, Some(frontRouterInitialized)), "front-router", SupervisorStrategy.Resume))
_ <- frontRouterInitialized.future

clientSpawner = system.actorOf(Props(new ClientSpawner(keyPair, None, peerConnectionConf, remoteSwitchboard, frontRouter)), name = "client-spawner")
clientSpawner = system.actorOf(Props(new ClientSpawner(keyPair, socks5ProxyParams_opt, peerConnectionConf, remoteSwitchboard, frontRouter)), name = "client-spawner")

server = system.actorOf(SimpleSupervisor.props(Server.props(keyPair, peerConnectionConf, remoteSwitchboard, frontRouter, serverBindingAddress, Some(tcpBound)), "server", SupervisorStrategy.Restart))
} yield ()
Expand Down

0 comments on commit b03d9d1

Please sign in to comment.