diff --git a/p2p/discovery/mdns.go b/p2p/discovery/mdns.go
index 6ab3db1e0a634fc9388abcc56d156db9b654c873..74f2c085be91e72cefbb69791e016204c55da2ee 100644
--- a/p2p/discovery/mdns.go
+++ b/p2p/discovery/mdns.go
@@ -42,21 +42,22 @@ type mdnsService struct {
 	interval time.Duration
 }
 
-func getDialableListenAddr(ph host.Host) (*net.TCPAddr, error) {
+func getDialableListenAddrs(ph host.Host) ([]*net.TCPAddr, error) {
+	var out []*net.TCPAddr
 	for _, addr := range ph.Addrs() {
-		if manet.IsIPLoopback(addr) {
-			continue
-		}
 		na, err := manet.ToNetAddr(addr)
 		if err != nil {
 			continue
 		}
 		tcp, ok := na.(*net.TCPAddr)
 		if ok {
-			return tcp, nil
+			out = append(out, tcp)
 		}
 	}
-	return nil, errors.New("failed to find good external addr from peerhost")
+	if len(out) == 0 {
+		return nil, errors.New("failed to find good external addr from peerhost")
+	}
+	return out, nil
 }
 
 func NewMdnsService(peerhost host.Host, interval time.Duration) (Service, error) {
@@ -67,12 +68,14 @@ func NewMdnsService(peerhost host.Host, interval time.Duration) (Service, error)
 	var ipaddrs []net.IP
 	port := 4001
 
-	addr, err := getDialableListenAddr(peerhost)
+	addrs, err := getDialableListenAddrs(peerhost)
 	if err != nil {
 		log.Warning(err)
 	} else {
-		ipaddrs = []net.IP{addr.IP}
-		port = addr.Port
+		port = addrs[0].Port
+		for _, a := range addrs {
+			ipaddrs = append(ipaddrs, a.IP)
+		}
 	}
 
 	myid := peerhost.ID().Pretty()