mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-01-02 14:03:06 +00:00
fix: dnsresolver (#3440)
Properly transmit the dns name server list parameter to the peer manager
This commit is contained in:
parent
4f181abe0d
commit
5132510bc6
@ -96,7 +96,6 @@ when isMainModule:
|
||||
wakuConf.restPort = conf.restPort
|
||||
wakuConf.restAllowOrigin = conf.restAllowOrigin
|
||||
|
||||
wakuConf.dnsAddrs = true
|
||||
wakuConf.dnsAddrsNameServers = @[parseIpAddress("8.8.8.8"), parseIpAddress("1.1.1.1")]
|
||||
|
||||
wakuConf.shards = @[conf.shard]
|
||||
|
||||
@ -79,6 +79,7 @@ proc withNetworkConfigurationDetails*(
|
||||
wssEnabled: bool = false,
|
||||
wakuFlags = none(CapabilitiesBitfield),
|
||||
dns4DomainName = none(string),
|
||||
dnsNameServers = @[parseIpAddress("1.1.1.1"), parseIpAddress("1.0.0.1")],
|
||||
): WakuNodeBuilderResult {.
|
||||
deprecated: "use 'builder.withNetworkConfiguration()' instead"
|
||||
.} =
|
||||
@ -94,6 +95,7 @@ proc withNetworkConfigurationDetails*(
|
||||
wssEnabled = wssEnabled,
|
||||
wakuFlags = wakuFlags,
|
||||
dns4DomainName = dns4DomainName,
|
||||
dnsNameServers = dnsNameServers,
|
||||
)
|
||||
builder.withNetworkConfiguration(netConfig)
|
||||
ok()
|
||||
@ -166,6 +168,10 @@ proc build*(builder: WakuNodeBuilder): Result[WakuNode, string] =
|
||||
if builder.netConfig.isNone():
|
||||
return err("network configuration is required")
|
||||
|
||||
let netConfig = builder.netConfig.get()
|
||||
if netConfig.dnsNameServers.len == 0:
|
||||
return err("DNS name servers are required for WakuNode")
|
||||
|
||||
if builder.record.isNone():
|
||||
return err("node record is required")
|
||||
|
||||
@ -196,8 +202,6 @@ proc build*(builder: WakuNodeBuilder): Result[WakuNode, string] =
|
||||
except CatchableError:
|
||||
return err("failed to create switch: " & getCurrentExceptionMsg())
|
||||
|
||||
let netConfig = builder.netConfig.get()
|
||||
|
||||
let peerManager = PeerManager.new(
|
||||
switch = switch,
|
||||
storage = builder.peerStorage.get(nil),
|
||||
|
||||
@ -21,9 +21,6 @@ proc withEnabled*(b: var DnsDiscoveryConfBuilder, enabled: bool) =
|
||||
proc withEnrTreeUrl*(b: var DnsDiscoveryConfBuilder, enrTreeUrl: string) =
|
||||
b.enrTreeUrl = some(enrTreeUrl)
|
||||
|
||||
proc withNameServers*(b: var DnsDiscoveryConfBuilder, nameServers: seq[IpAddress]) =
|
||||
b.nameServers = concat(b.nameServers, nameServers)
|
||||
|
||||
proc build*(b: DnsDiscoveryConfBuilder): Result[Option[DnsDiscoveryConf], string] =
|
||||
if not b.enabled.get(false):
|
||||
return ok(none(DnsDiscoveryConf))
|
||||
|
||||
@ -107,7 +107,6 @@ type WakuConfBuilder* = object
|
||||
extMultiAddrs: seq[string]
|
||||
extMultiAddrsOnly: Option[bool]
|
||||
|
||||
dnsAddrs: Option[bool]
|
||||
dnsAddrsNameServers: seq[IpAddress]
|
||||
|
||||
peerPersistence: Option[bool]
|
||||
@ -193,9 +192,6 @@ proc withRemotePeerExchangeNode*(
|
||||
) =
|
||||
b.remotePeerExchangeNode = some(remotePeerExchangeNode)
|
||||
|
||||
proc withDnsAddrs*(b: var WakuConfBuilder, dnsAddrs: bool) =
|
||||
b.dnsAddrs = some(dnsAddrs)
|
||||
|
||||
proc withPeerPersistence*(b: var WakuConfBuilder, peerPersistence: bool) =
|
||||
b.peerPersistence = some(peerPersistence)
|
||||
|
||||
@ -208,7 +204,7 @@ proc withMaxConnections*(b: var WakuConfBuilder, maxConnections: int) =
|
||||
proc withDnsAddrsNameServers*(
|
||||
b: var WakuConfBuilder, dnsAddrsNameServers: seq[IpAddress]
|
||||
) =
|
||||
b.dnsAddrsNameServers = concat(b.dnsAddrsNameServers, dnsAddrsNameServers)
|
||||
b.dnsAddrsNameServers.insert(dnsAddrsNameServers)
|
||||
|
||||
proc withLogLevel*(b: var WakuConfBuilder, logLevel: logging.LogLevel) =
|
||||
b.logLevel = some(logLevel)
|
||||
@ -541,13 +537,6 @@ proc build*(
|
||||
warn "Whether to only announce external multiaddresses is not specified, defaulting to false"
|
||||
false
|
||||
|
||||
let dnsAddrs =
|
||||
if builder.dnsAddrs.isSome():
|
||||
builder.dnsAddrs.get()
|
||||
else:
|
||||
warn "Whether to resolve DNS multiaddresses was not specified, defaulting to false."
|
||||
false
|
||||
|
||||
let dnsAddrsNameServers =
|
||||
if builder.dnsAddrsNameServers.len != 0:
|
||||
builder.dnsAddrsNameServers
|
||||
@ -627,7 +616,6 @@ proc build*(
|
||||
),
|
||||
portsShift: portsShift,
|
||||
webSocketConf: webSocketConf,
|
||||
dnsAddrs: dnsAddrs,
|
||||
dnsAddrsNameServers: dnsAddrsNameServers,
|
||||
peerPersistence: peerPersistence,
|
||||
peerStoreCapacity: builder.peerStoreCapacity,
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import chronicles, std/[net, options], results
|
||||
import ../network_conf
|
||||
import ../networks_config
|
||||
|
||||
logScope:
|
||||
topics = "waku conf builder websocket"
|
||||
|
||||
@ -245,12 +245,6 @@ type WakuNodeConf* = object
|
||||
.}: bool
|
||||
|
||||
## DNS addrs config
|
||||
dnsAddrs* {.
|
||||
desc: "Enable resolution of `dnsaddr`, `dns4` or `dns6` multiaddrs",
|
||||
defaultValue: true,
|
||||
name: "dns-addrs"
|
||||
.}: bool
|
||||
|
||||
dnsAddrsNameServers* {.
|
||||
desc:
|
||||
"DNS name server IPs to query for DNS multiaddrs resolution. Argument may be repeated.",
|
||||
@ -567,12 +561,6 @@ with the drawback of consuming some more bandwidth.""",
|
||||
name: "dns-discovery-url"
|
||||
.}: string
|
||||
|
||||
dnsDiscoveryNameServers* {.
|
||||
desc: "DNS name server IPs to query. Argument may be repeated.",
|
||||
defaultValue: @[parseIpAddress("1.1.1.1"), parseIpAddress("1.0.0.1")],
|
||||
name: "dns-discovery-name-server"
|
||||
.}: seq[IpAddress]
|
||||
|
||||
## Discovery v5 config
|
||||
discv5Discovery* {.
|
||||
desc: "Enable discovering nodes via Node Discovery v5.",
|
||||
@ -962,7 +950,6 @@ proc toWakuConf*(n: WakuNodeConf): ConfResult[WakuConf] =
|
||||
b.withPeerStoreCapacity(n.peerStoreCapacity.get())
|
||||
|
||||
b.withPeerPersistence(n.peerPersistence)
|
||||
b.withDnsAddrs(n.dnsAddrs)
|
||||
b.withDnsAddrsNameServers(n.dnsAddrsNameServers)
|
||||
b.withDns4DomainName(n.dns4DomainName)
|
||||
b.withCircuitRelayClient(n.isRelayClient)
|
||||
@ -1024,7 +1011,6 @@ proc toWakuConf*(n: WakuNodeConf): ConfResult[WakuConf] =
|
||||
|
||||
b.dnsDiscoveryConf.withEnabled(n.dnsDiscovery)
|
||||
b.dnsDiscoveryConf.withEnrTreeUrl(n.dnsDiscoveryUrl)
|
||||
b.dnsDiscoveryConf.withNameServers(n.dnsDiscoveryNameServers)
|
||||
|
||||
if n.discv5Discovery.isSome():
|
||||
b.discv5Conf.withEnabled(n.discv5Discovery.get())
|
||||
|
||||
@ -12,7 +12,7 @@ import
|
||||
../waku_enr,
|
||||
../waku_core,
|
||||
./waku_conf,
|
||||
./network_conf
|
||||
./networks_config
|
||||
|
||||
proc enrConfiguration*(
|
||||
conf: WakuConf, netConfig: NetConfig
|
||||
@ -139,6 +139,7 @@ proc networkConfiguration*(
|
||||
dns4DomainName = conf.dns4DomainName,
|
||||
discv5UdpPort = discv5UdpPort,
|
||||
wakuFlags = some(wakuFlags),
|
||||
dnsNameServers = dnsAddrsNameServers,
|
||||
)
|
||||
|
||||
return netConfigRes
|
||||
|
||||
@ -1,34 +0,0 @@
|
||||
import std/[net, options, strutils]
|
||||
import libp2p/multiaddress
|
||||
|
||||
type WebSocketSecureConf* {.requiresInit.} = object
|
||||
keyPath*: string
|
||||
certPath*: string
|
||||
|
||||
type WebSocketConf* = object
|
||||
port*: Port
|
||||
secureConf*: Option[WebSocketSecureConf]
|
||||
|
||||
type NetworkConf* = object
|
||||
natStrategy*: string # TODO: make enum
|
||||
p2pTcpPort*: Port
|
||||
dns4DomainName*: Option[string]
|
||||
p2pListenAddress*: IpAddress
|
||||
extMultiAddrs*: seq[MultiAddress]
|
||||
extMultiAddrsOnly*: bool
|
||||
webSocketConf*: Option[WebSocketConf]
|
||||
|
||||
proc validateNoEmptyStrings(networkConf: NetworkConf): Result[void, string] =
|
||||
if networkConf.dns4DomainName.isSome() and
|
||||
isEmptyOrWhiteSpace(networkConf.dns4DomainName.get().string):
|
||||
return err("dns4DomainName is an empty string, set it to none(string) instead")
|
||||
|
||||
if networkConf.webSocketConf.isSome() and
|
||||
networkConf.webSocketConf.get().secureConf.isSome():
|
||||
let secureConf = networkConf.webSocketConf.get().secureConf.get()
|
||||
if isEmptyOrWhiteSpace(secureConf.keyPath):
|
||||
return err("websocket.secureConf.keyPath is an empty string")
|
||||
if isEmptyOrWhiteSpace(secureConf.certPath):
|
||||
return err("websocket.secureConf.certPath is an empty string")
|
||||
|
||||
return ok()
|
||||
@ -1,6 +1,14 @@
|
||||
{.push raises: [].}
|
||||
|
||||
import stint
|
||||
import stint, std/[nativesockets, options]
|
||||
|
||||
type WebSocketSecureConf* {.requiresInit.} = object
|
||||
keyPath*: string
|
||||
certPath*: string
|
||||
|
||||
type WebSocketConf* = object
|
||||
port*: Port
|
||||
secureConf*: Option[WebSocketSecureConf]
|
||||
|
||||
# TODO: Rename this type to match file name
|
||||
|
||||
|
||||
@ -67,17 +67,6 @@ proc initNode(
|
||||
## file. Optionally include persistent peer storage.
|
||||
## No protocols are mounted yet.
|
||||
|
||||
var dnsResolver: DnsResolver
|
||||
if conf.dnsAddrs:
|
||||
# Support for DNS multiaddrs
|
||||
var nameServers: seq[TransportAddress]
|
||||
for ip in conf.dnsAddrsNameServers:
|
||||
nameServers.add(initTAddress(ip, Port(53))) # Assume all servers use port 53
|
||||
|
||||
dnsResolver = DnsResolver.new(nameServers)
|
||||
|
||||
var node: WakuNode
|
||||
|
||||
let pStorage =
|
||||
if peerStore.isNone():
|
||||
nil
|
||||
@ -91,6 +80,9 @@ proc initNode(
|
||||
else:
|
||||
(none(string), none(string))
|
||||
|
||||
let nameResolver =
|
||||
DnsResolver.new(conf.dnsAddrsNameServers.mapIt(initTAddress(it, Port(53))))
|
||||
|
||||
# Build waku node instance
|
||||
var builder = WakuNodeBuilder.init()
|
||||
builder.withRng(rng)
|
||||
@ -102,7 +94,7 @@ proc initNode(
|
||||
maxConnections = some(conf.maxConnections.int),
|
||||
secureKey = secureKey,
|
||||
secureCert = secureCert,
|
||||
nameResolver = dnsResolver,
|
||||
nameResolver = nameResolver,
|
||||
sendSignedPeerRecord = conf.relayPeerExchange,
|
||||
# We send our own signed peer record when peer exchange enabled
|
||||
agentString = some(conf.agentString),
|
||||
@ -132,7 +124,7 @@ proc initNode(
|
||||
builder.withRateLimit(conf.rateLimits)
|
||||
builder.withCircuitRelay(relay)
|
||||
|
||||
node =
|
||||
let node =
|
||||
?builder.build().mapErr(
|
||||
proc(err: string): string =
|
||||
"failed to create waku node instance: " & err
|
||||
|
||||
@ -13,7 +13,7 @@ import
|
||||
../node/waku_metrics,
|
||||
../common/logging,
|
||||
../waku_enr/capabilities,
|
||||
./network_conf
|
||||
./networks_config
|
||||
|
||||
export RlnRelayConf, RlnRelayCreds, RestServerConf, Discv5Conf, MetricsServerConf
|
||||
|
||||
@ -95,7 +95,6 @@ type WakuConf* {.requiresInit.} = ref object
|
||||
webSocketConf*: Option[WebSocketConf]
|
||||
|
||||
portsShift*: uint16
|
||||
dnsAddrs*: bool
|
||||
dnsAddrsNameServers*: seq[IpAddress]
|
||||
networkConf*: NetworkConfig
|
||||
wakuFlags*: CapabilitiesBitfield
|
||||
|
||||
@ -78,7 +78,7 @@ proc init*(
|
||||
discv5UdpPort = none(Port),
|
||||
clusterId: uint16 = 0,
|
||||
wakuFlags = none(CapabilitiesBitfield),
|
||||
dnsNameServers = newSeq[IpAddress](),
|
||||
dnsNameServers = @[parseIpAddress("1.1.1.1"), parseIpAddress("1.0.0.1")],
|
||||
): NetConfigResult =
|
||||
## Initialize and validate waku node network configuration
|
||||
|
||||
|
||||
@ -1048,7 +1048,7 @@ proc new*(
|
||||
maxFailedAttempts = MaxFailedAttempts,
|
||||
colocationLimit = DefaultColocationLimit,
|
||||
shardedPeerManagement = false,
|
||||
dnsNameServers = newSeq[IpAddress](),
|
||||
dnsNameServers = @[parseIpAddress("1.1.1.1"), parseIpAddress("1.0.0.1")],
|
||||
): PeerManager {.gcsafe.} =
|
||||
let capacity = switch.peerStore.capacity
|
||||
let maxConnections = switch.connManager.inSema.size
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user