Feature: support fakeip

This commit is contained in:
Dreamacro
2019-05-03 00:05:14 +08:00
parent 762f227512
commit f352f4479e
9 changed files with 180 additions and 4 deletions

View File

@ -11,6 +11,7 @@ import (
adapters "github.com/Dreamacro/clash/adapters/outbound"
"github.com/Dreamacro/clash/common/structure"
"github.com/Dreamacro/clash/component/fakeip"
C "github.com/Dreamacro/clash/constant"
"github.com/Dreamacro/clash/dns"
"github.com/Dreamacro/clash/log"
@ -41,6 +42,7 @@ type DNS struct {
Fallback []dns.NameServer `yaml:"fallback"`
Listen string `yaml:"listen"`
EnhancedMode dns.EnhancedMode `yaml:"enhanced-mode"`
FakeIPRange *fakeip.Pool
}
// Experimental config
@ -64,6 +66,7 @@ type rawDNS struct {
Fallback []string `yaml:"fallback"`
Listen string `yaml:"listen"`
EnhancedMode dns.EnhancedMode `yaml:"enhanced-mode"`
FakeIPRange string `yaml:"fake-ip-range"`
}
type rawConfig struct {
@ -109,7 +112,8 @@ func readConfig(path string) (*rawConfig, error) {
IgnoreResolveFail: true,
},
DNS: rawDNS{
Enable: false,
Enable: false,
FakeIPRange: "198.18.0.1/16",
},
}
err = yaml.Unmarshal([]byte(data), &rawConfig)
@ -466,5 +470,18 @@ func parseDNS(cfg rawDNS) (*DNS, error) {
return nil, err
}
if cfg.EnhancedMode == dns.FAKEIP {
_, ipnet, err := net.ParseCIDR(cfg.FakeIPRange)
if err != nil {
return nil, err
}
pool, err := fakeip.New(ipnet)
if err != nil {
return nil, err
}
dnsCfg.FakeIPRange = pool
}
return dnsCfg, nil
}