From 3844516aa7722e3a9cdaf478bfb409caed701b8a Mon Sep 17 00:00:00 2001 From: Jesse R Codling Date: Mon, 16 Dec 2024 03:58:54 -0500 Subject: [PATCH] [client] fix: reformat IPv6 ICE addresses when punching (#3050) Should fix #2327 and #2606 by checking for IPv6 addresses from ICE --- client/internal/peer/worker_ice.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/client/internal/peer/worker_ice.go b/client/internal/peer/worker_ice.go index 7ce4797c3..4cdd18ff1 100644 --- a/client/internal/peer/worker_ice.go +++ b/client/internal/peer/worker_ice.go @@ -264,7 +264,13 @@ func (w *WorkerICE) closeAgent(cancel context.CancelFunc) { func (w *WorkerICE) punchRemoteWGPort(pair *ice.CandidatePair, remoteWgPort int) { // wait local endpoint configuration time.Sleep(time.Second) - addr, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", pair.Remote.Address(), remoteWgPort)) + addrString := pair.Remote.Address() + parsed, err := netip.ParseAddr(addrString) + if (err == nil) && (parsed.Is6()) { + addrString = fmt.Sprintf("[%s]", addrString) + //IPv6 Literals need to be wrapped in brackets for Resolve*Addr() + } + addr, err := net.ResolveUDPAddr("udp", fmt.Sprintf("%s:%d", addrString, remoteWgPort)) if err != nil { w.log.Warnf("got an error while resolving the udp address, err: %s", err) return