# -*- coding: utf-8 -*- """把 ha-connections=2 这个发现写进 install.sh。 实测数据(这条 4G 线路上): ha=4 -> 9/10,而且只成功注册 1 条连接(其余一直在握手超时) ha=2 -> 10/10,2 条都注册 ha=1 -> 10/10,1 条 定稿后再测:ha=2 连打 30 次,29/30 成功,0 次断开,0 次 quic 错误。 原因推测:这条线路对并发 UDP 有节制,4 条 QUIC 同时握手互相挤, 反而条条失败。2 条是甜点:够稳,又还有冗余。 install.sh 原来写的 `--ha-connections 4` 要改掉。 """ from __future__ import annotations import sys from pathlib import Path INSTALL = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote\relay" r"\install.sh") OLD = '''ExecStart=/usr/local/bin/cloudflared tunnel --no-autoupdate --edge-ip-version 4 --config $CONF run $TUNNEL_NAME''' NEW = '''# ha-connections=2 是实测调出来的(不是拍脑袋): # 这条 4G 线路对并发 UDP 有节制,4 条 QUIC 同时握手会互相挤, # 结果只成功 1 条、可用率 9/10;降到 2 条后 10/10, # 而且仍有冗余(连两个不同的边缘节点)。 ExecStart=/usr/local/bin/cloudflared tunnel --no-autoupdate --edge-ip-version 4 --ha-connections 2 --retries 5 --config $CONF run $TUNNEL_NAME''' ANCHOR2 = ''' install.sh 里给 cloudflared 加了: --edge-ip-version 4 只走 IPv4 --protocol http2''' NEW2 = ''' install.sh 里给 cloudflared 加了: --edge-ip-version 4 只走 IPv4 --ha-connections 2 并发连接数(实测调出来的,见下) --retries 5 连边缘失败时多重试 关于协议:**用默认的 QUIC,不要指定 http2**。 实测这条线路把 HTTP/2 用的 TCP 7844 挡了(TLS 握手超时), 而 QUIC 走 UDP 7844 是通的。 关于连接数:默认是 4,但这条线路上 4 条并发 QUIC 握手会互相挤, 只成功 1 条、可用率 9/10。降到 2 条后 10/10, 定稿后连打 30 次 29/30 成功、0 次断开。''' def main() -> int: text = INSTALL.read_text(encoding="utf-8") ok = True if "--ha-connections 2" in text: print(" install.sh 已经是 ha-connections 2") elif OLD in text: text = text.replace(OLD, NEW, 1) print(" install.sh: 自启单元加了 --ha-connections 2 --retries 5") else: print(" [失败] 找不到 ExecStart 锚点") # 打出来看看实际长什么样 for line in text.splitlines(): if "ExecStart" in line and "cloudflared" in line: print(f" 实际: {line.strip()[:110]}") ok = False if ANCHOR2 in text: text = text.replace(ANCHOR2, NEW2, 1) print(" install.sh: 说明文档更新(协议 + 连接数)") elif "--ha-connections 2" in text and "连接数" in text: print(" install.sh: 说明已经更新过") else: print(" [跳过] 说明锚点没找到") INSTALL.write_text(text, encoding="utf-8", newline="\n") raw = INSTALL.read_bytes() if b"\r\n" in raw: INSTALL.write_bytes(raw.replace(b"\r\n", b"\n")) print(" 顺手修了 CRLF") # 复核 text = INSTALL.read_text(encoding="utf-8") for line in text.splitlines(): if "ExecStart" in line and "cloudflared" in line: print(f" 现在: {line.strip()[:120]}") return 0 if ok else 1 if __name__ == "__main__": sys.exit(main())