Skip to content

Commit

Permalink
Merge pull request #966 from libp2p/fix/nat-port-mapping
Browse files Browse the repository at this point in the history
fix(nat): use the right addresses when nat port mapping
  • Loading branch information
aschmahmann authored Jun 9, 2020
2 parents f90bff5 + 1180b6f commit 14f4ff5
Showing 1 changed file with 14 additions and 11 deletions.
25 changes: 14 additions & 11 deletions p2p/host/basic/basic_host.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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
}

Expand Down

0 comments on commit 14f4ff5

Please sign in to comment.