From 12e8c639d75b09faa6b268bb827c3c65639e1c04 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Fri, 23 Sep 2022 14:42:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=B8=8D=E5=BF=85=E8=A6=81?= =?UTF-8?q?=E7=9A=84=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/dnsconfigs/.gitignore | 1 + pkg/dnsconfigs/defaults.go | 37 - pkg/dnsconfigs/ns_access_log_ref.go | 14 - pkg/dnsconfigs/ns_domain_status.go | 54 - pkg/dnsconfigs/ns_key_algorithms.go | 69 -- pkg/dnsconfigs/ns_node_config.go | 85 -- pkg/dnsconfigs/ns_plans.go | 26 - pkg/dnsconfigs/ns_recursion_config.go | 22 - pkg/dnsconfigs/ns_route_ranges.go | 262 ---- pkg/dnsconfigs/ns_route_ranges_test.go | 98 -- pkg/dnsconfigs/ns_routes.go | 1532 ------------------------ pkg/dnsconfigs/ns_routes_test.go | 86 -- pkg/dnsconfigs/ns_setting.go | 6 - pkg/dnsconfigs/ns_tsig_config.go | 8 - pkg/dnsconfigs/ns_user_config.go | 31 - pkg/dnsconfigs/record_ttls.go | 65 - 16 files changed, 1 insertion(+), 2395 deletions(-) create mode 100644 pkg/dnsconfigs/.gitignore delete mode 100644 pkg/dnsconfigs/defaults.go delete mode 100644 pkg/dnsconfigs/ns_access_log_ref.go delete mode 100644 pkg/dnsconfigs/ns_domain_status.go delete mode 100644 pkg/dnsconfigs/ns_key_algorithms.go delete mode 100644 pkg/dnsconfigs/ns_node_config.go delete mode 100644 pkg/dnsconfigs/ns_plans.go delete mode 100644 pkg/dnsconfigs/ns_recursion_config.go delete mode 100644 pkg/dnsconfigs/ns_route_ranges.go delete mode 100644 pkg/dnsconfigs/ns_route_ranges_test.go delete mode 100644 pkg/dnsconfigs/ns_routes.go delete mode 100644 pkg/dnsconfigs/ns_routes_test.go delete mode 100644 pkg/dnsconfigs/ns_setting.go delete mode 100644 pkg/dnsconfigs/ns_tsig_config.go delete mode 100644 pkg/dnsconfigs/ns_user_config.go delete mode 100644 pkg/dnsconfigs/record_ttls.go diff --git a/pkg/dnsconfigs/.gitignore b/pkg/dnsconfigs/.gitignore new file mode 100644 index 0000000..7abb000 --- /dev/null +++ b/pkg/dnsconfigs/.gitignore @@ -0,0 +1 @@ +ns_* \ No newline at end of file diff --git a/pkg/dnsconfigs/defaults.go b/pkg/dnsconfigs/defaults.go deleted file mode 100644 index a839979..0000000 --- a/pkg/dnsconfigs/defaults.go +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. - -package dnsconfigs - -import "github.com/iwind/TeaGo/maps" - -// 一组系统默认值 -// 修改单个IP相关限制值时要考虑到NAT中每个IP会代表很多个主机,并非1对1的关系 - -const ( - DefaultMaxThreads = 20000 // 单节点最大线程数 - DefaultMaxThreadsMin = 1000 // 单节点最大线程数最小值 - DefaultMaxThreadsMax = 100_000 // 单节点最大线程数最大值 - - DefaultTCPMaxConnections = 100_000 // 单节点TCP最大连接数 - DefaultTCPMaxConnectionsPerIP = 1000 // 单IP最大连接数 - DefaultTCPMinConnectionsPerIP = 5 // 单IP最小连接数 - - DefaultTCPNewConnectionsMinutelyRate = 500 // 单IP连接速率限制(按分钟) - DefaultTCPNewConnectionsMinMinutelyRate = 3 // 单IP最小连接速率 - - DefaultTCPNewConnectionsSecondlyRate = 300 // 单IP连接速率限制(按秒) - DefaultTCPNewConnectionsMinSecondlyRate = 3 // 单IP最小连接速率 - - DefaultTCPLinger = 3 // 单节点TCP Linger值 - DefaultTLSHandshakeTimeout = 3 // TLS握手超时时间 -) - -var DefaultConfigs = maps.Map{ - "tcpMaxConnections": DefaultTCPMaxConnections, - "tcpMaxConnectionsPerIP": DefaultTCPMaxConnectionsPerIP, - "tcpMinConnectionsPerIP": DefaultTCPMinConnectionsPerIP, - "tcpNewConnectionsMinutelyRate": DefaultTCPNewConnectionsMinutelyRate, - "tcpNewConnectionsMinMinutelyRate": DefaultTCPNewConnectionsMinMinutelyRate, - "tcpNewConnectionsSecondlyRate": DefaultTCPNewConnectionsSecondlyRate, - "tcpNewConnectionsMinSecondlyRate": DefaultTCPNewConnectionsMinSecondlyRate, -} diff --git a/pkg/dnsconfigs/ns_access_log_ref.go b/pkg/dnsconfigs/ns_access_log_ref.go deleted file mode 100644 index 3dfd0c1..0000000 --- a/pkg/dnsconfigs/ns_access_log_ref.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. - -package dnsconfigs - -type NSAccessLogRef struct { - IsPrior bool `yaml:"isPrior" json:"isPrior"` // 是否覆盖 - IsOn bool `yaml:"isOn" json:"isOn"` // 是否启用 - LogMissingDomains bool `yaml:"logMissingDomains" json:"logMissingDomains"` // 是否记录找不到的域名 - MissingRecordsOnly bool `yaml:"missingRecordsOnly" json:"missingRecordsOnly"` // 只记录找不到解析记录的访问 -} - -func (this *NSAccessLogRef) Init() error { - return nil -} diff --git a/pkg/dnsconfigs/ns_domain_status.go b/pkg/dnsconfigs/ns_domain_status.go deleted file mode 100644 index 6a4cad2..0000000 --- a/pkg/dnsconfigs/ns_domain_status.go +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn . - -package dnsconfigs - -import "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared" - -// NSDomainStatus 域名状态 -type NSDomainStatus = string - -const ( - NSDomainStatusNone NSDomainStatus = "none" // 初始状态 - NSDomainStatusVerified NSDomainStatus = "verified" // 已验证 - NSDomainStatusRejected NSDomainStatus = "rejected" // 已驳回(可以重新提交) - NSDomainStatusForbidden NSDomainStatus = "forbidden" // 已禁止(禁止继续使用此域名) -) - -func FindAllNSDomainStatusList() []*shared.Definition { - return []*shared.Definition{ - { - Name: "未验证", - Code: NSDomainStatusNone, - }, - { - Name: "已验证", - Code: NSDomainStatusVerified, - }, - { - Name: "已驳回", - Code: NSDomainStatusRejected, - }, - { - Name: "已禁止", - Code: NSDomainStatusForbidden, - }, - } -} - -func NSDomainStatusIsValid(status string) bool { - for _, def := range FindAllNSDomainStatusList() { - if def.Code == status { - return true - } - } - return false -} - -func NSDomainStatusName(status string) string { - for _, def := range FindAllNSDomainStatusList() { - if def.Code == status { - return def.Name - } - } - return "" -} diff --git a/pkg/dnsconfigs/ns_key_algorithms.go b/pkg/dnsconfigs/ns_key_algorithms.go deleted file mode 100644 index 3f37f6f..0000000 --- a/pkg/dnsconfigs/ns_key_algorithms.go +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. - -package dnsconfigs - -type KeyAlgorithmType = string - -const ( - KeyAlgorithmTypeHmacSHA1 KeyAlgorithmType = "hmac-sha1." - KeyAlgorithmTypeHmacSHA224 KeyAlgorithmType = "hmac-sha224." - KeyAlgorithmTypeHmacSHA256 KeyAlgorithmType = "hmac-sha256." - KeyAlgorithmTypeHmacSHA384 KeyAlgorithmType = "hmac-sha384." - KeyAlgorithmTypeHmacSHA512 KeyAlgorithmType = "hmac-sha512." -) - -type KeyAlgorithmDefinition struct { - Name string `json:"name"` - Code string `json:"code"` -} - -func FindAllKeyAlgorithmTypes() []*KeyAlgorithmDefinition { - return []*KeyAlgorithmDefinition{ - { - Name: "HmacSHA1", - Code: KeyAlgorithmTypeHmacSHA1, - }, - { - Name: "HmacSHA224", - Code: KeyAlgorithmTypeHmacSHA224, - }, - { - Name: "HmacSHA256", - Code: KeyAlgorithmTypeHmacSHA256, - }, - { - Name: "HmacSHA384", - Code: KeyAlgorithmTypeHmacSHA384, - }, - { - Name: "HmacSHA512", - Code: KeyAlgorithmTypeHmacSHA512, - }, - } -} - -func FindKeyAlgorithmTypeName(algoType KeyAlgorithmType) string { - for _, def := range FindAllKeyAlgorithmTypes() { - if def.Code == algoType { - return def.Name - } - } - return "" -} - -type NSKeySecretType = string - -const ( - NSKeySecretTypeClear NSKeySecretType = "clear" - NSKeySecretTypeBase64 NSKeySecretType = "base64" -) - -func FindKeySecretTypeName(secretType NSKeySecretType) string { - switch secretType { - case NSKeySecretTypeClear: - return "明文" - case NSKeySecretTypeBase64: - return "BASE64" - } - return "" -} diff --git a/pkg/dnsconfigs/ns_node_config.go b/pkg/dnsconfigs/ns_node_config.go deleted file mode 100644 index de74897..0000000 --- a/pkg/dnsconfigs/ns_node_config.go +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. - -package dnsconfigs - -import ( - "fmt" - "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" - "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/ddosconfigs" -) - -type NSNodeConfig struct { - Id int64 `yaml:"id" json:"id"` - NodeId string `yaml:"nodeId" json:"nodeId"` - Secret string `yaml:"secret" json:"secret"` - ClusterId int64 `yaml:"clusterId" json:"clusterId"` - AccessLogRef *NSAccessLogRef `yaml:"accessLogRef" json:"accessLogRef"` - RecursionConfig *NSRecursionConfig `yaml:"recursionConfig" json:"recursionConfig"` - DDoSProtection *ddosconfigs.ProtectionConfig `yaml:"ddosProtection" json:"ddosProtection"` - AllowedIPs []string `yaml:"allowedIPs" json:"allowedIPs"` - TimeZone string `yaml:"timeZone" json:"timeZone"` // 自动设置时区 - - TCP *serverconfigs.TCPProtocolConfig `yaml:"tcp" json:"tcp"` // TCP配置 - TLS *serverconfigs.TLSProtocolConfig `yaml:"tls" json:"tls"` // TLS配置 - UDP *serverconfigs.UDPProtocolConfig `yaml:"udp" json:"udp"` // UDP配置 - - paddedId string -} - -func (this *NSNodeConfig) Init() error { - this.paddedId = fmt.Sprintf("%08d", this.Id) - - // accessLog - if this.AccessLogRef != nil { - err := this.AccessLogRef.Init() - if err != nil { - return err - } - } - - // 递归DNS - if this.RecursionConfig != nil { - err := this.RecursionConfig.Init() - if err != nil { - return err - } - } - - // DDoS - if this.DDoSProtection != nil { - err := this.DDoSProtection.Init() - if err != nil { - return err - } - } - - // tcp - if this.TCP != nil { - err := this.TCP.Init() - if err != nil { - return err - } - } - - // tls - if this.TLS != nil { - err := this.TLS.Init() - if err != nil { - return err - } - } - - // udp - if this.UDP != nil { - err := this.UDP.Init() - if err != nil { - return err - } - } - - return nil -} - -func (this *NSNodeConfig) PaddedId() string { - return this.paddedId -} diff --git a/pkg/dnsconfigs/ns_plans.go b/pkg/dnsconfigs/ns_plans.go deleted file mode 100644 index db15c13..0000000 --- a/pkg/dnsconfigs/ns_plans.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn . - -package dnsconfigs - -type NSPlanConfig struct { - SupportCountryRoutes bool `json:"supportCountryRoutes"` // 支持全球国家/地区线路 - SupportChinaProvinceRoutes bool `json:"supportChinaProvinceRoutes"` // 支持国内省份线路 - SupportISPRoutes bool `json:"supportISPRoutes"` // 支持ISP运营商线路 - MaxCustomRoutes int32 `json:"maxCustomRoutes"` // 自定义的线路数量 - MinTTL int32 `json:"minTTL"` // 最小TTL - MaxDomains int32 `json:"maxDomains"` // 域名数量 - MaxRecordsPerDomain int32 `json:"maxRecordsPerDomain"` // 单域名记录数量 - MaxLoadBalanceRecordsPerRecord int32 `json:"maxLoadBalanceRecordsPerRecord"` // 单记录负载均衡条数 - SupportRecordStats bool `json:"supportRecordStats"` // 支持记录统计 - SupportDomainAlias bool `json:"supportDomainAlias"` // 支持域名别名 TODO - - SupportAPI bool `json:"supportAPI"` // 是否支持API操作 TODO -} - -func DefaultNSPlanConfig() *NSPlanConfig { - return &NSPlanConfig{} -} - -func (this *NSPlanConfig) Init() error { - return nil -} diff --git a/pkg/dnsconfigs/ns_recursion_config.go b/pkg/dnsconfigs/ns_recursion_config.go deleted file mode 100644 index 1e86b19..0000000 --- a/pkg/dnsconfigs/ns_recursion_config.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. - -package dnsconfigs - -type NSDNSHost struct { - Host string `json:"host"` - Port int `json:"port"` - Protocol string `json:"protocol"` -} - -// NSRecursionConfig 递归DNS设置 -type NSRecursionConfig struct { - IsOn bool `json:"isOn"` - Hosts []*NSDNSHost `json:"hosts"` - UseLocalHosts bool `json:"useLocalHosts"` // 自动从本机读取DNS - AllowDomains []string `json:"allowDomains"` - DenyDomains []string `json:"denyDomains"` -} - -func (this *NSRecursionConfig) Init() error { - return nil -} diff --git a/pkg/dnsconfigs/ns_route_ranges.go b/pkg/dnsconfigs/ns_route_ranges.go deleted file mode 100644 index 0ca7317..0000000 --- a/pkg/dnsconfigs/ns_route_ranges.go +++ /dev/null @@ -1,262 +0,0 @@ -// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. - -package dnsconfigs - -import ( - "encoding/json" - "errors" - "github.com/TeaOSLab/EdgeCommon/pkg/configutils" - "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared" - "github.com/iwind/TeaGo/maps" - "net" -) - -type NSRouteRangeType = string - -const ( - NSRouteRangeTypeIP NSRouteRangeType = "ipRange" // IP范围 - NSRouteRangeTypeCIDR NSRouteRangeType = "cidr" // CIDR - NSRouteRangeTypeRegion NSRouteRangeType = "region" // 区域 -) - -func AllNSRouteRangeTypes() []*shared.Definition { - return []*shared.Definition{ - { - Name: "IP范围", - Code: NSRouteRangeTypeIP, - }, - { - Name: "CIDR", - Code: NSRouteRangeTypeCIDR, - }, - { - Name: "区域", - Code: NSRouteRangeTypeRegion, - }, - } -} - -// NSRouteRegionResolver 解析IP接口 -type NSRouteRegionResolver interface { - Resolve(ip net.IP) (countryId int64, provinceId int64, cityId int64, providerId int64) -} - -// NSRouteRangeInterface 线路范围接口 -type NSRouteRangeInterface interface { - // Init 初始化 - Init() error - - // Contains 判断是否包含 - Contains(ip net.IP) bool - - // SetRegionResolver 设置IP解析接口 - SetRegionResolver(resolver NSRouteRegionResolver) - - // IsExcluding 是否为排除 - IsExcluding() bool -} - -type NSBaseRouteRange struct { - IsReverse bool `json:"isReverse"` - - routeRegionResolver NSRouteRegionResolver -} - -func (this *NSBaseRouteRange) SetRegionResolver(resolver NSRouteRegionResolver) { - this.routeRegionResolver = resolver -} - -func (this *NSBaseRouteRange) IsExcluding() bool { - return this.IsReverse -} - -// NSRouteRangeIPRange IP范围配置 -// IPv4和IPv6不能混用 -type NSRouteRangeIPRange struct { - NSBaseRouteRange - - IPFrom string `json:"ipFrom"` - IPTo string `json:"ipTo"` - - ipFromLong uint64 - ipToLong uint64 - - ipVersion int // 4|6 -} - -func (this *NSRouteRangeIPRange) Init() error { - var ipFrom = net.ParseIP(this.IPFrom) - var ipTo = net.ParseIP(this.IPTo) - if ipFrom == nil { - return errors.New("invalid ipFrom '" + this.IPFrom + "'") - } - if ipTo == nil { - return errors.New("invalid ipTo '" + this.IPTo + "'") - } - - var ipFromVersion = configutils.IPVersion(ipFrom) - var ipToVersion = configutils.IPVersion(ipTo) - if ipFromVersion != ipToVersion { - return errors.New("ipFrom and ipTo version are not same") - } - this.ipVersion = ipFromVersion - - this.ipFromLong = configutils.IP2Long(ipFrom) - this.ipToLong = configutils.IP2Long(ipTo) - - if this.ipFromLong > this.ipToLong { - this.ipFromLong, this.ipToLong = this.ipToLong, this.ipFromLong - } - - return nil -} - -func (this *NSRouteRangeIPRange) Contains(netIP net.IP) bool { - if len(netIP) == 0 { - return false - } - - var version = configutils.IPVersion(netIP) - if version != this.ipVersion { - return false - } - - var ipLong = configutils.IP2Long(netIP) - return ipLong >= this.ipFromLong && ipLong <= this.ipToLong -} - -// NSRouteRangeCIDR CIDR范围配置 -type NSRouteRangeCIDR struct { - NSBaseRouteRange - - CIDR string `json:"cidr"` - - cidr *net.IPNet -} - -func (this *NSRouteRangeCIDR) Init() error { - _, ipNet, err := net.ParseCIDR(this.CIDR) - if err != nil { - return errors.New("parse cidr failed: " + err.Error()) - } - - this.cidr = ipNet - - return nil -} - -func (this *NSRouteRangeCIDR) Contains(netIP net.IP) bool { - if netIP == nil { - return false - } - - if this.cidr == nil { - return false - } - - return this.cidr.Contains(netIP) -} - -// NSRouteRangeRegion 区域范围 -// country:ID, province:ID, city:ID, isp:ID -type NSRouteRangeRegion struct { - NSBaseRouteRange - - Regions []*routeRegion `json:"regions"` -} - -func (this *NSRouteRangeRegion) Init() error { - return nil -} - -func (this *NSRouteRangeRegion) Contains(netIP net.IP) bool { - if this.routeRegionResolver == nil { - return false - } - - if len(this.Regions) == 0 { - return false - } - - countryId, provinceId, cityId, providerId := this.routeRegionResolver.Resolve(netIP) - if countryId <= 0 && provinceId <= 0 && cityId <= 0 && providerId <= 0 { - return false - } - - for _, region := range this.Regions { - if region.Id <= 0 { - continue - } - - switch region.Type { - case "country": - if region.Id == countryId { - return true - } - case "province": - if region.Id == provinceId { - return true - } - case "city": - if region.Id == cityId { - return true - } - case "isp": - if region.Id == providerId { - return true - } - } - } - - return false -} - -type routeRegion struct { - Type string `json:"type"` // country|province|city|isp - Id int64 `json:"id"` - Name string `json:"name"` -} - -// InitNSRangesFromJSON 从JSON中初始化线路范围 -func InitNSRangesFromJSON(rangesJSON []byte) (ranges []NSRouteRangeInterface, err error) { - if len(rangesJSON) == 0 { - return - } - - var rangeMaps = []maps.Map{} - err = json.Unmarshal(rangesJSON, &rangeMaps) - if err != nil { - return nil, err - } - for _, rangeMap := range rangeMaps { - var rangeType = rangeMap.GetString("type") - paramsJSON, err := json.Marshal(rangeMap.Get("params")) - if err != nil { - return nil, err - } - - var r NSRouteRangeInterface - - switch rangeType { - case NSRouteRangeTypeIP: - r = &NSRouteRangeIPRange{} - case NSRouteRangeTypeCIDR: - r = &NSRouteRangeCIDR{} - case NSRouteRangeTypeRegion: - r = &NSRouteRangeRegion{} - default: - return nil, errors.New("invalid route line type '" + rangeType + "'") - } - - err = json.Unmarshal(paramsJSON, r) - if err != nil { - return nil, err - } - err = r.Init() - if err != nil { - return nil, err - } - ranges = append(ranges, r) - } - return -} diff --git a/pkg/dnsconfigs/ns_route_ranges_test.go b/pkg/dnsconfigs/ns_route_ranges_test.go deleted file mode 100644 index 4bdf152..0000000 --- a/pkg/dnsconfigs/ns_route_ranges_test.go +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn . - -package dnsconfigs - -import ( - "github.com/iwind/TeaGo/assert" - "net" - "testing" -) - -func TestNSRouteRangeIPRange_Contains(t *testing.T) { - var a = assert.NewAssertion(t) - - // ipv4 - { - var r = &NSRouteRangeIPRange{ - IPFrom: "192.168.1.100", - IPTo: "192.168.3.200", - } - err := r.Init() - if err != nil { - t.Fatal(err) - } - a.IsFalse(r.Contains(net.ParseIP("aaa"))) - a.IsTrue(r.Contains(net.ParseIP("192.168.1.200"))) - a.IsTrue(r.Contains(net.ParseIP("192.168.3.200"))) - a.IsFalse(r.Contains(net.ParseIP("192.168.4.1"))) - a.IsFalse(r.Contains(net.ParseIP("::1"))) - } - - // ipv6 - { - var prefix = "1:2:3:4:5:6" - var r = &NSRouteRangeIPRange{ - IPFrom: prefix + ":1:8", - IPTo: prefix + ":5:10", - } - err := r.Init() - if err != nil { - t.Fatal(err) - } - a.IsFalse(r.Contains(net.ParseIP("aaa"))) - a.IsTrue(r.Contains(net.ParseIP(prefix + ":3:4"))) - a.IsTrue(r.Contains(net.ParseIP(prefix + ":5:9"))) - a.IsTrue(r.Contains(net.ParseIP(prefix + ":5:10"))) - a.IsTrue(r.Contains(net.ParseIP(prefix + ":4:8"))) - a.IsFalse(r.Contains(net.ParseIP(prefix + ":5:11"))) - } - - { - var r = &NSRouteRangeCIDR{ - CIDR: "192.168.2.1/24", - } - err := r.Init() - if err != nil { - t.Fatal(err) - } - a.IsFalse(r.Contains(net.ParseIP("aaa"))) - a.IsTrue(r.Contains(net.ParseIP("192.168.2.1"))) - a.IsTrue(r.Contains(net.ParseIP("192.168.2.254"))) - a.IsTrue(r.Contains(net.ParseIP("192.168.2.100"))) - a.IsFalse(r.Contains(net.ParseIP("192.168.3.1"))) - a.IsFalse(r.Contains(net.ParseIP("192.168.1.1"))) - } - - // reverse ipv4 - { - var r = &NSRouteRangeIPRange{ - IPFrom: "192.168.1.100", - IPTo: "192.168.3.200", - } - err := r.Init() - if err != nil { - t.Fatal(err) - } - a.IsFalse(r.Contains(net.ParseIP("aaa"))) - a.IsTrue(r.Contains(net.ParseIP("192.168.1.200"))) - a.IsTrue(r.Contains(net.ParseIP("192.168.3.200"))) - a.IsFalse(r.Contains(net.ParseIP("192.168.4.1"))) - } - - // reverse cidr - { - var r = &NSRouteRangeCIDR{ - CIDR: "192.168.2.1/24", - } - err := r.Init() - if err != nil { - t.Fatal(err) - } - a.IsFalse(r.Contains(net.ParseIP("aaa"))) - a.IsTrue(r.Contains(net.ParseIP("192.168.2.1"))) - a.IsTrue(r.Contains(net.ParseIP("192.168.2.254"))) - a.IsTrue(r.Contains(net.ParseIP("192.168.2.100"))) - a.IsFalse(r.Contains(net.ParseIP("192.168.3.1"))) - a.IsFalse(r.Contains(net.ParseIP("192.168.1.1"))) - } -} diff --git a/pkg/dnsconfigs/ns_routes.go b/pkg/dnsconfigs/ns_routes.go deleted file mode 100644 index 182bdc0..0000000 --- a/pkg/dnsconfigs/ns_routes.go +++ /dev/null @@ -1,1532 +0,0 @@ -// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. - -package dnsconfigs - -type RouteCode = string - -type Route struct { - Name string `json:"name"` - Code string `json:"code"` - AliasNames []string `json:"aliasNames"` -} - -var allDefaultRouteMapping = map[string]*Route{} // code => *Route - -func init() { - for _, route := range AllDefaultRoutes { - allDefaultRouteMapping[route.Code] = route - } - for _, route := range AllDefaultISPRoutes { - allDefaultRouteMapping[route.Code] = route - } - for _, route := range AllDefaultChinaProvinceRoutes { - allDefaultRouteMapping[route.Code] = route - } - for _, route := range AllDefaultWorldRegionRoutes { - allDefaultRouteMapping[route.Code] = route - } -} - -// AllDefaultRoutes 默认线路 -var AllDefaultRoutes = []*Route{ - { - Name: "默认线路", - Code: DefaultRouteCode, - AliasNames: []string{"默认线路"}, - }, -} - -const DefaultRouteCode = "default" - -// AllDefaultISPRoutes 运营商线路 -var AllDefaultISPRoutes = []*Route{ - { - Name: "电信", - Code: "isp:china_telecom", - AliasNames: []string{"电信"}, - }, - { - Name: "联通", - Code: "isp:china_unicom", - AliasNames: []string{"联通"}, - }, - { - Name: "移动", - Code: "isp:china_mobile", - AliasNames: []string{"移动"}, - }, - { - Name: "鹏博士", - Code: "isp:china_drpeng", - AliasNames: []string{"鹏博士"}, - }, - { - Name: "教育网", - Code: "isp:china_edu", - AliasNames: []string{"教育网"}, - }, - { - Name: "歌华", - Code: "isp:china_gehua", - AliasNames: []string{"歌华"}, - }, - { - Name: "铁通", - Code: "isp:china_tietong", - AliasNames: []string{"铁通"}, - }, - { - Name: "阿里巴巴", - Code: "isp:alibaba", - AliasNames: []string{"阿里巴巴"}, - }, - { - Name: "亚马逊", - Code: "isp:amazon", - AliasNames: []string{"亚马逊"}, - }, - { - Name: "谷歌", - Code: "isp:google", - AliasNames: []string{"谷歌"}, - }, - { - Name: "微软", - Code: "isp:microsoft", - AliasNames: []string{"微软"}, - }, - { - Name: "腾讯", - Code: "isp:tencent", - AliasNames: []string{"腾讯"}, - }, - { - Name: "阿里云", - Code: "isp:aliyun", - AliasNames: []string{"阿里云"}, - }, -} - -const ( - ChinaProvinceCodeHK RouteCode = "china:province:hk" - ChinaProvinceCodeMO RouteCode = "china:province:mo" - ChinaProvinceCodeTW RouteCode = "china:province:tw" -) - -// AllDefaultChinaProvinceRoutes 中国地域线路 -var AllDefaultChinaProvinceRoutes = []*Route{ - { - Name: "北京市", - Code: "china:province:beijing", - AliasNames: []string{"北京市", "北京"}, - }, - { - Name: "天津市", - Code: "china:province:tianjin", - AliasNames: []string{"天津市", "天津"}, - }, - { - Name: "河北省", - Code: "china:province:heibei", - AliasNames: []string{"河北省", "河北"}, - }, - { - Name: "山西省", - Code: "china:province:shanxi", - AliasNames: []string{"山西省", "山西"}, - }, - { - Name: "内蒙古自治区", - Code: "china:province:neimenggu", - AliasNames: []string{"内蒙古自治区", "内蒙古"}, - }, - { - Name: "辽宁省", - Code: "china:province:liaoning", - AliasNames: []string{"辽宁省", "辽宁"}, - }, - { - Name: "吉林省", - Code: "china:jilin", - AliasNames: []string{"吉林省", "吉林"}, - }, - { - Name: "黑龙江省", - Code: "china:province:heilongjiang", - AliasNames: []string{"黑龙江省", "黑龙江"}, - }, - { - Name: "上海市", - Code: "china:province:shanghai", - AliasNames: []string{"上海市", "上海"}, - }, - { - Name: "江苏省", - Code: "china:province:jiangsu", - AliasNames: []string{"江苏省", "江苏"}, - }, - { - Name: "浙江省", - Code: "china:province:zhejiang", - AliasNames: []string{"浙江省", "浙江"}, - }, - { - Name: "安徽省", - Code: "china:province:anhui", - AliasNames: []string{"安徽省", "安徽"}, - }, - { - Name: "福建省", - Code: "china:province:fujian", - AliasNames: []string{"福建省", "福建"}, - }, - { - Name: "江西省", - Code: "china:province:jiangxi", - AliasNames: []string{"江西省", "江西"}, - }, - { - Name: "山东省", - Code: "china:province:shandong", - AliasNames: []string{"山东省", "山东"}, - }, - { - Name: "河南省", - Code: "china:province:henan", - AliasNames: []string{"河南省", "河南"}, - }, - { - Name: "湖北省", - Code: "china:province:hubei", - AliasNames: []string{"湖北省", "湖北"}, - }, - { - Name: "湖南省", - Code: "china:province:hunan", - AliasNames: []string{"湖南省", "湖南"}, - }, - { - Name: "广东省", - Code: "china:province:guangdong", - AliasNames: []string{"广东省", "广东"}, - }, - { - Name: "广西壮族自治区", - Code: "china:province:guangxi", - AliasNames: []string{"广西壮族自治区", "广西"}, - }, - { - Name: "海南省", - Code: "china:province:hainan", - AliasNames: []string{"海南省", "海南"}, - }, - { - Name: "重庆市", - Code: "china:province:chongqing", - AliasNames: []string{"重庆市", "重庆"}, - }, - { - Name: "四川省", - Code: "china:province:sichuan", - AliasNames: []string{"四川省", "四川"}, - }, - { - Name: "贵州省", - Code: "china:province:guizhou", - AliasNames: []string{"贵州省", "贵州"}, - }, - { - Name: "云南省", - Code: "china:province:yunnan", - AliasNames: []string{"云南省", "云南"}, - }, - { - Name: "西藏自治区", - Code: "china:province:xizang", - AliasNames: []string{"西藏自治区", "西藏"}, - }, - { - Name: "陕西省", - Code: "china:province:shaanxi", - AliasNames: []string{"陕西省", "陕西"}, - }, - { - Name: "甘肃省", - Code: "china:province:gansu", - AliasNames: []string{"甘肃省", "甘肃"}, - }, - { - Name: "青海省", - Code: "china:province:qinghai", - AliasNames: []string{"青海省", "青海"}, - }, - { - Name: "宁夏回族自治区", - Code: "china:province:ningxia", - AliasNames: []string{"宁夏回族自治区", "宁夏"}, - }, - { - Name: "新疆维吾尔自治区", - Code: "china:province:xinjiang", - AliasNames: []string{"新疆维吾尔自治区", "新疆"}, - }, - { - Name: "香港特别行政区", - Code: ChinaProvinceCodeHK, - AliasNames: []string{"香港特别行政区", "香港"}, - }, - { - Name: "澳门特别行政区", - Code: ChinaProvinceCodeMO, - AliasNames: []string{"澳门特别行政区", "澳门"}, - }, - { - Name: "台湾省", - Code: ChinaProvinceCodeTW, - AliasNames: []string{"台湾省", "台湾"}, - }, -} - -const ( - WorldRegionCodeChina RouteCode = "world:CN" - WorldRegionCodeHK RouteCode = "world:CN:hk" - WorldRegionCodeMO RouteCode = "world:CN:mo" - WorldRegionCodeTW RouteCode = "world:CN:tw" - WorldRegionCodeChinaMainland RouteCode = "world:CN:mainland" - WorldRegionCodeChinaAbroad RouteCode = "world:CN:abroad" -) - -// AllDefaultWorldRegionRoutes 世界地域线路 -// 参考:https://zh.wikipedia.org/wiki/%E5%9C%8B%E5%AE%B6%E5%9C%B0%E5%8D%80%E4%BB%A3%E7%A2%BC -var AllDefaultWorldRegionRoutes = []*Route{ - { - Name: "中国全境", - Code: WorldRegionCodeChina, - AliasNames: []string{"中国"}, - }, - { - Name: "中国香港", - Code: WorldRegionCodeHK, - AliasNames: []string{"中国香港地区"}, - }, - { - Name: "中国澳门", - Code: WorldRegionCodeMO, - AliasNames: []string{"中国澳门地区"}, - }, - { - Name: "中国台湾", - Code: WorldRegionCodeTW, - AliasNames: []string{"中国台湾地区"}, - }, - { - Name: "中国大陆", - Code: WorldRegionCodeChinaMainland, - AliasNames: []string{"中国大陆大区"}, - }, - { - Name: "海外", - Code: WorldRegionCodeChinaAbroad, - AliasNames: []string{"中国海外地区"}, - }, - { - Name: "蒙古", - Code: "world:MN", - AliasNames: []string{"蒙古"}, - }, - { - Name: "朝鲜", - Code: "world:KP", - AliasNames: []string{"朝鲜"}, - }, - { - Name: "韩国", - Code: "world:KR", - AliasNames: []string{"韩国"}, - }, - { - Name: "日本", - Code: "world:JP", - AliasNames: []string{"日本"}, - }, - { - Name: "菲律宾", - Code: "world:PH", - AliasNames: []string{"菲律宾"}, - }, - { - Name: "越南", - Code: "world:VN", - AliasNames: []string{"越南"}, - }, - { - Name: "老挝", - Code: "world:LA", - AliasNames: []string{"老挝"}, - }, - { - Name: "柬埔寨", - Code: "world:KH", - AliasNames: []string{"柬埔寨"}, - }, - { - Name: "缅甸", - Code: "world:MM", - AliasNames: []string{"缅甸"}, - }, - { - Name: "泰国", - Code: "world:TH", - AliasNames: []string{"泰国"}, - }, - { - Name: "马来西亚", - Code: "world:MY", - AliasNames: []string{"马来西亚"}, - }, - { - Name: "文莱", - Code: "world:BN", - AliasNames: []string{"文莱"}, - }, - { - Name: "新加坡", - Code: "world:SG", - AliasNames: []string{"新加坡"}, - }, - { - Name: "印度尼西亚", - Code: "world:ID", - AliasNames: []string{"印度尼西亚"}, - }, - { - Name: "东帝汶", - Code: "world:TL", - AliasNames: []string{"东帝汶"}, - }, - { - Name: "尼泊尔", - Code: "world:NP", - AliasNames: []string{"尼泊尔"}, - }, - { - Name: "不丹", - Code: "world:BT", - AliasNames: []string{"不丹"}, - }, - { - Name: "孟加拉国", - Code: "world:BD", - AliasNames: []string{"孟加拉国", "孟加拉"}, - }, - { - Name: "印度", - Code: "world:IN", - AliasNames: []string{"印度"}, - }, - { - Name: "巴基斯坦", - Code: "world:PK", - AliasNames: []string{"巴基斯坦"}, - }, - { - Name: "斯里兰卡", - Code: "world:LK", - AliasNames: []string{"斯里兰卡"}, - }, - { - Name: "马尔代夫", - Code: "world:MV", - AliasNames: []string{"马尔代夫"}, - }, - { - Name: "哈萨克斯坦", - Code: "world:KZ", - AliasNames: []string{"哈萨克斯坦"}, - }, - { - Name: "吉尔吉斯斯坦", - Code: "world:KG", - AliasNames: []string{"吉尔吉斯斯坦"}, - }, - { - Name: "塔吉克斯坦", - Code: "world:TJ", - AliasNames: []string{"塔吉克斯坦"}, - }, - { - Name: "乌兹别克斯坦", - Code: "world:UZ", - AliasNames: []string{"乌兹别克斯坦"}, - }, - { - Name: "土库曼斯坦", - Code: "world:TM", - AliasNames: []string{"土库曼斯坦"}, - }, - { - Name: "阿富汗", - Code: "world:AF", - AliasNames: []string{"阿富汗"}, - }, - { - Name: "伊拉克", - Code: "world:IQ", - AliasNames: []string{"伊拉克"}, - }, - { - Name: "伊朗", - Code: "world:IR", - AliasNames: []string{"伊朗"}, - }, - { - Name: "叙利亚", - Code: "world:SY", - AliasNames: []string{"叙利亚"}, - }, - { - Name: "约旦", - Code: "world:JO", - AliasNames: []string{"约旦"}, - }, - { - Name: "黎巴嫩", - Code: "world:LB", - AliasNames: []string{"黎巴嫩"}, - }, - { - Name: "以色列", - Code: "world:IL", - AliasNames: []string{"以色列"}, - }, - { - Name: "巴勒斯坦", - Code: "world:PS", - AliasNames: []string{"巴勒斯坦"}, - }, - { - Name: "沙特阿拉伯", - Code: "world:SA", - AliasNames: []string{"沙特阿拉伯"}, - }, - { - Name: "巴林", - Code: "world:BH", - AliasNames: []string{"巴林"}, - }, - { - Name: "卡塔尔", - Code: "world:QA", - AliasNames: []string{"卡塔尔"}, - }, - { - Name: "科威特", - Code: "world:KW", - AliasNames: []string{"科威特"}, - }, - { - Name: "阿拉伯联合酋长国", - Code: "world:UAR", - AliasNames: []string{"阿拉伯联合酋长国", "阿联酋"}, - }, - { - Name: "阿曼", - Code: "world:OM", - AliasNames: []string{"阿曼"}, - }, - { - Name: "也门", - Code: "world:YE", - AliasNames: []string{"也门"}, - }, - { - Name: "格鲁吉亚", - Code: "world:GE", - AliasNames: []string{"格鲁吉亚"}, - }, - { - Name: "亚美尼亚", - Code: "world:AM", - AliasNames: []string{"亚美尼亚"}, - }, - { - Name: "阿塞拜疆", - Code: "world:AZ", - AliasNames: []string{"阿塞拜疆"}, - }, - { - Name: "土耳其", - Code: "world:TR", - AliasNames: []string{"土耳其"}, - }, - { - Name: "塞浦路斯", - Code: "world:CY", - AliasNames: []string{"塞浦路斯"}, - }, - { - Name: "芬兰", - Code: "world:FI", - AliasNames: []string{"芬兰"}, - }, - { - Name: "瑞典", - Code: "world:SE", - AliasNames: []string{"瑞典"}, - }, - { - Name: "挪威", - Code: "world:NO", - AliasNames: []string{"挪威"}, - }, - { - Name: "冰岛", - Code: "world:IS", - AliasNames: []string{"冰岛"}, - }, - { - Name: "丹麦", - Code: "world:DK", - AliasNames: []string{"丹麦"}, - }, - { - Name: "爱沙尼亚", - Code: "world:EE", - AliasNames: []string{"爱沙尼亚"}, - }, - { - Name: "拉脱维亚", - Code: "world:LV", - AliasNames: []string{"拉脱维亚"}, - }, - { - Name: "立陶宛", - Code: "world:LT", - AliasNames: []string{"立陶宛"}, - }, - { - Name: "白俄罗斯", - Code: "world:BY", - AliasNames: []string{"白俄罗斯"}, - }, - { - Name: "俄罗斯", - Code: "world:RU", - AliasNames: []string{"俄罗斯"}, - }, - { - Name: "乌克兰", - Code: "world:UA", - AliasNames: []string{"乌克兰"}, - }, - { - Name: "摩尔多瓦", - Code: "world:MD", - AliasNames: []string{"摩尔多瓦"}, - }, - { - Name: "波兰", - Code: "world:PL", - AliasNames: []string{"波兰"}, - }, - { - Name: "捷克", - Code: "world:CZ", - AliasNames: []string{"捷克"}, - }, - { - Name: "斯洛伐克", - Code: "world:SK", - AliasNames: []string{"斯洛伐克"}, - }, - { - Name: "匈牙利", - Code: "world:HU", - AliasNames: []string{"匈牙利"}, - }, - { - Name: "德国", - Code: "world:DE", - AliasNames: []string{"德国"}, - }, - { - Name: "奥地利", - Code: "world:AT", - AliasNames: []string{"奥地利"}, - }, - { - Name: "瑞士", - Code: "world:CH", - AliasNames: []string{"瑞士"}, - }, - { - Name: "列支敦士登", - Code: "world:LI", - AliasNames: []string{"列支敦士登"}, - }, - { - Name: "英国", - Code: "world:GB", - AliasNames: []string{"英国"}, - }, - { - Name: "爱尔兰", - Code: "world:IE", - AliasNames: []string{"爱尔兰"}, - }, - { - Name: "荷兰", - Code: "world:NL", - AliasNames: []string{"荷兰"}, - }, - { - Name: "比利时", - Code: "world:BE", - AliasNames: []string{"比利时"}, - }, - { - Name: "卢森堡", - Code: "world:LU", - AliasNames: []string{"卢森堡"}, - }, - { - Name: "法国", - Code: "world:FR", - AliasNames: []string{"法国"}, - }, - { - Name: "摩纳哥", - Code: "world:MC", - AliasNames: []string{"摩纳哥"}, - }, - { - Name: "罗马尼亚", - Code: "world:RO", - AliasNames: []string{"罗马尼亚"}, - }, - { - Name: "保加利亚", - Code: "world:BG", - AliasNames: []string{"保加利亚"}, - }, - { - Name: "塞尔维亚", - Code: "world:RS", - AliasNames: []string{"塞尔维亚"}, - }, - { - Name: "马其顿", - Code: "world:MK", - AliasNames: []string{"马其顿"}, - }, - { - Name: "阿尔巴尼亚", - Code: "world:AL", - AliasNames: []string{"阿尔巴尼亚"}, - }, - { - Name: "希腊", - Code: "world:GR", - AliasNames: []string{"希腊"}, - }, - { - Name: "斯洛文尼亚", - Code: "world:SI", - AliasNames: []string{"斯洛文尼亚"}, - }, - { - Name: "克罗地亚", - Code: "world:HR", - AliasNames: []string{"克罗地亚"}, - }, - { - Name: "意大利", - Code: "world:IT", - AliasNames: []string{"意大利"}, - }, - { - Name: "梵蒂冈", - Code: "world:VA", - AliasNames: []string{"梵蒂冈"}, - }, - { - Name: "圣马力诺", - Code: "world:SM", - AliasNames: []string{"圣马力诺"}, - }, - { - Name: "马耳他", - Code: "world:MT", - AliasNames: []string{"马耳他"}, - }, - { - Name: "西班牙", - Code: "world:ES", - AliasNames: []string{"西班牙"}, - }, - { - Name: "葡萄牙", - Code: "world:PT", - AliasNames: []string{"葡萄牙"}, - }, - { - Name: "安道尔共和国", - Code: "world:AD", - AliasNames: []string{"安道尔共和国", "安道尔"}, - }, - { - Name: "埃及", - Code: "world:EG", - AliasNames: []string{"埃及"}, - }, - { - Name: "利比亚", - Code: "world:LY", - AliasNames: []string{"利比亚"}, - }, - { - Name: "苏丹", - Code: "world:SD", - AliasNames: []string{"苏丹"}, - }, - { - Name: "突尼斯", - Code: "world:TN", - AliasNames: []string{"突尼斯"}, - }, - { - Name: "阿尔及利亚", - Code: "world:DZ", - AliasNames: []string{"阿尔及利亚"}, - }, - { - Name: "摩洛哥", - Code: "world:MA", - AliasNames: []string{"摩洛哥"}, - }, - { - Name: "埃塞俄比亚", - Code: "world:ET", - AliasNames: []string{"埃塞俄比亚"}, - }, - { - Name: "厄立特里亚", - Code: "world:ER", - AliasNames: []string{"厄立特里亚"}, - }, - { - Name: "索马里", - Code: "world:SO", - AliasNames: []string{"索马里"}, - }, - { - Name: "吉布提", - Code: "world:DJ", - AliasNames: []string{"吉布提"}, - }, - { - Name: "肯尼亚", - Code: "world:KE", - AliasNames: []string{"肯尼亚"}, - }, - { - Name: "坦桑尼亚", - Code: "world:TZ", - AliasNames: []string{"坦桑尼亚"}, - }, - { - Name: "乌干达", - Code: "world:UG", - AliasNames: []string{"乌干达"}, - }, - { - Name: "卢旺达", - Code: "world:RW", - AliasNames: []string{"卢旺达"}, - }, - { - Name: "布隆迪", - Code: "world:BI", - AliasNames: []string{"布隆迪"}, - }, - { - Name: "塞舌尔", - Code: "world:SC", - AliasNames: []string{"塞舌尔"}, - }, - { - Name: "圣多美和普林西比", - Code: "world:ST", - AliasNames: []string{"圣多美及普林西比", "圣多美和普林西比"}, - }, - { - Name: "塞内加尔", - Code: "world:SN", - AliasNames: []string{"塞内加尔"}, - }, - { - Name: "冈比亚", - Code: "world:GM", - AliasNames: []string{"冈比亚"}, - }, - { - Name: "马里", - Code: "world:ML", - AliasNames: []string{"马里"}, - }, - { - Name: "布基纳法索", - Code: "world:BF", - AliasNames: []string{"布基纳法索"}, - }, - { - Name: "几内亚", - Code: "world:GN", - AliasNames: []string{"几内亚"}, - }, - { - Name: "几内亚比绍", - Code: "world:GW", - AliasNames: []string{"几内亚比绍"}, - }, - { - Name: "佛得角", - Code: "world:CV", - AliasNames: []string{"佛得角"}, - }, - { - Name: "塞拉利昂", - Code: "world:SL", - AliasNames: []string{"塞拉利昂"}, - }, - { - Name: "利比里亚", - Code: "world:LR", - AliasNames: []string{"利比里亚"}, - }, - { - Name: "科特迪瓦", - Code: "world:CI", - AliasNames: []string{"科特迪瓦"}, - }, - { - Name: "加纳", - Code: "world:GH", - AliasNames: []string{"加纳"}, - }, - { - Name: "多哥", - Code: "world:TG", - AliasNames: []string{"多哥"}, - }, - { - Name: "贝宁", - Code: "world:BJ", - AliasNames: []string{"贝宁"}, - }, - { - Name: "尼日尔", - Code: "world:NE", - AliasNames: []string{"尼日尔"}, - }, - { - Name: "赞比亚", - Code: "world:ZM", - AliasNames: []string{"赞比亚"}, - }, - { - Name: "安哥拉", - Code: "world:AO", - AliasNames: []string{"安哥拉"}, - }, - { - Name: "津巴布韦", - Code: "world:ZW", - AliasNames: []string{"津巴布韦"}, - }, - { - Name: "马拉维", - Code: "world:MW", - AliasNames: []string{"马拉维"}, - }, - { - Name: "莫桑比克", - Code: "world:MZ", - AliasNames: []string{"莫桑比克"}, - }, - { - Name: "博茨瓦纳", - Code: "world:BW", - AliasNames: []string{"博茨瓦纳"}, - }, - { - Name: "纳米比亚", - Code: "world:NA", - AliasNames: []string{"纳米比亚"}, - }, - { - Name: "南非", - Code: "world:ZA", - AliasNames: []string{"南非"}, - }, - { - Name: "斯威士兰", - Code: "world:SZ", - AliasNames: []string{"斯威士兰"}, - }, - { - Name: "莱索托", - Code: "world:LS", - AliasNames: []string{"莱索托"}, - }, - { - Name: "马达加斯加", - Code: "world:MG", - AliasNames: []string{"马达加斯加"}, - }, - { - Name: "科摩罗", - Code: "world:KM", - AliasNames: []string{"科摩罗"}, - }, - { - Name: "毛里求斯", - Code: "world:MU", - AliasNames: []string{"毛里求斯"}, - }, - { - Name: "留尼汪", - Code: "world:RE", - AliasNames: []string{"留尼旺", "留尼汪", "留尼汪岛"}, - }, - { - Name: "圣赫勒拿", - Code: "world:SH", - AliasNames: []string{"圣赫勒拿"}, - }, - { - Name: "澳大利亚", - Code: "world:AU", - AliasNames: []string{"澳大利亚"}, - }, - { - Name: "新西兰", - Code: "world:NZ", - AliasNames: []string{"新西兰"}, - }, - { - Name: "巴布亚新几内亚", - Code: "world:PG", - AliasNames: []string{"巴布亚新几内亚"}, - }, - { - Name: "所罗门群岛", - Code: "world:SB", - AliasNames: []string{"所罗门群岛"}, - }, - { - Name: "瓦努阿图共和国", - Code: "world:VU", - AliasNames: []string{"瓦努阿图共和国", "瓦努阿图"}, - }, - { - Name: "密克罗尼西亚", - Code: "world:FM", - AliasNames: []string{"密克罗尼西亚"}, - }, - { - Name: "马绍尔群岛", - Code: "world:MH", - AliasNames: []string{"马绍尔群岛"}, - }, - { - Name: "帕劳", - Code: "world:PW", - AliasNames: []string{"帕劳"}, - }, - { - Name: "瑙鲁", - Code: "world:NR", - AliasNames: []string{"瑙鲁"}, - }, - { - Name: "基里巴斯", - Code: "world:KI", - AliasNames: []string{"基里巴斯"}, - }, - { - Name: "图瓦卢", - Code: "world:TV", - AliasNames: []string{"图瓦卢"}, - }, - { - Name: "萨摩亚", - Code: "world:WS", - AliasNames: []string{"萨摩亚"}, - }, - { - Name: "斐济", - Code: "world:FJ", - AliasNames: []string{"斐济"}, - }, - { - Name: "汤加", - Code: "world:TO", - AliasNames: []string{"汤加"}, - }, - { - Name: "库克群岛", - Code: "world:CK", - AliasNames: []string{"库克群岛"}, - }, - { - Name: "关岛", - Code: "world:GU", - AliasNames: []string{"关岛"}, - }, - { - Name: "新喀里多尼亚", - Code: "world:NC", - AliasNames: []string{"新喀里多尼亚"}, - }, - { - Name: "法属波利尼西亚", - Code: "world:PF", - AliasNames: []string{"法属波利尼西亚"}, - }, - { - Name: "皮特凯恩岛", - Code: "world:PN", - AliasNames: []string{"皮特凯恩岛"}, - }, - { - Name: "瓦利斯与富图纳", - Code: "world:WF", - AliasNames: []string{"瓦利斯与富图纳", "瓦利斯和富图纳"}, - }, - { - Name: "纽埃", - Code: "world:NU", - AliasNames: []string{"纽埃"}, - }, - { - Name: "托克劳", - Code: "world:TK", - AliasNames: []string{"托克劳", "托克劳群岛"}, - }, - { - Name: "美属萨摩亚", - Code: "world:AS", - AliasNames: []string{"美属萨摩亚"}, - }, - { - Name: "北马里亚纳", - Code: "world:MP", - AliasNames: []string{"北马里亚纳", "北马里亚纳群岛"}, - }, - { - Name: "加拿大", - Code: "world:CA", - AliasNames: []string{"加拿大"}, - }, - { - Name: "美国", - Code: "world:US", - AliasNames: []string{"美国"}, - }, - { - Name: "墨西哥", - Code: "world:MX", - AliasNames: []string{"墨西哥"}, - }, - { - Name: "格陵兰", - Code: "world:GL", - AliasNames: []string{"格陵兰", "格陵兰岛"}, - }, - { - Name: "危地马拉", - Code: "world:GT", - AliasNames: []string{"危地马拉"}, - }, - { - Name: "伯利兹", - Code: "world:BZ", - AliasNames: []string{"伯利兹"}, - }, - { - Name: "萨尔瓦多", - Code: "world:SV", - AliasNames: []string{"萨尔瓦多"}, - }, - { - Name: "洪都拉斯", - Code: "world:HN", - AliasNames: []string{"洪都拉斯"}, - }, - { - Name: "尼加拉瓜", - Code: "world:NI", - AliasNames: []string{"尼加拉瓜"}, - }, - { - Name: "哥斯达黎加", - Code: "world:CR", - AliasNames: []string{"哥斯达黎加"}, - }, - { - Name: "巴拿马", - Code: "world:PA", - AliasNames: []string{"巴拿马"}, - }, - { - Name: "巴哈马", - Code: "world:BS", - AliasNames: []string{"巴哈马"}, - }, - { - Name: "古巴", - Code: "world:CU", - AliasNames: []string{"古巴"}, - }, - { - Name: "牙买加", - Code: "world:JM", - AliasNames: []string{"牙买加"}, - }, - { - Name: "海地", - Code: "world:HT", - AliasNames: []string{"海地"}, - }, - { - Name: "多米尼加共和国", - Code: "world:DO", - AliasNames: []string{"多米尼加共和国", "多米尼加"}, - }, - { - Name: "安提瓜和巴布达", - Code: "world:AG", - AliasNames: []string{"安提瓜和巴布达"}, - }, - { - Name: "圣基茨和尼维斯", - Code: "world:KN", - AliasNames: []string{"圣基茨和尼维斯"}, - }, - { - Name: "多米尼克", - Code: "world:DM", - AliasNames: []string{"多米尼克"}, - }, - { - Name: "圣卢西亚", - Code: "world:LC", - AliasNames: []string{"圣卢西亚"}, - }, - { - Name: "圣文森特和格林纳丁斯", - Code: "world:VC", - AliasNames: []string{"圣文森特和格林纳丁斯"}, - }, - { - Name: "格林纳达", - Code: "world:GD", - AliasNames: []string{"格林纳达"}, - }, - { - Name: "巴巴多斯", - Code: "world:BB", - AliasNames: []string{"巴巴多斯"}, - }, - { - Name: "特立尼达和多巴哥", - Code: "world:TT", - AliasNames: []string{"特立尼达和多巴哥"}, - }, - { - Name: "波多黎各", - Code: "world:PR", - AliasNames: []string{"波多黎各"}, - }, - { - Name: "英属维尔京群岛", - Code: "world:VG", - AliasNames: []string{"英属维尔京群岛"}, - }, - { - Name: "美属维尔京群岛", - Code: "world:VI", - AliasNames: []string{"美属维尔京群岛"}, - }, - { - Name: "安圭拉", - Code: "world:AI", - AliasNames: []string{"安圭拉"}, - }, - { - Name: "蒙特塞拉特岛", - Code: "world:MS", - AliasNames: []string{"蒙特塞拉特岛", "蒙塞拉特岛"}, - }, - { - Name: "瓜德罗普", - Code: "world:GP", - AliasNames: []string{"瓜德罗普"}, - }, - { - Name: "马提尼克", - Code: "world:MQ", - AliasNames: []string{"马提尼克"}, - }, - { - Name: "荷属安的列斯", - Code: "world:AN", - AliasNames: []string{"荷属安的列斯", "安的列斯"}, - }, - { - Name: "阿鲁巴", - Code: "world:AW", - AliasNames: []string{"阿鲁巴"}, - }, - { - Name: "特克斯和凯科斯群岛", - Code: "world:TC", - AliasNames: []string{"特克斯和凯科斯群岛"}, - }, - { - Name: "开曼群岛", - Code: "world:KY", - AliasNames: []string{"开曼群岛"}, - }, - { - Name: "百慕大", - Code: "world:BM", - AliasNames: []string{"百慕大", "百慕大群岛"}, - }, - { - Name: "哥伦比亚", - Code: "world:CO", - AliasNames: []string{"哥伦比亚"}, - }, - { - Name: "委内瑞拉", - Code: "world:VE", - AliasNames: []string{"委内瑞拉"}, - }, - { - Name: "圭亚那", - Code: "world:GY", - AliasNames: []string{"圭亚那"}, - }, - { - Name: "法属圭亚那", - Code: "world:GF", - AliasNames: []string{"法属圭亚那"}, - }, - { - Name: "苏里南", - Code: "world:SR", - AliasNames: []string{"苏里南"}, - }, - { - Name: "厄瓜多尔", - Code: "world:EC", - AliasNames: []string{"厄瓜多尔"}, - }, - { - Name: "秘鲁", - Code: "world:PE", - AliasNames: []string{"秘鲁"}, - }, - { - Name: "玻利维亚", - Code: "world:BO", - AliasNames: []string{"玻利维亚"}, - }, - { - Name: "巴西", - Code: "world:BR", - AliasNames: []string{"巴西"}, - }, - { - Name: "智利", - Code: "world:CL", - AliasNames: []string{"智利"}, - }, - { - Name: "阿根廷", - Code: "world:AR", - AliasNames: []string{"阿根廷"}, - }, - { - Name: "乌拉圭", - Code: "world:UY", - AliasNames: []string{"乌拉圭"}, - }, - { - Name: "巴拉圭", - Code: "world:PY", - AliasNames: []string{"巴拉圭"}, - }, - { - Name: "波黑", - Code: "world:BA", - AliasNames: []string{"波黑"}, - }, - { - Name: "直布罗陀", - Code: "world:GI", - AliasNames: []string{"直布罗陀"}, - }, - { - Name: "泽西岛", - Code: "world:JE", - AliasNames: []string{"泽西岛"}, - }, - { - Name: "黑山", - Code: "world:ME", - AliasNames: []string{"黑山"}, - }, - { - Name: "英属马恩岛", - Code: "world:IM", - AliasNames: []string{"英属马恩岛", "马恩岛"}, - }, - { - Name: "尼日利亚", - Code: "world:NG", - AliasNames: []string{"尼日利亚"}, - }, - { - Name: "喀麦隆", - Code: "world:CM", - AliasNames: []string{"喀麦隆"}, - }, - { - Name: "加蓬", - Code: "world:GA", - AliasNames: []string{"加蓬"}, - }, - { - Name: "乍得", - Code: "world:TD", - AliasNames: []string{"乍得"}, - }, - { - Name: "刚果共和国", - Code: "world:CG", - AliasNames: []string{"刚果共和国", "刚果布"}, - }, - { - Name: "中非共和国", - Code: "world:CF", - AliasNames: []string{"中非共和国", "中非"}, - }, - { - Name: "南苏丹", - Code: "world:SS", - AliasNames: []string{"南苏丹"}, - }, - { - Name: "赤道几内亚", - Code: "world:GQ", - AliasNames: []string{"赤道几内亚"}, - }, - { - Name: "毛里塔尼亚", - Code: "world:MR", - AliasNames: []string{"毛里塔尼亚"}, - }, - { - Name: "刚果民主共和国", - Code: "world:CD", - AliasNames: []string{"刚果民主共和国", "刚果金"}, - }, - { - Name: "法罗群岛", - Code: "world:FO", - AliasNames: []string{"法罗群岛"}, - }, - { - Name: "根西岛", - Code: "world:GG", - AliasNames: []string{"根西岛"}, - }, - { - Name: "圣皮埃尔和密克隆群岛", - Code: "world:PM", - AliasNames: []string{"圣皮埃尔和密克隆群岛"}, - }, - { - Name: "法属圣马丁", - Code: "world:MF", - AliasNames: []string{"法属圣马丁"}, - }, - { - Name: "奥兰群岛", - Code: "world:AX", - AliasNames: []string{"奥兰群岛"}, - }, - { - Name: "库拉索", - Code: "world:CW", - AliasNames: []string{"库拉索"}, - }, - { - Name: "圣巴泰勒米岛", - Code: "world:BL", - AliasNames: []string{"圣巴泰勒米岛", "圣巴泰勒米"}, - }, - { - Name: "福克兰群岛", - Code: "world:FK", - AliasNames: []string{"福克兰群岛"}, - }, - { - Name: "英属印度洋领地", - Code: "world:IO", - AliasNames: []string{"英属印度洋领地"}, - }, - { - Name: "诺福克岛", - Code: "world:NF", - AliasNames: []string{"诺福克岛"}, - }, - { - Name: "马约特岛", - Code: "world:YT", - AliasNames: []string{"法属马约特岛", "马约特岛", "马约特"}, - }, - { - Name: "科索沃", - Code: "world:XK", - AliasNames: []string{"科索沃"}, - }, - { - Name: "荷属圣马丁", - Code: "world:SX", - AliasNames: []string{"荷属圣马丁"}, - }, - { - Name: "南乔治亚岛和南桑威奇群岛", - Code: "world:GS", - AliasNames: []string{"南乔治亚岛和南桑威奇群岛"}, - }, - { - Name: "南极洲", - Code: "world:AQ", - AliasNames: []string{"南极洲"}, - }, - { - Name: "圣诞岛", - Code: "world:CX", - AliasNames: []string{"圣诞岛"}, - }, -} - -// FindDefaultRoute 根据代号查找线路 -func FindDefaultRoute(code string) *Route { - return allDefaultRouteMapping[code] -} diff --git a/pkg/dnsconfigs/ns_routes_test.go b/pkg/dnsconfigs/ns_routes_test.go deleted file mode 100644 index 48b61ba..0000000 --- a/pkg/dnsconfigs/ns_routes_test.go +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. - -package dnsconfigs - -import ( - "strings" - "testing" -) - -func TestRoutes(t *testing.T) { - // 检查代号是否有空,或者代号是否重复 - - var codeMap = map[string]bool{} // code => true - - for _, routes := range [][]*Route{ - AllDefaultChinaProvinceRoutes, - AllDefaultISPRoutes, - AllDefaultWorldRegionRoutes, - } { - for _, route := range routes { - if len(route.Name) == 0 { - t.Fatal("route name should not empty:", route) - } - if len(route.AliasNames) == 0 { - t.Fatal("route alias names should not empty:", route) - } - if len(route.Code) == 0 || route.Code == "world:" { - t.Fatal("route code should not empty:", route) - } - - _, ok := codeMap[route.Code] - if ok { - t.Fatal("code duplicated:", route) - } - - codeMap[route.Code] = true - - if strings.HasPrefix(route.Code, "world:sp:") || (strings.HasPrefix(route.Code, "world:") && route.Code != "world:UAR" && len(route.Code) != 8) { - t.Log("no shorten code:", route) - } - } - } -} - -func TestFindDefaultRoute(t *testing.T) { - t.Log(FindDefaultRoute("isp:china_unicom")) - t.Log(FindDefaultRoute("china:province:beijing")) - t.Log(FindDefaultRoute("world:CN")) - t.Log(FindDefaultRoute("world:US")) -} - -func TestRoutes_Markdown(t *testing.T) { - var markdown = "" - - for index, routes := range [][]*Route{ - AllDefaultRoutes, - AllDefaultChinaProvinceRoutes, - AllDefaultISPRoutes, - AllDefaultWorldRegionRoutes, - } { - switch index { - case 0: - markdown += "## 默认线路\n" - case 1: - markdown += "## 中国省市\n" - case 2: - markdown += "## 运营商\n" - case 3: - markdown += "## 全球地区\n" - } - - markdown += "| 名称 | 代号 |\n" - markdown += "|-----------|-----------|\n" - for _, route := range routes { - markdown += "| " + route.Name + " | " + route.Code + " |\n" - } - markdown += "\n" - } - t.Log(markdown) -} - -func BenchmarkFindDefaultRoute(b *testing.B) { - for i := 0; i < b.N; i++ { - _ = FindDefaultRoute("world:CN") - } -} diff --git a/pkg/dnsconfigs/ns_setting.go b/pkg/dnsconfigs/ns_setting.go deleted file mode 100644 index 7eca896..0000000 --- a/pkg/dnsconfigs/ns_setting.go +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. - -package dnsconfigs - -type NSSetting struct { -} diff --git a/pkg/dnsconfigs/ns_tsig_config.go b/pkg/dnsconfigs/ns_tsig_config.go deleted file mode 100644 index c34ab71..0000000 --- a/pkg/dnsconfigs/ns_tsig_config.go +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. - -package dnsconfigs - -// NSTSIGConfig 配置 -type NSTSIGConfig struct { - IsOn bool `yaml:"isOn" json:"isOn"` -} diff --git a/pkg/dnsconfigs/ns_user_config.go b/pkg/dnsconfigs/ns_user_config.go deleted file mode 100644 index b455f50..0000000 --- a/pkg/dnsconfigs/ns_user_config.go +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn . - -package dnsconfigs - -func DefaultNSUserConfig() *NSUserConfig { - return &NSUserConfig{ - DefaultClusterId: 0, - DefaultPlanConfig: DefaultNSUserPlanConfig(), - } -} - -func DefaultNSUserPlanConfig() *NSPlanConfig { - return &NSPlanConfig{ - SupportCountryRoutes: true, - SupportChinaProvinceRoutes: true, - SupportISPRoutes: true, - MaxCustomRoutes: 0, - MaxLoadBalanceRecordsPerRecord: 100, - MinTTL: 60, - MaxDomains: 100, - MaxRecordsPerDomain: 1000, - SupportRecordStats: true, - SupportDomainAlias: false, - SupportAPI: false, - } -} - -type NSUserConfig struct { - DefaultClusterId int64 `json:"defaultClusterId"` // 默认部署到的集群 - DefaultPlanConfig *NSPlanConfig `json:"defaultPlanConfig"` // 默认套餐设置 -} diff --git a/pkg/dnsconfigs/record_ttls.go b/pkg/dnsconfigs/record_ttls.go deleted file mode 100644 index 4ca4c8a..0000000 --- a/pkg/dnsconfigs/record_ttls.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. - -package dnsconfigs - -type RecordTTL struct { - Name string `json:"name"` - Value int `json:"value"` -} - -func FindAllRecordTTL() []*RecordTTL { - return []*RecordTTL{ - { - Name: "5秒", - Value: 5, - }, - { - Name: "10秒", - Value: 10, - }, - { - Name: "30秒", - Value: 30, - }, - { - Name: "1分钟", - Value: 60, - }, - { - Name: "3分钟", - Value: 3 * 60, - }, - { - Name: "5分钟", - Value: 5 * 60, - }, - { - Name: "10分钟", - Value: 10 * 60, - }, - { - Name: "30分钟", - Value: 30 * 60, - }, - { - Name: "1小时", - Value: 3600, - }, - { - Name: "12小时", - Value: 12 * 3600, - }, - { - Name: "1天", - Value: 86400, - }, - { - Name: "30天", - Value: 30 * 86400, - }, - { - Name: "一年", - Value: 365 * 86400, - }, - } -}