Skip to content

Commit 2dcdc12

Browse files
committed
Update DNS server configuration to use override DNS settings
- Change README to reflect the new `TSDNSPROXY_OVERRIDE_DNS` variable for specifying DNS servers. - Modify `main.go` to implement logic for retrieving host DNS servers if no override is provided. - Update Kubernetes deployment and kustomization files to replace `TSDNSPROXY_DEFAULT_DNS` with `TSDNSPROXY_OVERRIDE_DNS` for consistency.
1 parent 98cd077 commit 2dcdc12

File tree

4 files changed

+59
-8
lines changed

4 files changed

+59
-8
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ tsdnsproxy -authkey tskey-auth-YOUR-KEY
102102
- `TSDNSPROXY_HOSTNAME`: Hostname on tailnet (default: `tsdnsproxy`)
103103
- `TSDNSPROXY_STATE_DIR`: State directory (default: `/var/lib/tsdnsproxy`)
104104
- `TSDNSPROXY_STATE`: State storage backend (e.g., `kube:secret-name`)
105-
- `TSDNSPROXY_DEFAULT_DNS`: Default DNS servers (comma-separated)
105+
- `TSDNSPROXY_OVERRIDE_DNS`: Override host DNS servers (comma-separated, defaults to host's resolvers)
106106
- `TSDNSPROXY_LISTEN_ADDRS`: Listen addresses (default: `tailscale`) - see Network Configuration
107107
- `TSDNSPROXY_HEALTH_ADDR`: Health check endpoint address (default: `:8080`)
108108
- `TSDNSPROXY_VERBOSE`: Enable verbose logging (default: `false`)
@@ -116,7 +116,7 @@ tsdnsproxy \
116116
-listen-addrs tailscale,0.0.0.0:53 \
117117
-statedir /var/lib/tsdnsproxy \
118118
-state kube:tsdnsproxy-state \
119-
-default-dns 8.8.8.8:53,8.8.4.4:53 \
119+
-override-dns 8.8.8.8:53,8.8.4.4:53 \
120120
-cache-expiry 5m \
121121
-health-addr :8080 \
122122
-verbose

cmd/tsdnsproxy/main.go

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import (
1212
"strings"
1313
"syscall"
1414
"time"
15+
"bufio"
16+
"net"
1517

1618
"github.com/rajsinghtech/tsdnsproxy/internal/backend"
1719
"github.com/rajsinghtech/tsdnsproxy/internal/cache"
@@ -31,6 +33,49 @@ func envOr(key, defaultVal string) string {
3133
return defaultVal
3234
}
3335

36+
func getHostDNSServers() []string {
37+
var servers []string
38+
39+
// Try to read from /etc/resolv.conf (Linux/Unix)
40+
if file, err := os.Open("/etc/resolv.conf"); err == nil {
41+
defer file.Close()
42+
scanner := bufio.NewScanner(file)
43+
for scanner.Scan() {
44+
line := strings.TrimSpace(scanner.Text())
45+
if strings.HasPrefix(line, "nameserver ") {
46+
server := strings.TrimSpace(strings.TrimPrefix(line, "nameserver"))
47+
// Add port if not specified
48+
if !strings.Contains(server, ":") {
49+
server += ":53"
50+
}
51+
servers = append(servers, server)
52+
}
53+
}
54+
if len(servers) > 0 {
55+
return servers
56+
}
57+
}
58+
59+
// Fallback to system DNS resolution
60+
config, err := net.DefaultResolver.LookupNS(context.Background(), ".")
61+
if err == nil && len(config) > 0 {
62+
for _, ns := range config {
63+
if !strings.Contains(ns.Host, ":") {
64+
servers = append(servers, ns.Host+":53")
65+
} else {
66+
servers = append(servers, ns.Host)
67+
}
68+
}
69+
if len(servers) > 0 {
70+
return servers
71+
}
72+
}
73+
74+
// Final fallback to common public DNS
75+
log.Println("warning: could not determine host DNS servers, falling back to 8.8.8.8:53")
76+
return []string{"8.8.8.8:53"}
77+
}
78+
3479
func retryWithBackoff(ctx context.Context, maxRetries int, fn func() error) error {
3580
return retry(ctx, maxRetries, time.Second, func(i int) time.Duration {
3681
return time.Duration(1<<uint(i)) * time.Second
@@ -73,7 +118,7 @@ func main() {
73118
stateDir = flag.String("statedir", envOr("TSDNSPROXY_STATE_DIR", "/var/lib/tsdnsproxy"), "state directory")
74119
state = flag.String("state", os.Getenv("TSDNSPROXY_STATE"), "state storage (e.g., kube:<secret-name>)")
75120
controlURL = flag.String("controlurl", os.Getenv("TS_CONTROLURL"), "optional alternate control server URL")
76-
defaultDNS = flag.String("default-dns", envOr("TSDNSPROXY_DEFAULT_DNS", ""), "default DNS servers (comma-separated)")
121+
overrideDNS = flag.String("override-dns", envOr("TSDNSPROXY_OVERRIDE_DNS", ""), "override DNS servers (comma-separated, defaults to host resolvers)")
77122
cacheExpiry = flag.Duration("cache-expiry", constants.DefaultCacheExpiry, "whois cache expiry duration")
78123
healthAddr = flag.String("health-addr", envOr("TSDNSPROXY_HEALTH_ADDR", ":8080"), "health check endpoint address")
79124
listenAddrs = flag.String("listen-addrs", envOr("TSDNSPROXY_LISTEN_ADDRS", "tailscale"), "listen addresses (comma-separated: tailscale,0.0.0.0:53,127.0.0.1:5353)")
@@ -141,11 +186,17 @@ func main() {
141186
grantCache := cache.NewGrantCache(*cacheExpiry)
142187

143188
var defaultServers []string
144-
if *defaultDNS != "" {
145-
defaultServers = strings.Split(*defaultDNS, ",")
189+
if *overrideDNS != "" {
190+
// Use override DNS servers if specified
191+
defaultServers = strings.Split(*overrideDNS, ",")
146192
for i := range defaultServers {
147193
defaultServers[i] = strings.TrimSpace(defaultServers[i])
148194
}
195+
log.Printf("using override DNS servers: %v", defaultServers)
196+
} else {
197+
// Default to host's DNS resolvers
198+
defaultServers = getHostDNSServers()
199+
log.Printf("using host DNS servers: %v", defaultServers)
149200
}
150201
backendMgr := backend.NewManager(defaultServers)
151202
defer backendMgr.Close()

k8s/deployment.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ spec:
7575
value: "tsdnsproxy"
7676
- name: TSDNSPROXY_VERBOSE
7777
value: "true"
78-
- name: TSDNSPROXY_DEFAULT_DNS
79-
value: "8.8.8.8:53,8.8.4.4:53" # Configure your default DNS
78+
- name: TSDNSPROXY_OVERRIDE_DNS
79+
value: "8.8.8.8:53,8.8.4.4:53" # Override host DNS with specific servers
8080
- name: TSDNSPROXY_LISTEN_ADDRS
8181
value: "tailscale,0.0.0.0:53" # Listen on both Tailscale and LAN
8282
- name: TS_AUTHKEY

k8s/kustomization.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,5 @@ configMapGenerator:
2323
- name: tsdnsproxy-config
2424
namespace: tsdnsproxy
2525
literals:
26-
- TSDNSPROXY_DEFAULT_DNS=8.8.8.8:53,8.8.4.4:53
26+
- TSDNSPROXY_OVERRIDE_DNS=8.8.8.8:53,8.8.4.4:53
2727
- TSDNSPROXY_VERBOSE=true

0 commit comments

Comments
 (0)