From d1efa6c6426451044afc710ff04181e09086b249 Mon Sep 17 00:00:00 2001 From: tljk Date: Sun, 5 Jul 2026 15:06:33 +0800 Subject: [PATCH] fix: apply DNS hijack settings in TUN configuration --- proxy_core/src/flclash/lib_linux.go | 7 +++--- proxy_core/src/flclash/tun/tun.go | 35 +++++++++++++++-------------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/proxy_core/src/flclash/lib_linux.go b/proxy_core/src/flclash/lib_linux.go index 085734f5..953aae65 100644 --- a/proxy_core/src/flclash/lib_linux.go +++ b/proxy_core/src/flclash/lib_linux.go @@ -17,14 +17,15 @@ import ( "syscall" "time" + "net" + "github.com/metacubex/mihomo/component/dialer" + "github.com/metacubex/mihomo/component/iface" "github.com/metacubex/mihomo/component/process" "github.com/metacubex/mihomo/constant" "github.com/metacubex/mihomo/dns" "github.com/metacubex/mihomo/listener/sing_tun" "github.com/metacubex/mihomo/log" - "net" - "github.com/metacubex/mihomo/component/iface" ) type ProcessMap struct { @@ -89,7 +90,7 @@ func StartTUN(fd int, markSocket func(Fd)) { tunLock.Lock() defer tunLock.Unlock() f := int(fd) - tunListener, _ = t.Start(f, currentConfig.General.Tun.Device, currentConfig.General.Tun.Stack) + tunListener, _ = t.Start(f, currentConfig.General.Tun.Device, currentConfig.General.Tun.Stack, currentConfig.General.Tun.DNSHijack) if tunListener != nil { log.Infoln("TUN address: %v", tunListener.Address()) } diff --git a/proxy_core/src/flclash/tun/tun.go b/proxy_core/src/flclash/tun/tun.go index 48afb8b4..c9b23c71 100644 --- a/proxy_core/src/flclash/tun/tun.go +++ b/proxy_core/src/flclash/tun/tun.go @@ -25,32 +25,33 @@ type Props struct { Dns6 string `json:"dns6"` } -func Start(fd int, device string, stack constant.TUNStack) (*sing_tun.Listener, error) { +func Start(fd int, device string, stack constant.TUNStack, dnsHijack []string) (*sing_tun.Listener, error) { var prefix4 []netip.Prefix inet4Prefix4, err := netip.ParsePrefix(state.CurrentState.TunIp) - if (err == nil){ - prefix4 = append(prefix4, inet4Prefix4) + if err == nil { + prefix4 = append(prefix4, inet4Prefix4) } else { - tempPrefix4, err := netip.ParsePrefix(state.DefaultIpv4Address) - if err != nil { - log.Errorln("startTUN tempPrefix4 error:", err) - return nil, err - } - prefix4 = append(prefix4, tempPrefix4) + tempPrefix4, err := netip.ParsePrefix(state.DefaultIpv4Address) + if err != nil { + log.Errorln("startTUN tempPrefix4 error:", err) + return nil, err + } + prefix4 = append(prefix4, tempPrefix4) } var prefix6 []netip.Prefix if state.CurrentState.Ipv6 { - tempPrefix6, err := netip.ParsePrefix(state.DefaultIpv6Address) - if err != nil { - log.Errorln("startTUN tempPrefix6 error:", err) - return nil, err - } - prefix6 = append(prefix6, tempPrefix6) + tempPrefix6, err := netip.ParsePrefix(state.DefaultIpv6Address) + if err != nil { + log.Errorln("startTUN tempPrefix6 error:", err) + return nil, err + } + prefix6 = append(prefix6, tempPrefix6) } - var dnsHijack []string - dnsHijack = append(dnsHijack, net.JoinHostPort(state.GetDnsServerAddress(), "53")) + if len(dnsHijack) == 0 { + dnsHijack = append(dnsHijack, net.JoinHostPort(state.GetDnsServerAddress(), "53")) + } options := LC.Tun{ Enable: true,