fix: domain names aren't resolved by tailscale's dns resolver.

This commit is contained in:
iceBear67
2026-07-21 01:18:01 +08:00
parent e1cfd61d46
commit 20097a02a1
3 changed files with 141 additions and 43 deletions
+11 -1
View File
@@ -102,7 +102,17 @@ func (r *udpRelay) run(ctx context.Context) {
r.mu.Unlock()
var dialed net.Conn
if inTsnet {
dialed, err = dialTsnet(ctx, r.srv, "udp", r.dialAddr)
// Resolve MagicDNS / split-DNS names through the tailnet
// resolver before dialing; tsnet's own Dial cannot resolve
// custom split-DNS suffixes.
dialAddr := r.dialAddr
if resolved, rerr := resolveDialAddr(ctx, r.srv, r.dialAddr); rerr != nil {
r.logger.Debug("failed to resolve dst via tailnet dns, dialing name directly",
slog.String("dst", r.dialAddr), slog.String("error", rerr.Error()))
} else {
dialAddr = resolved
}
dialed, err = dialTsnet(ctx, r.srv, "udp", dialAddr)
} else {
dialed, err = dialUDP(ctx, r.dialAddr)
}