让 Shadowrocket 和 Tailscale 在 Mac 上和平共处:一次路由冲突的完整排障记录

背景 我的场景很典型: Mac 上开着 Shadowrocket(TUN 模式)用于日常代理; 同时需要 Tailscale 连回家里的黑群晖 NAS(SA6400,Tailscale IP 100.101.102.15,MagicDNS 名 sa6400)。 注:文中所有 IP、主机名、tailnet 域名均已做脱敏替换,思路和命令不受影响,照抄时换成你自己的即可。 症状也很典型:两个同时开,总有一个不干活。Shadowrocket 开着的时候,ping 100.101.102.15 全部超时,DSM 网页打不开;关掉 Shadowrocket 就正常。 网上常见的答案是「在代理软件里把 100.64.0.0/10 加一条 DIRECT 分流规则」。先说结论:这个答案在 Mac 上的 Shadowrocket 是错的,而且真正的问题有两层。下面是完整的排障过程。 排障过程 第一坑:DIRECT 规则反而帮倒忙 按「标准答案」在 Shadowrocket 里加了规则: IP-CIDR, 100.64.0.0/10, DIRECT (不解析域名) 结果 ping 出现了诡异的输出: 92 bytes from 10.9.0.10: Time to live exceeded ... Src 10.0.8.44 Dst 100.101.102.15 注意源地址 10.0.8.44 —— 这不是 Tailscale 的地址,是物理网卡 en0 的局域网地址。包被甩给了物理网关,在运营商/校园网里绕圈直到 TTL 耗尽。 原因:Shadowrocket 的 DIRECT 意思是「从物理网卡直连」,它并不知道也不关心 Tailscale 的存在。而且这条规则会让 Shadowrocket 往系统路由表里写一条: ...

July 2, 2026 · 4 min

给黑群晖 7 万首音乐批量补齐歌词与封面(Navidrome 友好、非破坏方案)

背景 我的黑群晖(Xpenology,机型 SA6400,DSM 7.2)里存了 7 万多首音乐,中文为主、少量英文。问题是:很多歌没有歌词,一部分没有专辑封面。播放器用的是 Navidrome。 网上都推荐 music-tag-web 这个 Docker,装了之后发现——它是逐首手动匹配的 GUI。7 万首逐首点?不可能。核心诉求其实是「批量、自动」,而不是又一个手动工具。 于是自己写脚本解决。目标定得很清楚: 只补 歌词 和 封面 适配 Navidrome 绝不破坏原文件(因为这些音乐还在 PT 做种,改动会掉种) 本文时间线:2026 年 7 月 1 日晚 ~ 2 日。文中域名、IP、账号均已脱敏。 一、远程访问就踩了两个坑 人不在家,先要能连上 NAS。这里连着栽了两跟头。 坑 1:Cloudflare 代理的域名不能 SSH NAS 的管理域名(形如 dsm.example.com)套了 Cloudflare 代理。结果: 443 网页能通 22 SSH 握手直接超时 因为 Cloudflare 的橙云只转发 HTTP/HTTPS,不转发裸 TCP 的 SSH。用 nc 测端口还会给"开放"的假象(那是代理层接受了连接),但真正的 SSH banner 永远收不到。 坑 2:Tailscale 的地址段被另一条路由抢占 改用 Tailscale 连内网 IP(100.x.x.x)。tailscale status 显示 NAS 在线,tailscale ping 也通(走 DERP 中继),但普通 ssh / nc 全部超时。 ...

July 2, 2026 · 3 min