Skip to content

Commit

Permalink
fix: prevent IP 0.0.0.0 from being published and update peers with em…
Browse files Browse the repository at this point in the history
…pty ENR data (#1982)
  • Loading branch information
gabrielmer authored Sep 11, 2023
1 parent 645b034 commit 47ae19c
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 9 deletions.
3 changes: 2 additions & 1 deletion tests/all_tests_waku.nim
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import
./waku_core/test_namespaced_topics,
./waku_core/test_time,
./waku_core/test_message_digest,
./waku_core/test_peers
./waku_core/test_peers,
./waku_core/test_published_address


# Waku archive test suite
Expand Down
27 changes: 27 additions & 0 deletions tests/waku_core/test_published_address.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{.used.}

import
stew/shims/net as stewNet,
std/strutils,
testutils/unittests
import
../testlib/wakucore,
../testlib/wakunode

suite "Waku Core - Published Address":

test "Test IP 0.0.0.0":
let
node = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init(
"0.0.0.0"),Port(0))

check:
($node.announcedAddresses).contains("127.0.0.1")

test "Test custom IP":
let
node = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init(
"8.8.8.8"),Port(0))

check:
($node.announcedAddresses).contains("8.8.8.8")
8 changes: 4 additions & 4 deletions tests/wakunode_jsonrpc/test_jsonrpc_admin.nim
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@ procSuite "Waku v2 JSON-RPC API - Admin":
asyncTest "connect to ad-hoc peers":
# Create a couple of nodes
let
node1 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(60600))
node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(60602))
node1 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("127.0.0.1"), Port(60600))
node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("127.0.0.1"), Port(60602))
peerInfo2 = node2.switch.peerInfo
node3 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(60604))
node3 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("127.0.0.1"), Port(60604))
peerInfo3 = node3.switch.peerInfo

await allFutures([node1.start(), node2.start(), node3.start()])
Expand Down Expand Up @@ -90,7 +90,7 @@ procSuite "Waku v2 JSON-RPC API - Admin":

asyncTest "get managed peer information":
# Create 3 nodes and start them with relay
let nodes = toSeq(0..<3).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(60220+it*2)))
let nodes = toSeq(0..<3).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("127.0.0.1"), Port(60220+it*2)))
await allFutures(nodes.mapIt(it.start()))
await allFutures(nodes.mapIt(it.mountRelay()))

Expand Down
9 changes: 7 additions & 2 deletions waku/node/config.nim
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ else:
{.push raises: [].}

import
std/[options, sequtils],
std/[options, sequtils, strutils],
stew/results,
stew/shims/net,
libp2p/multiaddress
Expand Down Expand Up @@ -53,6 +53,11 @@ template wsFlag(wssEnabled: bool): MultiAddress =
else: MultiAddress.init("/ws").tryGet()


proc formatListenAddress(inputMultiAdd: MultiAddress): MultiAddress =
let inputStr = $inputMultiAdd
# If MultiAddress contains "0.0.0.0", replace it for "127.0.0.1"
return MultiAddress.init(inputStr.replace("0.0.0.0", "127.0.0.1")).get()

proc init*(T: type NetConfig,
bindIp: ValidIpAddress,
bindPort: Port,
Expand Down Expand Up @@ -111,7 +116,7 @@ proc init*(T: type NetConfig,
if hostExtAddress.isSome():
announcedAddresses.add(hostExtAddress.get())
else:
announcedAddresses.add(hostAddress) # We always have at least a bind address for the host
announcedAddresses.add(formatListenAddress(hostAddress)) # We always have at least a bind address for the host

# External multiaddrs that the operator may have configured
if extMultiAddrs.len > 0:
Expand Down
5 changes: 3 additions & 2 deletions waku/node/peer_manager/peer_manager.nim
Original file line number Diff line number Diff line change
Expand Up @@ -121,8 +121,9 @@ proc addPeer*(pm: PeerManager, remotePeerInfo: RemotePeerInfo, origin = UnknownO
discard remotePeerInfo.peerId.extractPublicKey(publicKey)

if pm.peerStore[AddressBook][remotePeerInfo.peerId] == remotePeerInfo.addrs and
pm.peerStore[KeyBook][remotePeerInfo.peerId] == publicKey:
# Peer already managed
pm.peerStore[KeyBook][remotePeerInfo.peerId] == publicKey and
pm.peerStore[ENRBook][remotePeerInfo.peerId].raw.len > 0:
# Peer already managed and ENR info is already saved
return

trace "Adding peer to manager", peerId = remotePeerInfo.peerId, addresses = remotePeerInfo.addrs
Expand Down

0 comments on commit 47ae19c

Please sign in to comment.