From 1412e17bd9d550b3f35f711518820b3145689ef2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Thu, 13 Feb 2025 09:06:19 +0800 Subject: [PATCH] documentation: Add Tailscale DNS --- dns/router.go | 3 - docs/configuration/dns/server/tailscale.md | 83 ++++++++++++++++++++++ mkdocs.yml | 1 + protocol/tailscale/dns_transport.go | 6 +- 4 files changed, 86 insertions(+), 7 deletions(-) create mode 100644 docs/configuration/dns/server/tailscale.md diff --git a/dns/router.go b/dns/router.go index 8ecb8891..4102128e 100644 --- a/dns/router.go +++ b/dns/router.go @@ -174,7 +174,6 @@ func (r *Router) matchDNS(ctx context.Context, allowFakeIP bool, ruleIndex int, options.ClientSubnet = legacyTransport.LegacyClientSubnet() } } - r.logger.DebugContext(ctx, "match[", displayRuleIndex, "] => ", currentRule.Action()) return transport, currentRule, currentRuleIndex case *R.RuleActionDNSRouteOptions: if action.Strategy != C.DomainStrategyAsIS { @@ -189,9 +188,7 @@ func (r *Router) matchDNS(ctx context.Context, allowFakeIP bool, ruleIndex int, if action.ClientSubnet.IsValid() { options.ClientSubnet = action.ClientSubnet } - r.logger.DebugContext(ctx, "match[", displayRuleIndex, "] => ", currentRule.Action()) case *R.RuleActionReject: - r.logger.DebugContext(ctx, "match[", displayRuleIndex, "] => ", currentRule.Action()) return nil, currentRule, currentRuleIndex } } diff --git a/docs/configuration/dns/server/tailscale.md b/docs/configuration/dns/server/tailscale.md new file mode 100644 index 00000000..71744858 --- /dev/null +++ b/docs/configuration/dns/server/tailscale.md @@ -0,0 +1,83 @@ +--- +icon: material/new-box +--- + +!!! question "Since sing-box 1.12.0" + +# Tailscale + +### Structure + +```json +{ + "dns": { + "servers": [ + { + "type": "tailscale", + "tag": "", + + "endpoint": "ts-ep", + "accept_default_resolvers": false + } + ] + } +} +``` + +### Fields + +#### endpoint + +==Required== + +The tag of the Tailscale endpoint. + +#### accept_default_resolvers + +Indicates whether default DNS resolvers should be accepted for fallback queries in addition to MagicDNS。 + +if not enabled, NXDOMAIN will be returned for non-Tailscale domain queries. + +### Examples + +=== "MagicDNS only" + + ```json + { + "dns": { + "servers": [ + { + "type": "local", + "tag": "local" + }, + { + "type": "tailscale", + "tag": "ts", + "endpoint": "ts-ep" + } + ], + "rules": [ + { + "ip_accept_any": true, + "server": "ts" + } + ] + } + } + ``` + +=== "Use as global DNS" + + ```json + { + "dns": { + "servers": [ + { + "type": "tailscale", + "endpoint": "ts-ep", + "accept_default_resolvers": true + } + ] + } + } + ``` \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 3c4a5376..e1a74fb0 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -93,6 +93,7 @@ nav: - Predefined: configuration/dns/server/predefined.md - DHCP: configuration/dns/server/dhcp.md - FakeIP: configuration/dns/server/fakeip.md + - Tailscale: configuration/dns/server/tailscale.md - DNS Rule: configuration/dns/rule.md - DNS Rule Action: configuration/dns/rule_action.md - FakeIP: configuration/dns/fakeip.md diff --git a/protocol/tailscale/dns_transport.go b/protocol/tailscale/dns_transport.go index 702a4425..0c83c698 100644 --- a/protocol/tailscale/dns_transport.go +++ b/protocol/tailscale/dns_transport.go @@ -81,10 +81,10 @@ func (t *DNSTransport) Start(stage adapter.StartStage) error { } ep, isTailscale := rawOutbound.(*Endpoint) if !isTailscale { - return E.New("endpoint is not tailscale: ", t.endpointTag) + return E.New("endpoint is not Tailscale: ", t.endpointTag) } if ep.onReconfig != nil { - return E.New("only one tailscale DNS server is allowed for single endpoint") + return E.New("only one Tailscale DNS server is allowed for single endpoint") } ep.onReconfig = t.onReconfig t.endpoint = ep @@ -133,14 +133,12 @@ func (t *DNSTransport) updateDNSServers(routeConfig *router.Config, dnsConfig *n } var defaultResolvers []adapter.DNSTransport for _, resolver := range dnsConfig.DefaultResolvers { - t.logger.Warn("create default resolver: ", resolver.Addr) myResolver, err := t.createResolver(directDialerOnce, resolver) if err != nil { return err } defaultResolvers = append(defaultResolvers, myResolver) } - t.logger.Error("create ", len(dnsConfig.DefaultResolvers), " default resolvers") t.routes = routes t.hosts = hosts t.defaultResolvers = defaultResolvers