config.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package dns
  2. import (
  3. "github.com/xtls/xray-core/common/errors"
  4. "github.com/xtls/xray-core/common/net"
  5. "github.com/xtls/xray-core/common/strmatcher"
  6. "github.com/xtls/xray-core/common/uuid"
  7. )
  8. var typeMap = map[DomainMatchingType]strmatcher.Type{
  9. DomainMatchingType_Full: strmatcher.Full,
  10. DomainMatchingType_Subdomain: strmatcher.Domain,
  11. DomainMatchingType_Keyword: strmatcher.Substr,
  12. DomainMatchingType_Regex: strmatcher.Regex,
  13. }
  14. // References:
  15. // https://www.iana.org/assignments/special-use-domain-names/special-use-domain-names.xhtml
  16. // https://unix.stackexchange.com/questions/92441/whats-the-difference-between-local-home-and-lan
  17. var localTLDsAndDotlessDomains = []*NameServer_PriorityDomain{
  18. {Type: DomainMatchingType_Regex, Domain: "^[^.]+$"}, // This will only match domains without any dot
  19. {Type: DomainMatchingType_Subdomain, Domain: "local"},
  20. {Type: DomainMatchingType_Subdomain, Domain: "localdomain"},
  21. {Type: DomainMatchingType_Subdomain, Domain: "localhost"},
  22. {Type: DomainMatchingType_Subdomain, Domain: "lan"},
  23. {Type: DomainMatchingType_Subdomain, Domain: "home.arpa"},
  24. {Type: DomainMatchingType_Subdomain, Domain: "example"},
  25. {Type: DomainMatchingType_Subdomain, Domain: "invalid"},
  26. {Type: DomainMatchingType_Subdomain, Domain: "test"},
  27. }
  28. var localTLDsAndDotlessDomainsRule = &NameServer_OriginalRule{
  29. Rule: "geosite:private",
  30. Size: uint32(len(localTLDsAndDotlessDomains)),
  31. }
  32. func toStrMatcher(t DomainMatchingType, domain string) (strmatcher.Matcher, error) {
  33. strMType, f := typeMap[t]
  34. if !f {
  35. return nil, errors.New("unknown mapping type", t).AtWarning()
  36. }
  37. matcher, err := strMType.New(domain)
  38. if err != nil {
  39. return nil, errors.New("failed to create str matcher").Base(err)
  40. }
  41. return matcher, nil
  42. }
  43. func toNetIP(addrs []net.Address) ([]net.IP, error) {
  44. ips := make([]net.IP, 0, len(addrs))
  45. for _, addr := range addrs {
  46. if addr.Family().IsIP() {
  47. ips = append(ips, addr.IP())
  48. } else {
  49. return nil, errors.New("Failed to convert address", addr, "to Net IP.").AtWarning()
  50. }
  51. }
  52. return ips, nil
  53. }
  54. func generateRandomTag() string {
  55. id := uuid.New()
  56. return "xray.system." + id.String()
  57. }