Verification Steps
Description
希望为 mihomo 增加 type: tailscale 出站:内嵌 tsnet,让 mihomo 直接作为一个 Tailscale 节点接入 tailnet,把流量发到 tailnet 内的机器、或经由 exit-node 出网,无需在宿主机上单独跑 tailscaled,并保留 MagicDNS / split-DNS 解析能力。社区已有需求(见 #2168、#2520)。
对应 PR:#2784(约 2500 行 diff,含 tailscale.com 及其传递依赖),支持的配置项:auth-key / hostname / control-url(可对接 headscale)/ ephemeral / accept-routes / exit-node / 自定义 tsnet state 目录。同时附带为配合 tsnet 内部解析所做的收敛:net.DefaultResolver 投毒后保留受控逃生通道 + 进程级 guard、以及 SOCKS/Shadowsocks/Mieru/sing 入站 UDP 回包的域名回写(避免回包退化成 fake-IP)。
proxies:
- name: ts-node
type: tailscale
auth-key: tskey-auth-xxxxxxxxxxxx
hostname: mihomo-node
# control-url: https://headscale.example.com # 自建 headscale
# ephemeral: true
# accept-routes: true
# exit-node: 100.x.y.z # 或 exit-node 的 hostname
# state-dir: /var/lib/mihomo/tailscale
关于 Go 版本(需要维护者拍板)
tailscale.com(实现里 pin 的是 v1.96.5)的 go.mod 第一行就是 go 1.26.1,依赖方下界继承——一旦 require 它,mihomo 的 go 指令就必须 >= 1.26.1,连带 test.yml 的 1.20–1.25 测试矩阵、build.yml 里 amd64-v{1,2,3}-go120 这些产物都会受影响。可选方案:
- 直接把
go.mod 抬到 1.26,并相应精简旧 Go 版本的测试矩阵 / go120 产物(最简单);
- 把 tailscale 出站拆成独立的 Go module(主模块
go 指令不变,工程量较大);
- pin 更老的
tailscale.com release(功能/修复受限,且不保证与现有依赖兼容)。
注:单纯加 build tag 并不能避免 go 指令被顶高——只要任何 .go 里 import "tailscale.com/tsnet",go mod tidy 仍会把该依赖留在 go.mod。
想先听一下维护者对「是否愿意接收这个出站」以及「Go 版本走哪个方案」的意见,再决定 PR 怎么收尾。
Verification Steps
Description
希望为 mihomo 增加
type: tailscale出站:内嵌tsnet,让 mihomo 直接作为一个 Tailscale 节点接入 tailnet,把流量发到 tailnet 内的机器、或经由exit-node出网,无需在宿主机上单独跑tailscaled,并保留 MagicDNS / split-DNS 解析能力。社区已有需求(见 #2168、#2520)。对应 PR:#2784(约 2500 行 diff,含
tailscale.com及其传递依赖),支持的配置项:auth-key/hostname/control-url(可对接 headscale)/ephemeral/accept-routes/exit-node/ 自定义 tsnet state 目录。同时附带为配合 tsnet 内部解析所做的收敛:net.DefaultResolver投毒后保留受控逃生通道 + 进程级 guard、以及 SOCKS/Shadowsocks/Mieru/sing 入站 UDP 回包的域名回写(避免回包退化成 fake-IP)。关于 Go 版本(需要维护者拍板)
tailscale.com(实现里 pin 的是v1.96.5)的go.mod第一行就是go 1.26.1,依赖方下界继承——一旦require它,mihomo 的go指令就必须>= 1.26.1,连带test.yml的 1.20–1.25 测试矩阵、build.yml里amd64-v{1,2,3}-go120这些产物都会受影响。可选方案:go.mod抬到 1.26,并相应精简旧 Go 版本的测试矩阵 / go120 产物(最简单);go指令不变,工程量较大);tailscale.comrelease(功能/修复受限,且不保证与现有依赖兼容)。想先听一下维护者对「是否愿意接收这个出站」以及「Go 版本走哪个方案」的意见,再决定 PR 怎么收尾。