Files
gluetun/internal/dns/setup.go

56 lines
1.2 KiB
Go
Raw Normal View History

2021-07-23 18:55:53 +00:00
package dns
import (
"context"
"errors"
"fmt"
2021-07-23 18:55:53 +00:00
"github.com/qdm12/dns/v2/pkg/check"
"github.com/qdm12/dns/v2/pkg/nameserver"
2024-10-25 14:01:29 +00:00
"github.com/qdm12/dns/v2/pkg/server"
2021-07-23 18:55:53 +00:00
)
var errUpdateBlockLists = errors.New("cannot update filter block lists")
2021-07-23 18:55:53 +00:00
func (l *Loop) setupServer(ctx context.Context) (runError <-chan error, err error) {
2021-07-23 18:55:53 +00:00
err = l.updateFiles(ctx)
if err != nil {
return nil, fmt.Errorf("%w: %w", errUpdateBlockLists, err)
2021-07-23 18:55:53 +00:00
}
settings := l.GetSettings()
serverSettings, err := buildServerSettings(settings, l.filter, l.localResolvers, l.logger)
2021-07-23 18:55:53 +00:00
if err != nil {
return nil, fmt.Errorf("building server settings: %w", err)
2021-07-23 18:55:53 +00:00
}
server, err := server.New(serverSettings)
if err != nil {
return nil, fmt.Errorf("creating server: %w", err)
2021-07-23 18:55:53 +00:00
}
2024-10-25 14:01:29 +00:00
runError, err = server.Start(ctx)
if err != nil {
return nil, fmt.Errorf("starting server: %w", err)
}
l.server = server
// use internal DNS server
nameserver.UseDNSInternally(nameserver.SettingsInternalDNS{})
err = nameserver.UseDNSSystemWide(nameserver.SettingsSystemDNS{
ResolvPath: l.resolvConf,
})
2021-07-23 18:55:53 +00:00
if err != nil {
l.logger.Error(err.Error())
}
err = check.WaitForDNS(ctx, check.Settings{})
if err != nil {
l.stopServer()
return nil, err
2021-07-23 18:55:53 +00:00
}
return runError, nil
2021-07-23 18:55:53 +00:00
}