github.com/EagleQL/Xray-core@v1.4.3/infra/conf/fakedns.go (about) 1 package conf 2 3 import ( 4 "github.com/golang/protobuf/proto" 5 "github.com/xtls/xray-core/app/dns/fakedns" 6 "github.com/xtls/xray-core/features/dns" 7 ) 8 9 type FakeDNSConfig struct { 10 IPPool string `json:"ipPool"` 11 LruSize int64 `json:"poolSize"` 12 } 13 14 func (f FakeDNSConfig) Build() (proto.Message, error) { 15 return &fakedns.FakeDnsPool{ 16 IpPool: f.IPPool, 17 LruSize: f.LruSize, 18 }, nil 19 } 20 21 type FakeDNSPostProcessingStage struct{} 22 23 func (FakeDNSPostProcessingStage) Process(conf *Config) error { 24 var fakeDNSInUse bool 25 26 if conf.DNSConfig != nil { 27 for _, v := range conf.DNSConfig.Servers { 28 if v.Address.Family().IsDomain() { 29 if v.Address.Domain() == "fakedns" { 30 fakeDNSInUse = true 31 } 32 } 33 } 34 } 35 36 if fakeDNSInUse { 37 if conf.FakeDNS == nil { 38 // Add a Fake DNS Config if there is none 39 conf.FakeDNS = &FakeDNSConfig{ 40 IPPool: dns.FakeIPPool, 41 LruSize: 65535, 42 } 43 } 44 found := false 45 // Check if there is a Outbound with necessary sniffer on 46 var inbounds []InboundDetourConfig 47 48 if len(conf.InboundConfigs) > 0 { 49 inbounds = append(inbounds, conf.InboundConfigs...) 50 } 51 for _, v := range inbounds { 52 if v.SniffingConfig != nil && v.SniffingConfig.Enabled && v.SniffingConfig.DestOverride != nil { 53 for _, dov := range *v.SniffingConfig.DestOverride { 54 if dov == "fakedns" { 55 found = true 56 } 57 } 58 } 59 } 60 if !found { 61 newError("Defined Fake DNS but haven't enabled fake dns sniffing at any inbound.").AtWarning().WriteToLog() 62 } 63 } 64 65 return nil 66 }