@@ -287,17 +287,21 @@ func isHandle(t C.Type) bool {
287287 return status == Running || (status == Inner && t == C .INNER )
288288}
289289
290- func needLookupIP (metadata * C.Metadata ) bool {
291- return resolver .MappingEnabled () && metadata .Host == "" && metadata .DstIP .IsValid ()
292- }
293-
294- func preHandleMetadata (metadata * C.Metadata ) error {
290+ func fixMetadata (metadata * C.Metadata ) {
291+ // first unmap dstIP
292+ metadata .DstIP = metadata .DstIP .Unmap ()
295293 // handle IP string on host
296294 if ip , err := netip .ParseAddr (metadata .Host ); err == nil {
297- metadata .DstIP = ip
295+ metadata .DstIP = ip . Unmap ()
298296 metadata .Host = ""
299297 }
298+ }
300299
300+ func needLookupIP (metadata * C.Metadata ) bool {
301+ return resolver .MappingEnabled () && metadata .Host == "" && metadata .DstIP .IsValid ()
302+ }
303+
304+ func preHandleMetadata (metadata * C.Metadata ) error {
301305 // preprocess enhanced-mode metadata
302306 if needLookupIP (metadata ) {
303307 host , exist := resolver .FindHostByIP (metadata .DstIP )
@@ -365,6 +369,7 @@ func handleUDPConn(packet C.PacketAdapter) {
365369 log .Warnln ("[Metadata] not valid: %#v" , metadata )
366370 return
367371 }
372+ fixMetadata (metadata ) // fix some metadata not set via metadata.SetRemoteAddr or metadata.SetRemoteAddress
368373
369374 if err := preHandleMetadata (metadata .Clone ()); err != nil { // precheck without modify metadata
370375 packet .Drop ()
@@ -449,6 +454,7 @@ func handleTCPConn(connCtx C.ConnContext) {
449454 log .Warnln ("[Metadata] not valid: %#v" , metadata )
450455 return
451456 }
457+ fixMetadata (metadata ) // fix some metadata not set via metadata.SetRemoteAddr or metadata.SetRemoteAddress
452458
453459 preHandleFailed := false
454460 if err := preHandleMetadata (metadata ); err != nil {
0 commit comments