fix: dnsresolver (#3440)

Properly transmit the dns name server list parameter to the peer manager
This commit is contained in:
Ivan FB 2025-06-06 15:50:08 +02:00 committed by GitHub
parent 4f181abe0d
commit 5132510bc6
13 changed files with 27 additions and 87 deletions

View File

@ -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]

View File

@ -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),

View File

@ -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))

View File

@ -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,

View File

@ -1,5 +1,5 @@
import chronicles, std/[net, options], results
import ../network_conf
import ../networks_config
logScope:
topics = "waku conf builder websocket"

View File

@ -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())

View File

@ -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

View File

@ -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()

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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