diff --git a/lib/relay/client/methods.go b/lib/relay/client/methods.go index 3376e1d2..6e4f1213 100644 --- a/lib/relay/client/methods.go +++ b/lib/relay/client/methods.go @@ -55,7 +55,7 @@ func GetInvitationFromRelay(uri *url.URL, id syncthingprotocol.DeviceID, certs [ l.Debugln("Received invitation", msg, "via", conn.LocalAddr()) ip := net.IP(msg.Address) if len(ip) == 0 || ip.IsUnspecified() { - msg.Address = conn.RemoteAddr().(*net.TCPAddr).IP[:] + msg.Address = remoteIPBytes(conn) } return msg, nil default: @@ -144,3 +144,11 @@ func configForCerts(certs []tls.Certificate) *tls.Config { }, } } + +func remoteIPBytes(conn net.Conn) []byte { + addr := conn.RemoteAddr().String() + if host, _, err := net.SplitHostPort(addr); err == nil { + addr = host + } + return net.ParseIP(addr)[:] +} diff --git a/lib/relay/client/static.go b/lib/relay/client/static.go index cebc5f68..123a6339 100644 --- a/lib/relay/client/static.go +++ b/lib/relay/client/static.go @@ -122,8 +122,7 @@ func (c *staticClient) Serve() { case protocol.SessionInvitation: ip := net.IP(msg.Address) if len(ip) == 0 || ip.IsUnspecified() { - ip := net.ParseIP(c.conn.RemoteAddr().String()) - msg.Address = ip[:] + msg.Address = remoteIPBytes(c.conn) } c.invitations <- msg