Przeglądaj źródła

Fix override address

世界 8 miesięcy temu
rodzic
commit
b01fe5d364
3 zmienionych plików z 8 dodań i 2 usunięć
  1. 6 0
      route/conn.go
  2. 1 1
      route/route.go
  3. 1 1
      route/rule/rule_action.go

+ 6 - 0
route/conn.go

@@ -191,6 +191,12 @@ func (m *ConnectionManager) NewPacketConnection(ctx context.Context, this N.Dial
 		if natConn, loaded := common.Cast[bufio.NATPacketConn](conn); loaded {
 			natConn.UpdateDestination(destinationAddress)
 		}
+	} else if metadata.RouteOriginalDestination.IsValid() && metadata.RouteOriginalDestination != metadata.Destination {
+		if metadata.UDPDisableDomainUnmapping {
+			remotePacketConn = bufio.NewUnidirectionalNATPacketConn(bufio.NewPacketConn(remotePacketConn), metadata.Destination, metadata.RouteOriginalDestination)
+		} else {
+			remotePacketConn = bufio.NewNATPacketConn(bufio.NewPacketConn(remotePacketConn), metadata.Destination, metadata.RouteOriginalDestination)
+		}
 	}
 	var udpTimeout time.Duration
 	if metadata.UDPTimeout > 0 {

+ 1 - 1
route/route.go

@@ -597,7 +597,7 @@ func (r *Router) actionSniff(
 					return
 				}
 			} else {
-				if !metadata.Destination.Addr.IsGlobalUnicast() {
+				if !metadata.Destination.Addr.IsGlobalUnicast() && !metadata.RouteOriginalDestination.IsValid() {
 					metadata.Destination = destination
 				}
 				if len(packetBuffers) > 0 {

+ 1 - 1
route/rule/rule_action.go

@@ -168,7 +168,7 @@ func (r *RuleActionRouteOptions) Type() string {
 func (r *RuleActionRouteOptions) Descriptions() []string {
 	var descriptions []string
 	if r.OverrideAddress.IsValid() {
-		descriptions = append(descriptions, F.ToString("override-address=", r.OverrideAddress.String()))
+		descriptions = append(descriptions, F.ToString("override-address=", r.OverrideAddress.AddrString()))
 	}
 	if r.OverridePort > 0 {
 		descriptions = append(descriptions, F.ToString("override-port=", r.OverridePort))