DNS_UPSTREAM_PLAIN_ADDRESSES option
- New CSV format with port, for example `ip1:port1,ip2:port2` - retrocompatibility with `DNS_ADDRESS`. If set, force upstream type to plain and empty user-picked providers. 127.0.0.1 is now ignored since it's always set to this value internally. - requires `DNS_UPSTREAM_TYPE=plain` must be set to use `DNS_UPSTREAM_PLAIN_ADDRESSES` (unless using retro `DNS_ADDRESS`) - Warning log on using private upstream resolvers updated
This commit is contained in:
@@ -33,15 +33,7 @@ func buildServerSettings(settings settings.DNS,
|
||||
) {
|
||||
serverSettings.Logger = logger
|
||||
|
||||
providersData := provider.NewProviders()
|
||||
upstreamResolvers := make([]provider.Provider, len(settings.Providers))
|
||||
for i := range settings.Providers {
|
||||
var err error
|
||||
upstreamResolvers[i], err = providersData.Get(settings.Providers[i])
|
||||
if err != nil {
|
||||
panic(err) // this should already had been checked
|
||||
}
|
||||
}
|
||||
upstreamResolvers := buildProviders(settings)
|
||||
|
||||
ipVersion := "ipv4"
|
||||
if *settings.IPv6 {
|
||||
@@ -123,3 +115,47 @@ func buildServerSettings(settings settings.DNS,
|
||||
|
||||
return serverSettings, nil
|
||||
}
|
||||
|
||||
func buildProviders(settings settings.DNS) []provider.Provider {
|
||||
if settings.UpstreamType == "plain" && len(settings.UpstreamPlainAddresses) > 0 {
|
||||
providers := make([]provider.Provider, len(settings.UpstreamPlainAddresses))
|
||||
for i, addrPort := range settings.UpstreamPlainAddresses {
|
||||
providers[i] = provider.Provider{
|
||||
Name: addrPort.String(),
|
||||
}
|
||||
if addrPort.Addr().Is4() {
|
||||
providers[i].Plain.IPv4 = []netip.AddrPort{addrPort}
|
||||
} else {
|
||||
providers[i].Plain.IPv6 = []netip.AddrPort{addrPort}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
providersData := provider.NewProviders()
|
||||
providers := make([]provider.Provider, 0, len(settings.Providers)+len(settings.UpstreamPlainAddresses))
|
||||
for _, providerName := range settings.Providers {
|
||||
provider, err := providersData.Get(providerName)
|
||||
if err != nil {
|
||||
panic(err) // this should already had been checked
|
||||
}
|
||||
providers = append(providers, provider)
|
||||
}
|
||||
|
||||
if settings.UpstreamType != "plain" {
|
||||
return providers
|
||||
}
|
||||
|
||||
for _, addrPort := range settings.UpstreamPlainAddresses {
|
||||
newProvider := provider.Provider{
|
||||
Name: addrPort.String(),
|
||||
}
|
||||
if addrPort.Addr().Is4() {
|
||||
newProvider.Plain.IPv4 = []netip.AddrPort{addrPort}
|
||||
} else {
|
||||
newProvider.Plain.IPv6 = []netip.AddrPort{addrPort}
|
||||
}
|
||||
providers = append(providers, newProvider)
|
||||
}
|
||||
|
||||
return providers
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user