From 1180b6fa1ec07b9c8ac5e613cf611bb529c68ca2 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Tue, 9 Jun 2020 15:24:13 -0700 Subject: [PATCH] fix(nat): use the right addresses when nat port mapping We switched `listenAddrs` from the _interface_ addresses to the raw addresses we were listening on. Unfortunately, we needed the resolved addresses later in the function when resolving port mappings. --- p2p/host/basic/basic_host.go | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/p2p/host/basic/basic_host.go b/p2p/host/basic/basic_host.go index 545191bfef..cde370d43d 100644 --- a/p2p/host/basic/basic_host.go +++ b/p2p/host/basic/basic_host.go @@ -752,22 +752,24 @@ func (h *BasicHost) AllAddrs() []ma.Multiaddr { localIPv6Addr := h.localIPv6Addr h.lipMu.RUnlock() - var finalAddrs []ma.Multiaddr + ifaceAddrs := []ma.Multiaddr{manet.IP4Loopback, manet.IP6Loopback} + if localIPv4Addr != nil { + ifaceAddrs = append(ifaceAddrs, localIPv4Addr) + } + if localIPv6Addr != nil { + ifaceAddrs = append(ifaceAddrs, localIPv6Addr) + } + + // Iterate over all _unresolved_ listen addresses, resolving our primary + // interface only to avoid advertising too many addresses. listenAddrs := h.Network().ListenAddresses() + var finalAddrs []ma.Multiaddr for _, addr := range listenAddrs { if !manet.IsIPUnspecified(addr) { finalAddrs = append(finalAddrs, addr) continue } - ifaceAddrs := []ma.Multiaddr{manet.IP4Loopback, manet.IP6Loopback} - if localIPv4Addr != nil { - ifaceAddrs = append(ifaceAddrs, localIPv4Addr) - } - if localIPv6Addr != nil { - ifaceAddrs = append(ifaceAddrs, localIPv6Addr) - } - resolved, err := addrutil.ResolveUnspecifiedAddress(addr, ifaceAddrs) if err == nil { for _, r := range resolved { @@ -848,8 +850,9 @@ func (h *BasicHost) AllAddrs() []ma.Multiaddr { continue } - if !ip.IsGlobalUnicast() { - // We only map global unicast ports. + if !ip.IsGlobalUnicast() && !ip.IsUnspecified() { + // We only map global unicast & unspecified addresses ports. + // Not broadcast, multicast, etc. continue }