Skip to content

Commit 09d6d67

Browse files
committed
[tunnel] allow configuring of dns relay
1 parent 286cb16 commit 09d6d67

File tree

4 files changed

+23
-12
lines changed

4 files changed

+23
-12
lines changed

cmd/backplane/main.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@ var (
9595

9696
wsRouterPort = flag.Int("ws_router_port", 8082, "Port for the WebSocket router.")
9797

98-
dnsPort = flag.Int("dns_port", 8053, "Port for the DNS server.")
98+
dnsPort = flag.Int("dns_port", 8053, "Port for the DNS server.")
99+
tunnelDNSAddr = flag.String("tunnel_dns_addr", "127.0.0.1:8053", "Address for the DNS server run by tunnel agents.")
99100
)
100101

101102
func upsertProxyFromPath(ctx context.Context, rC *rest.Config, path string) (string, error) {
@@ -341,7 +342,7 @@ func main() {
341342
log.Fatalf("failed to set up EdgeFunction controller: %v", err)
342343
}
343344

344-
tunnelResolver := tundns.NewTunnelNodeDNSReconciler(mgr.GetClient())
345+
tunnelResolver := tundns.NewTunnelNodeDNSReconciler(mgr.GetClient(), *tunnelDNSAddr)
345346
if err := tunnelResolver.SetupWithManager(mgr); err != nil {
346347
log.Fatalf("failed to set up TunnelNodeDNS controller: %v", err)
347348
}

pkg/cmd/tunnel/cmd.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ func init() {
219219
tunnelRunCmd.Flags().StringSliceVar(&preserveDefaultGw, "preserve-default-gw-dsts", []string{}, "Preserve default gateway.")
220220
tunnelRunCmd.Flags().StringVar(&socksListenAddr, "socks-addr", "localhost:1080", "Listen address for SOCKS proxy.")
221221
tunnelRunCmd.Flags().IntVar(&minConns, "min-conns", 1, "Minimum number of connections to maintain.")
222+
tunnelRunCmd.Flags().StringVar(&dnsListenAddr, "dns-addr", "127.0.0.1:8053", "Listen address for the DNS proxy. Note that you must configure backplane to use this address as well.")
222223

223224
tunnelCmd.AddCommand(createCmd)
224225
tunnelCmd.AddCommand(getCmd)

pkg/cmd/tunnel/run.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ var (
5555
preserveDefaultGw []string
5656
socksListenAddr string
5757
minConns int
58+
dnsListenAddr string
5859

5960
preserveDefaultGwDsts []netip.Prefix
6061
)
@@ -116,7 +117,7 @@ var tunnelRunCmd = &cobra.Command{
116117
go func() {
117118
// Launch an internal recursive DNS resolver used
118119
// to resolve addresses of IPv4 services.
119-
if err := dns.ListenAndServe("127.0.0.53:8053"); err != nil {
120+
if err := dns.ListenAndServe(dnsListenAddr); err != nil {
120121
log.Fatalf("failed to start DNS server: %v", err)
121122
}
122123
}()

pkg/tunnel/dns/resolver.go

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,21 @@ type TunnelNodeDNSReconciler struct {
3737

3838
nameCache *haxmap.Map[string, sets.Set[netip.Addr]]
3939
uuidCache *haxmap.Map[string, sets.Set[netip.Addr]]
40+
41+
tunnelDNSAddr netip.AddrPort
4042
}
4143

4244
// NewTunnelNodeDNSReconciler creates a new TunnelNodeDNSReconciler.
43-
func NewTunnelNodeDNSReconciler(client client.Client) *TunnelNodeDNSReconciler {
45+
func NewTunnelNodeDNSReconciler(client client.Client, tunnelDNSAddr string) *TunnelNodeDNSReconciler {
46+
ap, err := netip.ParseAddrPort(tunnelDNSAddr)
47+
if err != nil {
48+
apoxylog.Fatalf("failed to parse tunnel DNS address and port: %v", err)
49+
}
4450
return &TunnelNodeDNSReconciler{
45-
Client: client,
46-
nameCache: haxmap.New[string, sets.Set[netip.Addr]](),
47-
uuidCache: haxmap.New[string, sets.Set[netip.Addr]](),
51+
Client: client,
52+
nameCache: haxmap.New[string, sets.Set[netip.Addr]](),
53+
uuidCache: haxmap.New[string, sets.Set[netip.Addr]](),
54+
tunnelDNSAddr: ap,
4855
}
4956
}
5057

@@ -224,12 +231,13 @@ func (r *TunnelNodeDNSReconciler) recursiveResolve(ctx context.Context, w dns.Re
224231
var addr string
225232
if ip.Is6() {
226233
ipv6Bytes := ip.As16()
227-
ipv6Bytes[12] = 127
228-
ipv6Bytes[13] = 0
229-
ipv6Bytes[14] = 0
230-
ipv6Bytes[15] = 53
234+
ipv4Bytes := r.tunnelDNSAddr.Addr().As4()
235+
ipv6Bytes[12] = ipv4Bytes[0]
236+
ipv6Bytes[13] = ipv4Bytes[1]
237+
ipv6Bytes[14] = ipv4Bytes[2]
238+
ipv6Bytes[15] = ipv4Bytes[3]
231239
targetIP := netip.AddrFrom16(ipv6Bytes)
232-
addr = fmt.Sprintf("[%s]:8053", targetIP.String())
240+
addr = fmt.Sprintf("[%s]:%d", targetIP.String(), r.tunnelDNSAddr.Port())
233241
} else {
234242
apoxylog.Debugf("non-IPv6 address %s, skipping", ip.String())
235243
continue

0 commit comments

Comments
 (0)