|
@@ -149,16 +149,15 @@ func (m *ConnectionManager) NewPacketConnection(ctx context.Context, this N.Dial
|
|
} else {
|
|
} else {
|
|
originDestination = metadata.Destination
|
|
originDestination = metadata.Destination
|
|
}
|
|
}
|
|
- if metadata.Destination != M.SocksaddrFrom(destinationAddress, metadata.Destination.Port) {
|
|
|
|
|
|
+ if natConn, loaded := common.Cast[bufio.NATPacketConn](conn); loaded {
|
|
|
|
+ natConn.UpdateDestination(destinationAddress)
|
|
|
|
+ } else if metadata.Destination != M.SocksaddrFrom(destinationAddress, metadata.Destination.Port) {
|
|
if metadata.UDPDisableDomainUnmapping {
|
|
if metadata.UDPDisableDomainUnmapping {
|
|
remotePacketConn = bufio.NewUnidirectionalNATPacketConn(bufio.NewPacketConn(remotePacketConn), M.SocksaddrFrom(destinationAddress, metadata.Destination.Port), originDestination)
|
|
remotePacketConn = bufio.NewUnidirectionalNATPacketConn(bufio.NewPacketConn(remotePacketConn), M.SocksaddrFrom(destinationAddress, metadata.Destination.Port), originDestination)
|
|
} else {
|
|
} else {
|
|
remotePacketConn = bufio.NewNATPacketConn(bufio.NewPacketConn(remotePacketConn), M.SocksaddrFrom(destinationAddress, metadata.Destination.Port), originDestination)
|
|
remotePacketConn = bufio.NewNATPacketConn(bufio.NewPacketConn(remotePacketConn), M.SocksaddrFrom(destinationAddress, metadata.Destination.Port), originDestination)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- if natConn, loaded := common.Cast[bufio.NATPacketConn](conn); loaded {
|
|
|
|
- natConn.UpdateDestination(destinationAddress)
|
|
|
|
- }
|
|
|
|
} else if metadata.RouteOriginalDestination.IsValid() && metadata.RouteOriginalDestination != metadata.Destination {
|
|
} else if metadata.RouteOriginalDestination.IsValid() && metadata.RouteOriginalDestination != metadata.Destination {
|
|
remotePacketConn = bufio.NewDestinationNATPacketConn(bufio.NewPacketConn(remotePacketConn), metadata.Destination, metadata.RouteOriginalDestination)
|
|
remotePacketConn = bufio.NewDestinationNATPacketConn(bufio.NewPacketConn(remotePacketConn), metadata.Destination, metadata.RouteOriginalDestination)
|
|
}
|
|
}
|