go-ethereum/p2p
Csaba Kiraly a7f24c26c0
p2p/nat: fix UPnP port reset (#31566)
Make UPnP more robust

- Once a random port was mapped, we try to stick to it even if a UPnP
refresh fails. Previously we were immediately moving back to try the
default port, leading to frequent ENR changes.

- We were deleting port mappings before refresh as a possible
workaround. This created issues in some UPnP servers. The UPnP (and PMP)
specification is explicit about the refresh requirements, and delete is
clearly not needed (see
https://github.com/ethereum/go-ethereum/pull/30265#issuecomment-2766987859).
From now on we only delete when closing.

- We were trying to add port mappings only once, and then moved on to
random ports. Now we insist a bit more, so that a simple failed request
won't lead to ENR changes.

Fixes https://github.com/ethereum/go-ethereum/issues/31418

---------

Signed-off-by: Csaba Kiraly <csaba.kiraly@gmail.com>
Co-authored-by: Felix Lange <fjl@twurst.com>
2025-04-09 11:28:29 +02:00
..
discover p2p/discover: pass node instead of node ID to TALKREQ handler (#31075) 2025-04-02 14:56:21 +02:00
dnsdisc eth: report error from setupDiscovery at startup (#31233) 2025-02-23 17:38:32 +01:00
enode p2p: DNS resolution for static nodes (#30822) 2024-12-13 12:46:12 +01:00
enr p2p/enode: add quic ENR entry (#30283) 2024-09-13 23:47:18 +02:00
msgrate log: remove lazy, remove unused interfaces, unexport methods (#28622) 2023-12-05 11:54:44 +01:00
nat p2p/nat: fix UPnP port reset (#31566) 2025-04-09 11:28:29 +02:00
netutil all: drop x/exp direct dependency (#30558) 2025-02-27 15:53:52 +01:00
pipes all: update license comments and AUTHORS (#31133) 2025-02-05 23:01:17 +01:00
rlpx p2p/simulations: remove packages (#30250) 2024-08-12 10:36:48 +02:00
tracker metrics, cmd/geth: change init-process of metrics (#30814) 2024-12-10 13:27:29 +01:00
config.go p2p: fix marshaling of NAT in TOML (#31192) 2025-02-17 09:47:12 +01:00
config_toml.go p2p: support configuring NAT in TOML file (#31041) 2025-01-22 09:29:34 +01:00
dial.go p2p: DNS resolution for static nodes (#30822) 2024-12-13 12:46:12 +01:00
dial_test.go p2p: DNS resolution for static nodes (#30822) 2024-12-13 12:46:12 +01:00
message.go p2p: use atomic types (#27764) 2023-08-01 23:20:52 +02:00
message_test.go p2p: move rlpx into separate package (#21464) 2020-09-22 10:17:39 +02:00
metrics.go metrics, cmd/geth: change init-process of metrics (#30814) 2024-12-10 13:27:29 +01:00
peer.go p2p: fix DiscReason encoding/decoding (#30855) 2024-12-12 12:33:42 +01:00
peer_error.go p2p: fix DiscReason encoding/decoding (#30855) 2024-12-12 12:33:42 +01:00
peer_test.go p2p: DNS resolution for static nodes (#30822) 2024-12-13 12:46:12 +01:00
protocol.go all: use cmp.Compare (#30958) 2025-01-02 14:06:47 +01:00
server.go p2p: support configuring NAT in TOML file (#31041) 2025-01-22 09:29:34 +01:00
server_nat.go p2p/nat: fix UPnP port reset (#31566) 2025-04-09 11:28:29 +02:00
server_nat_test.go p2p: fix flaky test TestServerPortMapping (#30241) 2024-07-30 07:31:27 -06:00
server_test.go cmd/bootnode, p2p: support for alternate mapped ports (#26359) 2023-07-14 14:58:27 +02:00
transport.go p2p: fix DiscReason encoding/decoding (#30855) 2024-12-12 12:33:42 +01:00
transport_test.go p2p: fix DiscReason encoding/decoding (#30855) 2024-12-12 12:33:42 +01:00
util.go all: assign zero after resize in implementations of heap.Interface (#26296) 2022-12-05 13:49:54 +01:00
util_test.go p2p: new dial scheduler (#20592) 2020-02-13 11:10:03 +01:00