注:本文由 claude sonnet 润色
最近把家里的 Surge 改造成了一个远程网关:公司 Windows 和 自己 iPhone 出门在外,不用再装 Clash、sing-box 之类的代理软件,只装一个 Tailscale,全部流量绕回家里的 Mac ,走 Surge 分流。
整体思路
Windows / iPhone │ Tailscale 直连 ▼ Mac mini(Exit Node) │ ▼ Surge(增强模式) │ ├── DIRECT ├── 分地区代理组 └── 各类规则分流远程设备只负责跑 Tailscale,DNS、分流、代理节点全部交给 Mac 上的 Surge 处理。
1. Mac 开启 Exit Node
sudo tailscale set --advertise-exit-node去 Tailscale Admin Console 里找到这台 Mac,批准它作为 Exit Node。远程设备就可以把 Mac 设为 Exit Node 了。如果 Windows 还要访问公司内网(192.168.x.x),记得顺手开启 "Allow local network access"。
2. Surge 侧不用动,远程设备关掉系统代理
Mac 上 Surge 照常开着「系统代理」和「增强模式」就行。远程设备不需要配置 HTTP/SOCKS 代理——Windows 反而要把系统代理关掉,因为流量已经由 Tailscale Exit Node 接管了。
3. 最大的坑:Fake-IP 打不通
配置完 Exit Node 后会遇到一个诡异现象:ping 能通、Telegram 能用,Chrome 却打不开网页。
原因是 Surge 增强模式用的是 Fake-IP(198.18.0.0/15 网段),Windows 查 DNS 时拿到的是类似
198.19.6.148这样的假地址,但这个网段没有路由指回 Surge,自然连不上。直接关掉 Tailscale DNS(
tailscale set --accept-dns=false)能让网页恢复,但代价是 Surge 只能看到远程设备的真实目标 IP,DOMAIN / DOMAIN-SET 规则全部失效——比如测速会直接落到 FINAL,而不是命中 speedtest 规则组。正确的做法不是关 Fake-IP,而是把这个网段的路由打通。
4. 把 Fake-IP 网段发布给 Tailscale
在 Mac 上:
sudo tailscale set --advertise-routes=198.18.0.0/15同样去 Admin Console 批准这条路由,然后 Windows 端:
tailscale set --accept-routes=true tailscale set --accept-dns=true ipconfig /flushdns验证时,
Resolve-DnsName google.com拿到的还是 198.19.x.x 这类 Fake-IP,但用Find-NetRoute查一下应该能看到这个地址已经走 Tailscale 网卡路由;再用Test-NetConnection测端口,能连通就说明链路打通了。这一步是整套方案里最关键的一环:只开 Exit Node 而不发布这条路由,Fake-IP 永远回不来。打通之后完整链路是:
Windows DNS 请求 → Mac Surge DNS → 返回 198.18/15 Fake-IP → 走 Tailscale Subnet Route 回到 Mac → Surge 内部还原成真实域名 → 按 DOMAIN / RULE-SET 正常分流5. 避免 Surge 把 Tailscale 自己的流量也代理进去
在 Surge 配置里加一条:
[General] tun-excluded-routes = 100.64.0.0/10100.64.0.0/10是 Tailscale 自己用的地址段,排除掉能避免绕圈子。如果发现 Tailscale 显示 Direct 但延迟异常,也可以临时把远程设备的公网 IP 加进排除列表——不过公网 IP 会变,这条更适合临时排障,不建议长期写死。6. 确认走的是直连还是 DERP 中继
tailscale status看到
direct 180.x.x.x:21000就是 P2P 直连;看到relay "sfo"就是走的 DERP 中继。也可以用tailscale ping看返回是via 180.x.x.x:21000还是via DERP(...)。实测 Windows 到 Mac 能稳定跑到几毫秒,iPhone 也能通过 IPv6 直连;家里公网 IP 重新拨号也不用管,Tailscale 会自动重新打洞。7. 顺便把 Surge MTProto 也扔进 Tailnet
Surge Mac 自带 MTProto Server,正好可以用 Tailscale Serve 只暴露给自己的设备,不落地公网、不进家庭 LAN。
Surge 配置监听本地回环:
[MTProto] interface = 127.0.0.1 port = 5753 secret = ************************ ipv6 = false然后:
tailscale serve --bg --tcp=5753 tcp://127.0.0.1:5753tailscale serve status能看到tcp://100.x.x.x:5753 -> tcp://127.0.0.1:5753。手机 Telegram 里把 Server 填成 Mac 的 Tailscale IP、端口 5753、加上 secret 就能用。不用了随时tailscale serve --tcp=5753 off关掉。总结
核心其实就两条命令:
sudo tailscale set --advertise-exit-node sudo tailscale set --advertise-routes=198.18.0.0/15在 Admin Console 里把 Exit Node 和
198.18.0.0/15都批准掉,Fake-IP 链路打通,Surge 才算真正变成一台能远程用的网关——不然大概率会卡在 "能 ping 通但打不开网页" 这个坑上。- 收藏 1支持反对打赏

看标题就知道你今晚又在局域网里绕十八弯了,流量和头发都还好吗?

这篇把网络套娃讲明白了,Fake-IP 回不来时,最先迷路的通常是人的耐心😂