diff --git a/cmd/cli/dns_proxy.go b/cmd/cli/dns_proxy.go index 33012fa..6cc36c8 100644 --- a/cmd/cli/dns_proxy.go +++ b/cmd/cli/dns_proxy.go @@ -84,13 +84,7 @@ type upstreamForResult struct { srcAddr string } -func (p *prog) serveDNS(mainCtx context.Context, listenerNum string) error { - // Start network monitoring - if err := p.monitorNetworkChanges(mainCtx); err != nil { - mainLog.Load().Error().Err(err).Msg("Failed to start network monitoring") - // Don't return here as we still want DNS service to run - } - +func (p *prog) serveDNS(listenerNum string) error { listenerConfig := p.cfg.Listener[listenerNum] // make sure ip is allocated if allocErr := p.allocateIP(listenerConfig.IP); allocErr != nil { @@ -1187,7 +1181,7 @@ func FlushDNSCache() error { } // monitorNetworkChanges starts monitoring for network interface changes -func (p *prog) monitorNetworkChanges(ctx context.Context) error { +func (p *prog) monitorNetworkChanges() error { mon, err := netmon.New(func(format string, args ...any) { // Always fetch the latest logger (and inject the prefix) mainLog.Load().Printf("netmon: "+format, args...) diff --git a/cmd/cli/prog.go b/cmd/cli/prog.go index 90f403d..fd36620 100644 --- a/cmd/cli/prog.go +++ b/cmd/cli/prog.go @@ -533,6 +533,12 @@ func (p *prog) run(reload bool, reloadCh chan struct{}) { for listenerNum := range p.cfg.Listener { p.cfg.Listener[listenerNum].Init() if !reload { + go func() { + // Start network monitoring + if err := p.monitorNetworkChanges(); err != nil { + mainLog.Load().Error().Err(err).Msg("Failed to start network monitoring") + } + }() go func(listenerNum string) { listenerConfig := p.cfg.Listener[listenerNum] upstreamConfig := p.cfg.Upstream[listenerNum] @@ -541,7 +547,7 @@ func (p *prog) run(reload bool, reloadCh chan struct{}) { } addr := net.JoinHostPort(listenerConfig.IP, strconv.Itoa(listenerConfig.Port)) mainLog.Load().Info().Msgf("starting DNS server on listener.%s: %s", listenerNum, addr) - if err := p.serveDNS(ctx, listenerNum); err != nil { + if err := p.serveDNS(listenerNum); err != nil { mainLog.Load().Fatal().Err(err).Msgf("unable to start dns proxy on listener.%s", listenerNum) } mainLog.Load().Debug().Msgf("end of serveDNS listener.%s: %s", listenerNum, addr)