基础配置

在 Sing-box 中集成 Tailscale 需要配置 Endpoint、DNS 和路由规则。

逻辑:

  1. 新建 Endpoint:类型为 tailscaleauth_key 需从 Tailscale 管理后台获取。
  2. 处理 DNS:新建一个 tag 为 dns-tailscale 的 DNS 服务器,关联到上述 Endpoint。配置 DNS 规则,仅将 ts.net100.in-addr.arpa 交由该服务器处理。
  3. 处理路由:新建路由规则,匹配 Tailscale 域名后缀及内网 CIDR 地址,出站流量指向新建的 Tailscale Endpoint。

配置文件示例

{  "log": {},  "experimental": {},  "inbounds": [    {}  ],  "outbounds": [    {}  ],  "endpoints": [    {      "type": "tailscale",      "tag": "tailscale-in",      // auth_key 需在 Tailscale 后台生成      "auth_key": "tskey-auth-..."    }  ],  "dns": {    "servers": [      {        "tag": "dns-tailscale",        "type": "tailscale",        "endpoint": "tailscale-in"      }    ],    "rules": [      {        "domain_suffix": [          "ts.net",          "100.in-addr.arpa"        ],        "server": "dns-tailscale"      }    ]  },  "route": {    "rules": [      {        "domain_suffix": [          "ts.net",          "100.in-addr.arpa"        ],        "outbound": "tailscale-in"      },      {        "ip_cidr": [          "100.64.0.0/10"        ],        "outbound": "tailscale-in"      }    ]  }}

配置完成后,可通过 Tailnet 地址或 Tailscale IP 访问内网资源。使用设备名称无后缀这种sing-box似乎实现不了。

自定义域名

Tailnet 原生地址难以记忆,用 Cloudflare API 将解析记录同步至自定义域名

https://github.com/marc1307/tailscale-cloudflare-dnssync

API申请:

https://dash.cloudflare.com/profile/api-tokens

https://login.tailscale.com/admin/settings/authkeys

Docker Compose:

services:  tailscale-dns-sync:    image: ghcr.io/marc1307/tailscale-cloudflare-dnssync:latest    container_name: tailscale-dns-sync    restart: unless-stopped    environment:      - mode=tailscale      # 目标主域名      - cf_domain=example.com      # 子域名设置,例如填 home 则生成 device.home.example.com      - cf_sub=home      - prefix=      - postfix=      # Tailscale 控制台显示的 Tailnet 地址      - ts_tailnet=tail03afd1.ts.net      # 具备 Zone DNS Edit 权限的 CF Token      - cf_key=YOUR_CF_KEY      # Tailscale API Key      - ts_key=YOUR_TS_KEY

适配自定义域名的 Sing-box 配置

使用自定义域名后,需在 Sing-box 规则中添加自定义域名。

主要调整:

  1. Route 规则:将自定义域名加入路由匹配列表,强制走 tailscale-in 出站。
  2. DNS 规则:自定义域名(如 home.example.com)的 A 记录托管在 Cloudflare(公网),使用 Local-DNS(本地/公网 DNS)进行查询。

调整后的配置片段:

{  "route": {    "rules": [      {        "domain_suffix": [          "ts.net",          "100.in-addr.arpa",          "你的域名" // 新增:将自定义域名流量导入 Tailscale 接口        ],        "outbound": "tailscale-in"      },      {        "ip_cidr": [          "100.64.0.0/10"        ],        "outbound": "tailscale-in"      }    ]  },  "dns": {    "servers": [      // ... 其他 DNS 服务器配置    ],    "rules": [      {        "domain_suffix": [          "ts.net",          "100.in-addr.arpa"        ],        "server": "dns-tailscale"      },      {        "domain_suffix": [          "你的域名" // 新增:自定义域名走本地 DNS 查询公网 A 记录        ],        "server": "Local-DNS"      }    ]  }}

和ai折腾了一下午,终于是能用了,这样在手机上访问内网也不需要关了代理再打开tailscale了