@@ -685,6 +685,8 @@ func ParseRawConfig(rawCfg *RawConfig) (*Config, error) {
685685 }
686686 config .Hosts = hosts
687687
688+ parseIPV6 (rawCfg ) // must before DNS and Tun
689+
688690 dnsCfg , err := parseDNS (rawCfg , ruleProviders )
689691 if err != nil {
690692 return nil , err
@@ -1417,13 +1419,19 @@ func parseDNS(rawCfg *RawConfig, ruleProviders map[string]providerTypes.RuleProv
14171419 if err != nil {
14181420 return nil , err
14191421 }
1422+ if ! dnsCfg .FakeIPRange .Addr ().Is4 () {
1423+ return nil , errors .New ("dns.fake-ip-range must be a IPv4 prefix" )
1424+ }
14201425 }
14211426
14221427 if cfg .FakeIPRange6 != "" {
14231428 dnsCfg .FakeIPRange6 , err = netip .ParsePrefix (cfg .FakeIPRange6 )
14241429 if err != nil {
14251430 return nil , err
14261431 }
1432+ if ! dnsCfg .FakeIPRange6 .Addr ().Is6 () {
1433+ return nil , errors .New ("dns.fake-ip-range6 must be a IPv6 prefix" )
1434+ }
14271435 }
14281436
14291437 if cfg .EnhancedMode == C .DNSFakeIP {
@@ -1538,17 +1546,20 @@ func parseAuthentication(rawRecords []string) []auth.AuthUser {
15381546 return users
15391547}
15401548
1549+ func parseIPV6 (rawCfg * RawConfig ) {
1550+ if ! rawCfg .IPv6 || ! verifyIP6 () {
1551+ rawCfg .DNS .FakeIPRange6 = ""
1552+ rawCfg .Tun .Inet6Address = nil
1553+ }
1554+ }
1555+
15411556func parseTun (rawTun RawTun , dns * DNS , general * General ) error {
15421557 tunAddressPrefix := dns .FakeIPRange
1543- if ! tunAddressPrefix .IsValid () || ! tunAddressPrefix . Addr (). Is4 () {
1558+ if ! tunAddressPrefix .IsValid () {
15441559 tunAddressPrefix = netip .MustParsePrefix ("198.18.0.1/16" )
15451560 }
15461561 tunAddressPrefix = netip .PrefixFrom (tunAddressPrefix .Addr (), 30 )
15471562
1548- if ! general .IPv6 || ! verifyIP6 () {
1549- rawTun .Inet6Address = nil
1550- }
1551-
15521563 general .Tun = LC.Tun {
15531564 Enable : rawTun .Enable ,
15541565 Device : rawTun .Device ,
0 commit comments