TUN-9472: Add virtual DNS service

Adds a new reserved service to route UDP requests towards the local DNS
resolver.

Closes TUN-9472
This commit is contained in:
Devin Carr
2025-06-27 13:09:29 -07:00
parent b4a98b13fe
commit 9ca8b41cf7
6 changed files with 310 additions and 5 deletions

View File

@@ -4,6 +4,7 @@ import (
"context"
"errors"
"net"
"net/netip"
"strings"
"time"
@@ -14,6 +15,7 @@ import (
"github.com/cloudflare/cloudflared/connection"
"github.com/cloudflare/cloudflared/edgediscovery"
"github.com/cloudflare/cloudflared/ingress"
"github.com/cloudflare/cloudflared/ingress/origins"
"github.com/cloudflare/cloudflared/orchestration"
v3 "github.com/cloudflare/cloudflared/quic/v3"
"github.com/cloudflare/cloudflared/retry"
@@ -78,8 +80,11 @@ func NewSupervisor(config *TunnelConfig, orchestrator *orchestration.Orchestrato
edgeBindAddr := config.EdgeBindAddr
datagramMetrics := v3.NewMetrics(prometheus.DefaultRegisterer)
// No reserved ingress services for now, hence the nil
ingressUDPService := ingress.NewUDPOriginService(nil, config.Log)
// Setup the reserved virtual origins
reservedServices := map[netip.AddrPort]ingress.UDPOriginProxy{}
reservedServices[origins.VirtualDNSServiceAddr] = config.OriginDNSService
ingressUDPService := ingress.NewUDPOriginService(reservedServices, config.Log)
sessionManager := v3.NewSessionManager(datagramMetrics, config.Log, ingressUDPService, orchestrator.GetFlowLimiter())
edgeTunnelServer := EdgeTunnelServer{
@@ -128,6 +133,9 @@ func (s *Supervisor) Run(
}()
}
// Setup DNS Resolver refresh
go s.config.OriginDNSService.StartRefreshLoop(ctx)
if err := s.initialize(ctx, connectedSignal); err != nil {
if err == errEarlyShutdown {
return nil

View File

@@ -24,6 +24,7 @@ import (
"github.com/cloudflare/cloudflared/features"
"github.com/cloudflare/cloudflared/fips"
"github.com/cloudflare/cloudflared/ingress"
"github.com/cloudflare/cloudflared/ingress/origins"
"github.com/cloudflare/cloudflared/management"
"github.com/cloudflare/cloudflared/orchestration"
quicpogs "github.com/cloudflare/cloudflared/quic"
@@ -64,6 +65,7 @@ type TunnelConfig struct {
ProtocolSelector connection.ProtocolSelector
EdgeTLSConfigs map[connection.Protocol]*tls.Config
ICMPRouterServer ingress.ICMPRouterServer
OriginDNSService *origins.DNSResolverService
RPCTimeout time.Duration
WriteStreamTimeout time.Duration