diff --git a/packages/gossip/transport/handshake.go b/packages/gossip/transport/handshake.go
index e5e928c4e2ca079fbc6dbc61cd82e43f8c27bce1..2be73aaba04ad1facaceb1e178cc60dd1c382f45 100644
--- a/packages/gossip/transport/handshake.go
+++ b/packages/gossip/transport/handshake.go
@@ -56,7 +56,7 @@ func (t *TCP) validateHandshakeRequest(reqData []byte, fromAddr string) bool {
 		)
 		return false
 	}
-	if m.GetTo() != t.LocalAddr().String() {
+	if m.GetTo() != t.pubIP {
 		t.log.Debugw("invalid handshake",
 			"to", m.GetTo(),
 		)
diff --git a/packages/gossip/transport/transport.go b/packages/gossip/transport/transport.go
index a948dd231688822003f91ef377a3b49b5c00c7a8..83fd6eddc2ba39f54c2f58915c0d0ea281088e89 100644
--- a/packages/gossip/transport/transport.go
+++ b/packages/gossip/transport/transport.go
@@ -41,6 +41,7 @@ const (
 // TCP establishes verified incoming and outgoing TCP connections to other peers.
 type TCP struct {
 	local    *peer.Local
+	pubIP    string
 	listener *net.TCPListener
 	log      *zap.SugaredLogger
 
@@ -85,6 +86,8 @@ func Listen(local *peer.Local, log *zap.SugaredLogger) (*TCP, error) {
 		return nil, ErrNoGossip
 	}
 
+	t.pubIP = gossipAddr.String()
+
 	host, port, _ := net.SplitHostPort(gossipAddr.String())
 	if host != "127.0.0.1" {
 		host = "0.0.0.0"
@@ -300,7 +303,10 @@ func (t *TCP) listenLoop() {
 }
 
 func (t *TCP) doHandshake(key peer.PublicKey, remoteAddr string, conn net.Conn) error {
-	reqData, err := newHandshakeRequest(conn.LocalAddr().String(), remoteAddr)
+	_, connPort, _ := net.SplitHostPort(conn.LocalAddr().String())
+	from, _, _ := net.SplitHostPort(t.pubIP)
+
+	reqData, err := newHandshakeRequest(from+":"+connPort, remoteAddr)
 	if err != nil {
 		return err
 	}