对话笔记直发:GCP 网络排查与修复报告 2026-08-30。分类:AI工程。
GCP 网络排查与修复报告
日期:2026-08-30 | 机器:gcp(free-tier-vm,Debian 12,us-west1-a,公网
你的服务器IP(已脱敏),SSH root@2255) 结论先行:根因 = 机器上常驻的 dae 分流代理(eBPF)把 Tailscale 流量与 DNS 劫持到不稳定的代理节点。暂停 dae 完成入网(gcp =tailnet内网IP(已脱敏)),验收全绿。dae 配置未做任何改动。
1. 现象与时间线
| 时间(+0800) | 事件 |
|---|---|
| 19:30 | Plan A P1 阶段,gcp 在线安装 Tailscale 失败:Could not resolve host: pkgs.tailscale.com,apt 部分索引下载失败 |
| 19:35 | 诊断:getent hosts 对 debian.org / google.com / pkgs.tailscale.com 全部失败;resolvectl query 却能查到部分记录 |
| 19:40 | 绕过方案成功:从 aws 的 apt 缓存取 .deb 经 WSL 传入,dpkg -i 安装 tailscale 1.102.3 完成 |
| 19:47 | tailscale up 挂死。journalctl:bootstrapDNS(...derp12...) error: EOF、failed to resolve "controlplane.tailscale.com": no DNS fallback candidates remain |
| 19:50 | 连通性采样:TCP 443 → 1.1.1.1 ✅ / 142.250.x(Google) ✅;TCP 443 → 你的服务器IP(已脱敏)(pkgs) ❌ / 你的服务器IP(已脱敏)(controlplane A) ❌;UDP 53 → 8.8.8.8 ❌;DoH(1.1.1.1) ❌。当时误判为”DNS 污染 + SNI 拦截”(写入初版 inventory) |
| (侧聊排查) | 复测发现同一批 IP 从 BLOCKED 变 OPEN——故障会自己好/坏 → 排除静态防火墙,指向”看心情放行的中间人”;网卡列表发现 dae0@if18 |
| (侧聊排查) | 实锤:systemctl stop dae → DNS 瞬间恢复 → tailscale up 一次成功 → systemctl start dae,登录态保持 |
2. 排查推理链(三个假设的推翻与确认)
| 假设 | 检验方法 | 结果 |
|---|---|---|
| ① DNS 被污染(返回假 IP) | 从干净网络(aws 首尔)解析同一批域名对照 | gcp 与 aws 得到的 IP 一致(controlplane IPv6 完全相同)→ 记录是真的,排除 |
| ② GCP 出站防火墙按段拦截 | 对 6 个不同家的 IP 打 TCP 443 地图 | 8.8.8.8/1.0.0.1/AWS(216.128.x)/CloudFront(143.204.x)/GCP-LB 全 OPEN(初测曾 BLOCKED)→ 规则不静态,排除 |
| ③ 机器上有”会变卦的中间人”(代理) | 网卡列表抓到 dae0@if18;确认 /usr/local/bin/dae 自 6 月 13 日常驻,配置 /usr/local/etc/dae/config.dae 中 0 条 tailscale 直连规则 | ✅ 实锤。停止 dae 后 DNS 立刻恢复、入网一次成功,反证闭环 |
3. 根因
dae(daeuniverse 的 eBPF 透明分流代理)自 2026-06-13 起常驻本机,其路由规则未对 tailscale.com / ts.net / tailnet内网IP(已脱敏)/10 做直连放行,导致:
- DNS 被劫持/不稳:dae 接管 UDP 53,部分域名解析随机失败(getent 全挂、resolvectl 时好时坏、UDP→8.8.8.8 被拦、DoH 失败);
- Tailscale 控制面/DERP 流量被分到代理节点:节点健康时通,节点抖动时就断——这正是”同一 IP 一小时内 BLOCKED→OPEN”的原因。
为什么之前查不到:dae 走内核 eBPF 劫持,iptables/nft ruleset 里零痕迹(无 REDIRECT/TPROXY/MARK);且排查 grep 的关键字(warp/wire/clash/sing/xray/v2ray/tun/proxy)不含 “dae”,dae0 网卡名在第一轮 ip link 输出里被淹没。教训记录在第 7 节。
4. 已执行的处置
| # | 动作 | 说明 |
|---|---|---|
| 1 | systemctl stop dae(暂停,未改配置) | 腾出干净网络窗口;约 1 分钟内其他服务代理连接闪断,属预期 |
| 2 | tailscale up --authkey=<单机钥匙> --hostname=gcp --accept-dns=false | 一次成功,gcp = tailnet内网IP(已脱敏) |
| 3 | systemctl start dae | 恢复原有代理链路,登录态保持 |
| 4 | API 关闭 gcp 设备 key 过期 | id=2073516613890573 |
| 5 | ACL 追加放行 | feng-1 与 tx-tencent → tailnet内网IP(已脱敏) : tcp/2255 + icmp(现共 11 grants;备份 /root/acl-current-20260830.json) |
| 6 | 补发 AI 公钥到 gcp root | aiops-wsl + aiops-mindfs 双 key(改动前备份 authorized_keys.bak-20260830) |
| 7 | fail2ban 加 ignoreip = 127.0.0.1/8 tailnet内网IP(已脱敏)/10 | 防私网侧 AI 误封(备份 /root/jail.local.bak-20260830) |
5. 验收结果(全绿)
WSL(默认钥匙) → root@`tailnet内网IP(已脱敏)`:2255 → OK:free-tier-vm ✅
WSL(aiops-wsl) → root@`tailnet内网IP(已脱敏)`:2255 → root@free-tier-vm ✅
tx(mindfs+aiops-mindfs) → gcp:2255 → root@free-tier-vm ✅(手机 MindFS 路径打通)
dae 重启后 tailscale 登录态 → `tailnet内网IP(已脱敏)` 保持 ✅
入网进度:5/6(yun1 / aws / rabisu / rabisu-1 / gcp ✅;仅剩 yun 等用户提权)。
6. 遗留风险与永久修复建议(待用户批准)
风险:dae 已恢复运行,Tailscale 的 WireGuard(UDP 41641) 与 DERP(TCP 443) 流量重新归它管辖。当前链路正常,但其代理节点抖动时,gcp 的私网链路可能再次时断时续。
建议的永久修复(改 /usr/local/etc/dae/config.dae,routing 段靠前位置加两行直连规则):
pname(tailscaled) -> direct
dip(`tailnet内网IP(已脱敏)`/10) -> direct
操作方式:备份 → 编辑 → systemctl reload dae 平滑重载(不中断既有代理)。因 dae 是用户代理体系的地盘,未获批准不动,一句话即执行。
7. 经验教训
- eBPF 代理在传统排查里是隐形的:iptables-save / nft list ruleset 均无痕迹,必须看
ip link里的虚拟网卡(dae0/weg0/tun0 等)+systemctl list-units全量核对; - grep 关键字要包含工具本身的名字:本轮 grep 漏掉 “dae”;另 grep 模式
sing误命中 cron 的 “processing” 字样——宽泛模式会产生假信号; - “时好时坏”是代理链路的指纹:静态防火墙不会让同一 IP 一小时内 BLOCKED→OPEN;遇到间歇性故障优先测”暂停可疑中间层”做 A/B;
- 跨机对照解析是真伪 DNS 的最快裁判:从一台干净机器解析同样域名一比即知。
8. 附录:关键证据命令
# 根因确认
systemctl status dae # active, enabled, since Jun 13
ps aux | grep [d]ae # /usr/local/bin/dae run -c /usr/local/etc/dae/config.dae
grep -c "tailscale" /usr/local/etc/dae/config.dae # 0 —— 无直连规则
ip -br link # dae0@if18 UP
# 决定性 A/B 实验
systemctl stop dae && getent ahostsv4 controlplane.tailscale.com # 立刻返回 `你的服务器IP(已脱敏)`(真实 IP)
tailscale up --authkey=$(cat /tmp/.tskey) --hostname=gcp --accept-dns=false
systemctl start dae
# 真实 IP 对照(干净网络 aws)
getent ahostsv4 controlplane.tailscale.com # `你的服务器IP(已脱敏)`(与 gcp 所得同段,均为真实记录)待同步文档:
docs/server-inventory.yaml/md(gcp 改”已入网”)、/mnt/vps/gcp/AGENTS.md(替换”未入网”段)、docs/execution-log.md(本报告条目)——待用户指示后执行。