From cfdaebe9528d99de868edb33442d2ace6ff01068 Mon Sep 17 00:00:00 2001 From: wwqgtxx Date: Tue, 28 Oct 2025 16:23:01 +0800 Subject: [PATCH] chore: check `fake-ip-range` and `fake-ip-range6` are indeed ipv4 and ipv6 prefixes --- config/config.go | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/config/config.go b/config/config.go index b34adf7c..5f5b0c05 100644 --- a/config/config.go +++ b/config/config.go @@ -685,6 +685,8 @@ func ParseRawConfig(rawCfg *RawConfig) (*Config, error) { } config.Hosts = hosts + parseIPV6(rawCfg) // must before DNS and Tun + dnsCfg, err := parseDNS(rawCfg, ruleProviders) if err != nil { return nil, err @@ -1417,6 +1419,9 @@ func parseDNS(rawCfg *RawConfig, ruleProviders map[string]providerTypes.RuleProv if err != nil { return nil, err } + if !dnsCfg.FakeIPRange.Addr().Is4() { + return nil, errors.New("dns.fake-ip-range must be a IPv4 prefix") + } } if cfg.FakeIPRange6 != "" { @@ -1424,6 +1429,9 @@ func parseDNS(rawCfg *RawConfig, ruleProviders map[string]providerTypes.RuleProv if err != nil { return nil, err } + if !dnsCfg.FakeIPRange6.Addr().Is6() { + return nil, errors.New("dns.fake-ip-range6 must be a IPv6 prefix") + } } if cfg.EnhancedMode == C.DNSFakeIP { @@ -1538,17 +1546,20 @@ func parseAuthentication(rawRecords []string) []auth.AuthUser { return users } +func parseIPV6(rawCfg *RawConfig) { + if !rawCfg.IPv6 || !verifyIP6() { + rawCfg.DNS.FakeIPRange6 = "" + rawCfg.Tun.Inet6Address = nil + } +} + func parseTun(rawTun RawTun, dns *DNS, general *General) error { tunAddressPrefix := dns.FakeIPRange - if !tunAddressPrefix.IsValid() || !tunAddressPrefix.Addr().Is4() { + if !tunAddressPrefix.IsValid() { tunAddressPrefix = netip.MustParsePrefix("198.18.0.1/16") } tunAddressPrefix = netip.PrefixFrom(tunAddressPrefix.Addr(), 30) - if !general.IPv6 || !verifyIP6() { - rawTun.Inet6Address = nil - } - general.Tun = LC.Tun{ Enable: rawTun.Enable, Device: rawTun.Device,