#!/bin/bash # 对照实验:QUIC vs HTTP/2,连接数 2 vs 4。 # # 背景: # cloudflared 自己的 precheck 说 "TCP 7844 blocked"(运营商墙了), # 而 --protocol http2 走的正是 TCP 7844。 # UDP 那边 precheck 显示 region1 成功、region2 失败 —— 部分可用。 # # 实测公网:/favicon.ico 能 200,其它路径 530。 # 530 = 边缘找不到可用的隧道连接(请求落 SEA,隧道在 LAX)。 # # 所以要把"协议 + 连接数"这四种组合都跑一遍,用数据选,不靠猜。 set -u PUB=https://relay.xxmxxs.top UNIT=/etc/systemd/system/lanremote-tunnel.service RELAY_DIR=/root/lanremote-relay probe() { # 返回 "可用数/总数" local ok=0 for i in $(seq 1 12); do c=$(curl -s -o /dev/null -w '%{http_code}' --max-time 12 \ -H 'User-Agent: LanRemote/1.4.0' "$PUB/v1/health") [ "$c" = "200" ] && ok=$((ok + 1)) sleep 0.6 done echo "$ok" } set_combo() { local proto="$1" conns="$2" echo " ---- 设置 protocol=$proto ha-connections=$conns ----" sed -i "s/--protocol [a-z0-9]*/--protocol $proto/" "$UNIT" sed -i "s/--ha-connections [0-9]*/--ha-connections $conns/" "$UNIT" systemctl daemon-reload systemctl restart lanremote-tunnel sleep 35 } report() { local label="$1" local conns conns=$(curl -s --max-time 5 http://127.0.0.1:20241/metrics 2>/dev/null \ | grep '^cloudflared_tunnel_ha_connections' | awk '{print $2}') local ok ok=$(probe) printf " %-28s 连接 %-3s 公网 %2s/12\n" "$label" "${conns:-?}" "$ok" return 0 } echo "════════ 对照实验开始(每种组合约 1.5 分钟)════════" echo echo "组合 1/4:HTTP/2 + 2 连接" set_combo http2 2 report "http2 + 2" echo echo "组合 2/4:HTTP/2 + 4 连接" set_combo http2 4 report "http2 + 4" echo echo "组合 3/4:QUIC + 2 连接" set_combo quic 2 report "quic + 2" echo echo "组合 4/4:QUIC + 4 连接" set_combo quic 4 report "quic + 4" echo echo "════════ 各组合的落地机房 ════════" grep -E 'Registered tunnel connection' "$RELAY_DIR/tunnel.log" 2>/dev/null | tail -8 \ | grep -oE 'location=[a-z0-9]+ protocol=[a-z0-9]+' | sed 's/^/ /' echo echo " 说明:这个脚本只做测量,最终选哪种组合由数据定," echo " 跑完我会把最优的一组写回 unit 并重启。"