目标很直接:Clash 负责代理,Tailscale 负责组网,两边同时稳定运行。

实际问题通常是这样:Clash 开启 TUN 后,tailnet 访问异常;Tailscale 接管 DNS 后,Clash 的 fake-ip 解析又不稳定。

可行做法是:

Clash 排除 Tailscale 网段和网卡,Tailscale 关闭 DNS 接管。


一、为什么会冲突

两边都会改路由和 DNS,冲突主要有 3 个:

  1. 路由冲突 Clash TUN 默认接管系统流量,可能把 Tailscale 的 100.64.0.0/10 也带进去。

  2. DNS 冲突 Tailscale 默认启用 MagicDNS,会改系统 DNS;Clash fake-ip 也依赖 DNS 控制,两边会互相干扰。

  3. 防火墙拦截 就算前两步都配好了,tailscale0 没放行的话,入站流量还是会被系统挡掉。


二、实操步骤

1) 先改 Clash:排除 Tailscale 流量

编辑文件:

1
~/clashctl/resources/mixin.yaml

关键配置如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
tun:
  enable: true
  stack: system
  auto-route: true
  route-exclude-address:
    - 100.64.0.0/10
  exclude-interface:
    - tailscale0

dns:
  enable: true
  enhanced-mode: fake-ip
  fake-ip-filter:
    - "+.tailscale.net"
    - "100.64.0.0/10"

改完重启 Clash:

1
~/clashctl/scripts/cmd/clashctl.sh restart

这一段就看三项:

  • 排除 Tailscale 网段 100.64.0.0/10
  • 排除网卡 tailscale0
  • 不要把 tailscale.net 和内网段塞进 fake-ip

2) 再改 Tailscale:关闭 DNS 接管

执行:

1
2
3
4
sudo tailscale up \
  --ssh \
  --accept-dns=false \
  --netfilter-mode=on

关键参数:

  • --accept-dns=false:最关键,避免和 Clash 抢 DNS
  • --ssh:开启 Tailscale 内置 SSH(可选)
  • --netfilter-mode=on:让 Tailscale 正常管理自己的网络规则

3) 最后放行防火墙

如果你开了 UFW,执行:

1
2
sudo ufw allow in on tailscale0
sudo ufw allow 22/tcp

第一条是放行 Tailscale 网卡入站,第二条是保证 SSH 端口可访问。


三、验证

按顺序检查:

  1. 检查 Tailscale 状态
1
tailscale status

确认状态是 Online,并且设备地址正常。

  1. 测试 tailnet 内部连通性
1
ping <peer-tailscale-ip>

如果 Clash 开启时也能通,说明 Tailscale 流量没有被错误接管。

  1. 测试 SSH
1
ssh <user>@<this-node-tailscale-ip>

可以登录,基本说明路由、DNS、防火墙都已打通。