Просмотр исходного кода

WireGuard inbound: Fix leaking session information between requests (#4030)

Fixes https://github.com/XTLS/Xray-core/issues/3948 https://github.com/XTLS/Xray-core/issues/4025
风扇滑翔翼 11 месяцев назад
Родитель
Сommit
59e5d24280
1 измененных файлов с 14 добавлено и 9 удалено
  1. 14 9
      proxy/wireguard/server.go

+ 14 - 9
proxy/wireguard/server.go

@@ -144,15 +144,20 @@ func (s *Server) forwardConnection(dest net.Destination, conn net.Conn) {
 		Reason: "",
 	})
 
-	if s.info.inboundTag != nil {
-		ctx = session.ContextWithInbound(ctx, s.info.inboundTag)
-	}
-	if s.info.outboundTag != nil {
-		ctx = session.ContextWithOutbounds(ctx, []*session.Outbound{s.info.outboundTag})
-	}
-	if s.info.contentTag != nil {
-		ctx = session.ContextWithContent(ctx, s.info.contentTag)
-	}
+	// what's this?
+	// Session information should not be shared between different connections
+	// why reuse them in server level? This will cause incorrect destoverride and unexpected routing behavior.
+	// Disable it temporarily. Maybe s.info should be removed.
+
+	//  if s.info.inboundTag != nil {
+	//  ctx = session.ContextWithInbound(ctx, s.info.inboundTag)
+	//  }
+	//	if s.info.outboundTag != nil {
+	//		ctx = session.ContextWithOutbounds(ctx, []*session.Outbound{s.info.outboundTag})
+	//	}
+	//  if s.info.contentTag != nil {
+	//	    ctx = session.ContextWithContent(ctx, s.info.contentTag)
+	//  }
 
 	link, err := s.info.dispatcher.Dispatch(ctx, dest)
 	if err != nil {