diff --git a/adapter/inbound.go b/adapter/inbound.go index ffc4c564..609dd907 100644 --- a/adapter/inbound.go +++ b/adapter/inbound.go @@ -43,6 +43,7 @@ type InboundContext struct { // cache + DNSMode string InboundDetour string LastInbound string OriginDestination M.Socksaddr diff --git a/constant/dns.go b/constant/dns.go index 3907b8c1..d23275a8 100644 --- a/constant/dns.go +++ b/constant/dns.go @@ -4,3 +4,8 @@ const ( DNSProviderAliDNS = "alidns" DNSProviderCloudflare = "cloudflare" ) + +const ( + DNSModeNormal = "normal" + DNSModeFakeIP = "fake-ip" +) diff --git a/experimental/clashapi/trafficontrol/tracker.go b/experimental/clashapi/trafficontrol/tracker.go index 73c28e69..58cab98d 100644 --- a/experimental/clashapi/trafficontrol/tracker.go +++ b/experimental/clashapi/trafficontrol/tracker.go @@ -5,6 +5,7 @@ import ( "time" "github.com/sagernet/sing-box/adapter" + C "github.com/sagernet/sing-box/constant" "github.com/sagernet/sing/common" "github.com/sagernet/sing/common/atomic" "github.com/sagernet/sing/common/bufio" @@ -64,6 +65,12 @@ func (t TrackerMetadata) MarshalJSON() ([]byte, error) { } else { rule = "final" } + var dnsMode string + if t.Metadata.DNSMode != "" { + dnsMode = t.Metadata.DNSMode + } else { + dnsMode = C.DNSModeNormal + } return json.Marshal(map[string]any{ "id": t.ID, "metadata": map[string]any{ @@ -74,7 +81,7 @@ func (t TrackerMetadata) MarshalJSON() ([]byte, error) { "sourcePort": F.ToString(t.Metadata.Source.Port), "destinationPort": F.ToString(t.Metadata.Destination.Port), "host": domain, - "dnsMode": "normal", + "dnsMode": dnsMode, "processPath": processPath, }, "upload": t.Upload.Load(), diff --git a/route/router.go b/route/router.go index c8fe94be..dc579800 100644 --- a/route/router.go +++ b/route/router.go @@ -845,6 +845,7 @@ func (r *Router) RouteConnection(ctx context.Context, conn net.Conn, metadata ad Fqdn: domain, Port: metadata.Destination.Port, } + metadata.DNSMode = C.DNSModeFakeIP metadata.FakeIP = true r.logger.DebugContext(ctx, "found fakeip domain: ", domain) } @@ -969,6 +970,7 @@ func (r *Router) RoutePacketConnection(ctx context.Context, conn N.PacketConn, m Fqdn: domain, Port: metadata.Destination.Port, } + metadata.DNSMode = C.DNSModeFakeIP metadata.FakeIP = true r.logger.DebugContext(ctx, "found fakeip domain: ", domain) }