Set bootstrap ip for ControlD upstream in cd mode

This commit is contained in:
Cuong Manh Le authored and Cuong Manh Le committed 2024-04-01 14:14:44 +07:00
1 parent a5025e35ea
commit 52954b8ceb
2 files changed
+30 -5

No files matched your search

+19 -3
View File
@@ -12,6 +12,7 @@ import (
"net" "net"
"net/http" "net/http"
"net/netip" "net/netip"
"net/url"
"os" "os"
"os/exec" "os/exec"
"path/filepath" "path/filepath"
@@ -1431,6 +1432,20 @@ func processCDFlags(cfg *ctrld.Config) error {
mainLog.Load().Err(err).Msg("disregarding invalid custom config") mainLog.Load().Err(err).Msg("disregarding invalid custom config")
} }
bootstrapIP := func(endpoint string) string {
u, err := url.Parse(endpoint)
if err != nil {
logger.Warn().Err(err).Msgf("no bootstrap IP for invalid endpoint: %s", endpoint)
return ""
}
switch {
case dns.IsSubDomain(ctrld.FreeDnsDomain, u.Host):
return ctrld.FreeDNSBoostrapIP
case dns.IsSubDomain(ctrld.PremiumDnsDomain, u.Host):
return ctrld.PremiumDNSBoostrapIP
}
return ""
}
cfg.Network = make(map[string]*ctrld.NetworkConfig) cfg.Network = make(map[string]*ctrld.NetworkConfig)
cfg.Network["0"] = &ctrld.NetworkConfig{ cfg.Network["0"] = &ctrld.NetworkConfig{
Name: "Network 0", Name: "Network 0",
@@ -1438,9 +1453,10 @@ func processCDFlags(cfg *ctrld.Config) error {
} }
cfg.Upstream = make(map[string]*ctrld.UpstreamConfig) cfg.Upstream = make(map[string]*ctrld.UpstreamConfig)
cfg.Upstream["0"] = &ctrld.UpstreamConfig{ cfg.Upstream["0"] = &ctrld.UpstreamConfig{
Endpoint: resolverConfig.DOH, BootstrapIP: bootstrapIP(resolverConfig.DOH),
Type: cdUpstreamProto, Endpoint: resolverConfig.DOH,
Timeout: 5000, Type: cdUpstreamProto,
Timeout: 5000,
} }
rules := make([]ctrld.Rule, 0, len(resolverConfig.Exclude)) rules := make([]ctrld.Rule, 0, len(resolverConfig.Exclude))
for _, domain := range resolverConfig.Exclude { for _, domain := range resolverConfig.Exclude {
+11 -2
View File
@@ -46,6 +46,15 @@ const (
// depending on the record type of the DNS query. // depending on the record type of the DNS query.
IpStackSplit = "split" IpStackSplit = "split"
// FreeDnsDomain is the domain name of free ControlD service.
FreeDnsDomain = "freedns.controld.com"
// FreeDNSBoostrapIP is the IP address of freedns.controld.com.
FreeDNSBoostrapIP = "76.76.2.11"
// PremiumDnsDomain is the domain name of premium ControlD service.
PremiumDnsDomain = "dns.controld.com"
// PremiumDNSBoostrapIP is the IP address of dns.controld.com.
PremiumDNSBoostrapIP = "76.76.2.22"
controlDComDomain = "controld.com" controlDComDomain = "controld.com"
controlDNetDomain = "controld.net" controlDNetDomain = "controld.net"
controlDDevDomain = "controld.dev" controlDDevDomain = "controld.dev"
@@ -104,14 +113,14 @@ func InitConfig(v *viper.Viper, name string) {
}) })
v.SetDefault("upstream", map[string]*UpstreamConfig{ v.SetDefault("upstream", map[string]*UpstreamConfig{
"0": { "0": {
BootstrapIP: "76.76.2.11", BootstrapIP: FreeDNSBoostrapIP,
Name: "Control D - Anti-Malware", Name: "Control D - Anti-Malware",
Type: ResolverTypeDOH, Type: ResolverTypeDOH,
Endpoint: "https://freedns.controld.com/p1", Endpoint: "https://freedns.controld.com/p1",
Timeout: 5000, Timeout: 5000,
}, },
"1": { "1": {
BootstrapIP: "76.76.2.11", BootstrapIP: FreeDNSBoostrapIP,
Name: "Control D - No Ads", Name: "Control D - No Ads",
Type: ResolverTypeDOQ, Type: ResolverTypeDOQ,
Endpoint: "p2.freedns.controld.com", Endpoint: "p2.freedns.controld.com",