Fix #156 falls back to dns on ipv4 only
This commit is contained in:
25
cmd/main.go
25
cmd/main.go
@@ -387,18 +387,19 @@ func onConnected(ctx context.Context, allSettings settings.Settings,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func fallbackToUnencryptedDNS(dnsConf dns.Configurator, provider models.DNSProvider, ipv6 bool) error {
|
func fallbackToUnencryptedIPv4DNS(dnsConf dns.Configurator, providers []models.DNSProvider) error {
|
||||||
targetDNS := constants.DNSProviderMapping()[provider]
|
|
||||||
var targetIP net.IP
|
var targetIP net.IP
|
||||||
for _, targetIP = range targetDNS.IPs {
|
for _, provider := range providers {
|
||||||
if ipv6 && targetIP.To4() == nil {
|
data := constants.DNSProviderMapping()[provider]
|
||||||
break
|
for _, targetIP = range data.IPs {
|
||||||
} else if !ipv6 && targetIP.To4() != nil {
|
if targetIP.To4() != nil {
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dnsConf.UseDNSInternally(targetIP)
|
dnsConf.UseDNSInternally(targetIP)
|
||||||
return dnsConf.UseDNSSystemWide(targetIP)
|
return dnsConf.UseDNSSystemWide(targetIP)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// No IPv4 address found
|
||||||
|
return fmt.Errorf("no ipv4 DNS address found for providers %s", providers)
|
||||||
}
|
}
|
||||||
|
|
||||||
func unboundRun(ctx, oldCtx context.Context, oldCancel context.CancelFunc, timer *time.Timer,
|
func unboundRun(ctx, oldCtx context.Context, oldCancel context.CancelFunc, timer *time.Timer,
|
||||||
@@ -461,7 +462,7 @@ func unboundRunLoop(ctx context.Context, logger logging.Logger, dnsConf dns.Conf
|
|||||||
waiter command.Waiter, streamMerger command.StreamMerger, httpServer server.Server,
|
waiter command.Waiter, streamMerger command.StreamMerger, httpServer server.Server,
|
||||||
) {
|
) {
|
||||||
logger = logger.WithPrefix("unbound dns over tls setup: ")
|
logger = logger.WithPrefix("unbound dns over tls setup: ")
|
||||||
if err := fallbackToUnencryptedDNS(dnsConf, settings.Providers[0], settings.IPv6); err != nil {
|
if err := fallbackToUnencryptedIPv4DNS(dnsConf, settings.Providers); err != nil {
|
||||||
logger.Error(err)
|
logger.Error(err)
|
||||||
}
|
}
|
||||||
var timer *time.Timer
|
var timer *time.Timer
|
||||||
@@ -487,12 +488,12 @@ func unboundRunLoop(ctx context.Context, logger logging.Logger, dnsConf dns.Conf
|
|||||||
case startErr != nil:
|
case startErr != nil:
|
||||||
logger.Error(startErr)
|
logger.Error(startErr)
|
||||||
unboundCancel()
|
unboundCancel()
|
||||||
if err := fallbackToUnencryptedDNS(dnsConf, settings.Providers[0], settings.IPv6); err != nil {
|
if err := fallbackToUnencryptedIPv4DNS(dnsConf, settings.Providers); err != nil {
|
||||||
logger.Error(err)
|
logger.Error(err)
|
||||||
}
|
}
|
||||||
case waitErr != nil:
|
case waitErr != nil:
|
||||||
logger.Warn(waitErr)
|
logger.Warn(waitErr)
|
||||||
if err := fallbackToUnencryptedDNS(dnsConf, settings.Providers[0], settings.IPv6); err != nil {
|
if err := fallbackToUnencryptedIPv4DNS(dnsConf, settings.Providers); err != nil {
|
||||||
logger.Error(err)
|
logger.Error(err)
|
||||||
}
|
}
|
||||||
logger.Warn("restarting unbound because of unexpected exit")
|
logger.Warn("restarting unbound because of unexpected exit")
|
||||||
|
|||||||
Reference in New Issue
Block a user