From 49018a4a8e0e23b9a05eb9e04b6234aeaa2dd7b6 Mon Sep 17 00:00:00 2001 From: Zoltan Papp Date: Wed, 26 Apr 2023 11:17:19 +0200 Subject: [PATCH] Add debug information and extra sleep time --- client/internal/peer/conn.go | 23 ++++++++++++++--------- iface/bind/bind.go | 5 +++++ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/client/internal/peer/conn.go b/client/internal/peer/conn.go index 8c23bee85..a0aade6ff 100644 --- a/client/internal/peer/conn.go +++ b/client/internal/peer/conn.go @@ -459,25 +459,30 @@ func (conn *Conn) getProxyWithMessageExchange(pair *ice.CandidatePair, remoteWgP // We decided to ignore the proxy decision when using Bind. Instead, we always punch remote WireGuard port to open a // hole in the firewall for that remote port to avoid cases when old clients assumes direct mode. mux := conn.config.UDPMuxSrflx.(*bind.UniversalUDPMuxDefault) - err := punchRemote(pair, remoteWgPort, mux) - if err != nil { - log.Warnf("failed to punch remote WireGuard port") - } + go func() { + err := punchRemote(pair, remoteWgPort, mux) + if err != nil { + log.Warnf("failed to punch remote WireGuard port: %s", err) + } + }() return proxy.NewNoProxy(conn.config.ProxyConfig) } func punchRemote(pair *ice.CandidatePair, remoteWgPort int, muxDefault *bind.UniversalUDPMuxDefault) error { - addr, err := net.ResolveUDPAddr("udp", pair.Remote.Address()) + addr, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", pair.Remote.Address(), remoteWgPort)) if err != nil { return err } - addr.Port = remoteWgPort - _, err = muxDefault.GetSharedConn().WriteTo([]byte{1}, addr) - if err != nil { - return err + for i := 0; i < 10; i++ { + _, err = muxDefault.GetSharedConn().WriteTo([]byte{1}, addr) + if err != nil { + return err + } + log.Debugf("puch msg has been sent: %d, %s, %v", i, addr.String(), muxDefault.GetSharedConn().LocalAddr()) + time.Sleep(time.Second) } return err } diff --git a/iface/bind/bind.go b/iface/bind/bind.go index 100449d31..c4b6885dc 100644 --- a/iface/bind/bind.go +++ b/iface/bind/bind.go @@ -109,10 +109,15 @@ func (b *ICEBind) makeReceiveIPv4(c net.PacketConn) conn.ReceiveFunc { if err != nil { return 0, nil, err } + e, err := netip.ParseAddrPort(endpoint.String()) if err != nil { return 0, nil, err } + if e.Port() == 51820 { + log.Debugf("received msg from 51820: %v, %d", e.String(), n) + } + if !stun.IsMessage(buff) { // WireGuard traffic return n, (conn.StdNetEndpoint)(netip.AddrPortFrom(e.Addr(), e.Port())), nil