Files
gluetun/internal/dns/setup.go
Quentin McGaw 7d824a5179 chore(settings): refactor settings processing (#756)
- Better settings tree structure logged using `qdm12/gotree`
- Read settings from environment variables, then files, then secret files
- Settings methods to default them, merge them and override them
- `DNS_PLAINTEXT_ADDRESS` default changed to `127.0.0.1` to use DoT. Warning added if set to something else.
- `HTTPPROXY_LISTENING_ADDRESS` instead of `HTTPPROXY_PORT` (with retro-compatibility)
2022-01-06 06:40:23 -05:00

63 lines
1.6 KiB
Go

package dns
import (
"context"
"errors"
"fmt"
"net"
"github.com/qdm12/dns/pkg/check"
"github.com/qdm12/dns/pkg/nameserver"
)
var errUpdateFiles = errors.New("cannot update files")
// Returning cancel == nil signals we want to re-run setupUnbound
// Returning err == errUpdateFiles signals we should not fall back
// on the plaintext DNS as DOT is still up and running.
func (l *Loop) setupUnbound(ctx context.Context) (
cancel context.CancelFunc, waitError chan error, closeStreams func(), err error) {
err = l.updateFiles(ctx)
if err != nil {
return nil, nil, nil,
fmt.Errorf("%w: %s", errUpdateFiles, err)
}
settings := l.GetSettings()
unboundCtx, cancel := context.WithCancel(context.Background())
stdoutLines, stderrLines, waitError, err := l.conf.Start(unboundCtx,
*settings.DoT.Unbound.VerbosityDetailsLevel)
if err != nil {
cancel()
return nil, nil, nil, err
}
linesCollectionCtx, linesCollectionCancel := context.WithCancel(context.Background())
lineCollectionDone := make(chan struct{})
go l.collectLines(linesCollectionCtx, lineCollectionDone,
stdoutLines, stderrLines)
closeStreams = func() {
linesCollectionCancel()
<-lineCollectionDone
}
// use Unbound
nameserver.UseDNSInternally(settings.ServerAddress)
err = nameserver.UseDNSSystemWide(l.resolvConf, settings.ServerAddress,
*settings.KeepNameserver)
if err != nil {
l.logger.Error(err.Error())
}
if err := check.WaitForDNS(ctx, net.DefaultResolver); err != nil {
cancel()
<-waitError
close(waitError)
closeStreams()
return nil, nil, nil, err
}
return cancel, waitError, closeStreams, nil
}