fix: 添加relay日志

This commit is contained in:
2026-03-28 15:28:19 +08:00
parent 581c52f9b5
commit 17122f6e4c
8 changed files with 179 additions and 27 deletions

View File

@@ -31,7 +31,7 @@ func NewUDPRelay(listenConn net.PacketConn, upstreamAddr *net.UDPAddr) (*UDPRela
return nil, fmt.Errorf("relay: upstream addr is required")
}
upstreamConn, err := net.DialUDP("udp", nil, upstreamAddr)
upstreamConn, err := net.DialUDP(relayUDPNetwork(upstreamAddr), nil, upstreamAddr)
if err != nil {
return nil, fmt.Errorf("relay: dial upstream %s: %w", upstreamAddr, err)
}
@@ -68,10 +68,20 @@ func (r *UDPRelay) forwardDownstreamToUpstream() error {
return fmt.Errorf("relay: read downstream: %w", err)
}
clientAddr := cloneRelayAddr(addr)
r.mu.Lock()
r.clientAddr = cloneRelayAddr(addr)
previousAddr := cloneRelayAddr(r.clientAddr)
r.clientAddr = clientAddr
r.mu.Unlock()
switch {
case previousAddr == nil:
log.Printf("relay: learned downstream client %s", clientAddr)
case !sameRelayAddr(previousAddr, clientAddr):
log.Printf("relay: downstream client changed from %s to %s", previousAddr, clientAddr)
}
if _, err := r.upstream.Write(buf[:n]); err != nil {
return fmt.Errorf("relay: write upstream: %w", err)
}
@@ -113,3 +123,13 @@ func (r *UDPRelay) Close() error {
}
return err2
}
func relayUDPNetwork(addr *net.UDPAddr) string {
if addr == nil || addr.IP == nil {
return "udp"
}
if addr.IP.To4() != nil {
return "udp4"
}
return "udp6"
}