diff --git a/config/config.go b/config/config.go index bb8c65f4..f5efc936 100644 --- a/config/config.go +++ b/config/config.go @@ -1289,6 +1289,10 @@ func parseTun(rawTun RawTun, general *General) error { } tunAddressPrefix = netip.PrefixFrom(tunAddressPrefix.Addr(), 30) + if !general.IPv6 || !verifyIP6() { + rawTun.Inet6Address = nil + } + general.Tun = Tun{ Enable: rawTun.Enable, Device: rawTun.Device, diff --git a/config/utils.go b/config/utils.go index 1d49552f..2c470618 100644 --- a/config/utils.go +++ b/config/utils.go @@ -2,6 +2,7 @@ package config import ( "fmt" + "net" "strings" "github.com/Dreamacro/clash/adapter/outboundgroup" @@ -146,3 +147,25 @@ func proxyGroupsDagSort(groupsConfig []map[string]any) error { } return fmt.Errorf("loop is detected in ProxyGroup, please check following ProxyGroups: %v", loopElements) } + +func verifyIP6() bool { + addrs, err := net.InterfaceAddrs() + if err != nil { + return false + } + for _, addr := range addrs { + ipNet, isIpNet := addr.(*net.IPNet) + if isIpNet && !ipNet.IP.IsLoopback() { + if ipNet.IP.To16() != nil { + s := ipNet.IP.String() + for i := 0; i < len(s); i++ { + switch s[i] { + case ':': + return true + } + } + } + } + } + return false +}