@@ -34,13 +34,13 @@ var googleDNSAddr *net.UDPAddr = &net.UDPAddr{IP: net.ParseIP("8.8.8.8"), Port:
3434
3535type udpConn struct {
3636 * socks5.UDPConn
37- clientAddr * net.UDPAddr
38- dstAddr * net.UDPAddr
39- lastSeen time.Time
40- written atomic.Uint64
37+ srcAddr * net.UDPAddr
38+ dstAddr * net.UDPAddr
39+ lastSeen time.Time
40+ written atomic.Uint64
4141}
4242
43- func newUDPConn (clientAddr * net.UDPAddr , dstAddr * net.UDPAddr , sockDialer * socks5.Dialer ) (* udpConn , error ) {
43+ func newUDPConn (srcAddr * net.UDPAddr , dstAddr * net.UDPAddr , sockDialer * socks5.Dialer ) (* udpConn , error ) {
4444 ctx , cancel := context .WithTimeout (context .Background (), timeout )
4545 defer cancel ()
4646 conn , err := sockDialer .DialContext (ctx , "udp4" , dstAddr .String ())
@@ -51,7 +51,7 @@ func newUDPConn(clientAddr *net.UDPAddr, dstAddr *net.UDPAddr, sockDialer *socks
5151 if ! ok {
5252 return nil , fmt .Errorf ("failed obtaining relay connection" )
5353 }
54- return & udpConn {UDPConn : relayConn , clientAddr : clientAddr , dstAddr : dstAddr , lastSeen : time .Now ()}, nil
54+ return & udpConn {UDPConn : relayConn , srcAddr : srcAddr , dstAddr : dstAddr , lastSeen : time .Now ()}, nil
5555}
5656
5757type udpConnections struct {
@@ -63,20 +63,20 @@ type udpConnections struct {
6363
6464func (ucs * udpConnections ) Add (conn * udpConn ) {
6565 ucs .Lock ()
66- ucs .clients [fmt .Sprintf ("%s,%s" , conn .clientAddr , conn .dstAddr )] = conn
66+ ucs .clients [fmt .Sprintf ("%s,%s" , conn .srcAddr , conn .dstAddr )] = conn
6767 ucs .Unlock ()
6868}
6969
70- func (ucs * udpConnections ) Get (clientAddr , dstAddr * net.UDPAddr ) (* udpConn , bool ) {
70+ func (ucs * udpConnections ) Get (srcAddr , dstAddr * net.UDPAddr ) (* udpConn , bool ) {
7171 ucs .RLock ()
7272 defer ucs .RUnlock ()
73- conn , ok := ucs .clients [fmt .Sprintf ("%s,%s" , clientAddr , dstAddr )]
73+ conn , ok := ucs .clients [fmt .Sprintf ("%s,%s" , srcAddr , dstAddr )]
7474 return conn , ok
7575}
7676
7777func (ucs * udpConnections ) Remove (conn * udpConn ) {
7878 ucs .Lock ()
79- delete (ucs .clients , fmt .Sprintf ("%s,%s" , conn .clientAddr , conn .dstAddr ))
79+ delete (ucs .clients , fmt .Sprintf ("%s,%s" , conn .srcAddr , conn .dstAddr ))
8080 ucs .Unlock ()
8181}
8282
@@ -288,13 +288,9 @@ func (tsu *tproxyServerUDP) handleConnection(conn *udpConn) {
288288 tsu .wg .Add (1 )
289289 buf := make ([]byte , udpBufferSize )
290290 defer func () {
291- srcConnStr := fmt .Sprintf ("%s→ %s" , conn .clientAddr , conn .dstAddr )
291+ srcConnStr := fmt .Sprintf ("%s→ %s" , conn .srcAddr , conn .dstAddr )
292292 dstConnStr := fmt .Sprintf ("%s→ %s→ %s" , tsu .conn .LocalAddr (), conn .LocalAddr (), conn .dstAddr )
293- tsu .p .logger .Debug ().Msgf ("[udp %s] Copied %s for src: %s - dst: %s" ,
294- tsu .p .tproxyMode ,
295- prettifyBytes (int64 (conn .written .Load ())),
296- srcConnStr ,
297- dstConnStr )
293+ tsu .p .logger .Debug ().Msgf ("Copied %s for udp src: %s - dst: %s" , prettifyBytes (int64 (conn .written .Load ())), srcConnStr , dstConnStr )
298294 }()
299295readLoop:
300296 for {
@@ -314,10 +310,10 @@ readLoop:
314310 if nr > 0 {
315311 er := tsu .conn .SetWriteDeadline (time .Now ().Add (writeTimeoutUDP ))
316312 if er != nil {
317- tsu .p .logger .Debug ().Err (er ).Msgf ("[udp %s] Failed setting write deadline %s→ %s" , tsu .p .tproxyMode , tsu .conn .LocalAddr (), conn .clientAddr )
313+ tsu .p .logger .Debug ().Err (er ).Msgf ("[udp %s] Failed setting write deadline %s→ %s" , tsu .p .tproxyMode , tsu .conn .LocalAddr (), conn .srcAddr )
318314 break readLoop
319315 }
320- nw , ew := tsu .conn .WriteToUDP (buf [0 :nr ], conn .clientAddr )
316+ nw , ew := tsu .conn .WriteToUDP (buf [0 :nr ], conn .srcAddr )
321317 if nw < 0 || nr < nw {
322318 nw = 0
323319 if ew == nil {
@@ -334,7 +330,7 @@ readLoop:
334330 }
335331 }
336332 if nr != nw {
337- tsu .p .logger .Debug ().Err (io .ErrShortWrite ).Msgf ("[udp %s] Failed sending message %s→ %s" , tsu .p .tproxyMode , tsu .conn .LocalAddr (), conn .clientAddr )
333+ tsu .p .logger .Debug ().Err (io .ErrShortWrite ).Msgf ("[udp %s] Failed sending message %s→ %s" , tsu .p .tproxyMode , tsu .conn .LocalAddr (), conn .srcAddr )
338334 break readLoop
339335 }
340336 }
@@ -358,11 +354,12 @@ readLoop:
358354
359355type dnsConn struct {
360356 * net.UDPConn
361- clientAddr * net.UDPAddr
362- written atomic.Uint64
357+ srcAddr * net.UDPAddr
358+ dstAddr * net.UDPAddr
359+ written atomic.Uint64
363360}
364361
365- func newDNSConn (clientAddr * net.UDPAddr , mark uint ) (* dnsConn , error ) {
362+ func newDNSConn (srcAddr * net.UDPAddr , mark uint ) (* dnsConn , error ) {
366363 dialer := getBaseDialer (timeout , mark )
367364 ctx , cancel := context .WithTimeout (context .Background (), timeout )
368365 defer cancel ()
@@ -374,7 +371,7 @@ func newDNSConn(clientAddr *net.UDPAddr, mark uint) (*dnsConn, error) {
374371 if ! ok {
375372 return nil , fmt .Errorf ("failed obtaining dns connection" )
376373 }
377- return & dnsConn {UDPConn : udpConn , clientAddr : clientAddr }, nil
374+ return & dnsConn {UDPConn : udpConn , srcAddr : srcAddr , dstAddr : googleDNSAddr }, nil
378375}
379376
380377func (tsu * tproxyServerUDP ) listenAndServeDNS () {
@@ -401,7 +398,7 @@ func (tsu *tproxyServerUDP) listenAndServeDNS() {
401398 continue
402399 }
403400 srcConnStr := fmt .Sprintf ("%s→ %s" , srcAddr , tsu .gwConn .LocalAddr ())
404- dstConnStr := fmt .Sprintf ("%s→ %s→ %s" , conn .LocalAddr (), tsu .gwConn .LocalAddr (), googleDNSAddr )
401+ dstConnStr := fmt .Sprintf ("%s→ %s→ %s" , conn .LocalAddr (), tsu .gwConn .LocalAddr (), conn . dstAddr )
405402 tsu .p .logger .Debug ().Msgf ("[udp %s] src: %s - dst: %s" , tsu .p .tproxyMode , srcConnStr , dstConnStr )
406403 err = conn .SetWriteDeadline (time .Now ().Add (writeTimeoutUDP ))
407404 if err != nil {
@@ -419,7 +416,7 @@ func (tsu *tproxyServerUDP) listenAndServeDNS() {
419416 if errors .Is (err , net .ErrClosed ) {
420417 continue
421418 }
422- tsu .p .logger .Error ().Err (err ).Msgf ("[udp %s] Failed sending message %s→ %s" , tsu .p .tproxyMode , conn .LocalAddr (), googleDNSAddr )
419+ tsu .p .logger .Error ().Err (err ).Msgf ("[udp %s] Failed sending message %s→ %s" , tsu .p .tproxyMode , conn .LocalAddr (), conn . dstAddr )
423420 continue
424421 }
425422 conn .written .Add (uint64 (nw ))
@@ -448,13 +445,9 @@ func (tsu *tproxyServerUDP) listenAndServeDNS() {
448445func (tsu * tproxyServerUDP ) handleDNSConnection (conn * dnsConn ) {
449446 tsu .wg .Add (1 )
450447 defer func () {
451- srcConnStr := fmt .Sprintf ("%s→ %s" , conn .clientAddr , tsu .gwConn .LocalAddr ())
452- dstConnStr := fmt .Sprintf ("%s→ %s→ %s" , conn .LocalAddr (), tsu .gwConn .LocalAddr (), googleDNSAddr )
453- tsu .p .logger .Debug ().Msgf ("[udp %s] Copied %s for src: %s - dst: %s" ,
454- tsu .p .tproxyMode ,
455- prettifyBytes (int64 (conn .written .Load ())),
456- srcConnStr ,
457- dstConnStr )
448+ srcConnStr := fmt .Sprintf ("%s→ %s" , conn .srcAddr , tsu .gwConn .LocalAddr ())
449+ dstConnStr := fmt .Sprintf ("%s→ %s→ %s" , conn .LocalAddr (), tsu .gwConn .LocalAddr (), conn .dstAddr )
450+ tsu .p .logger .Debug ().Msgf ("Copied %s for udp src: %s - dst: %s" , prettifyBytes (int64 (conn .written .Load ())), srcConnStr , dstConnStr )
458451 conn .Close ()
459452 }()
460453 buf := make ([]byte , udpBufferSize )
@@ -463,7 +456,7 @@ func (tsu *tproxyServerUDP) handleDNSConnection(conn *dnsConn) {
463456 if errors .Is (er , net .ErrClosed ) {
464457 return
465458 }
466- tsu .p .logger .Debug ().Err (er ).Msgf ("[udp %s] Failed setting read deadline %s→ %s" , tsu .p .tproxyMode , googleDNSAddr , conn .LocalAddr ())
459+ tsu .p .logger .Debug ().Err (er ).Msgf ("[udp %s] Failed setting read deadline %s→ %s" , tsu .p .tproxyMode , conn . dstAddr , conn .LocalAddr ())
467460 return
468461 }
469462 nr , er := conn .Read (buf )
@@ -473,10 +466,10 @@ func (tsu *tproxyServerUDP) handleDNSConnection(conn *dnsConn) {
473466 if errors .Is (er , net .ErrClosed ) {
474467 return
475468 }
476- tsu .p .logger .Debug ().Err (er ).Msgf ("[udp %s] Failed setting write deadline %s→ %s" , tsu .p .tproxyMode , conn .LocalAddr (), conn .clientAddr )
469+ tsu .p .logger .Debug ().Err (er ).Msgf ("[udp %s] Failed setting write deadline %s→ %s" , tsu .p .tproxyMode , conn .LocalAddr (), conn .srcAddr )
477470 return
478471 }
479- nw , ew := tsu .gwConn .WriteToUDP (buf [0 :nr ], conn .clientAddr )
472+ nw , ew := tsu .gwConn .WriteToUDP (buf [0 :nr ], conn .srcAddr )
480473 if nw < 0 || nr < nw {
481474 nw = 0
482475 if ew == nil {
@@ -490,7 +483,7 @@ func (tsu *tproxyServerUDP) handleDNSConnection(conn *dnsConn) {
490483 if nr != nw {
491484 tsu .p .logger .Debug ().
492485 Err (io .ErrShortWrite ).
493- Msgf ("[udp %s] Failed sending message %s→ %s" , tsu .p .tproxyMode , conn .LocalAddr (), conn .clientAddr )
486+ Msgf ("[udp %s] Failed sending message %s→ %s" , tsu .p .tproxyMode , conn .LocalAddr (), conn .srcAddr )
494487 return
495488 }
496489 }
0 commit comments