#!/bin/bash # 等隧道稳定下来,再认真测一轮稳定性。 # # cloudflared 需要时间把 4 条 ha-connection 都建起来。 # 刚重启时只有部分连接可用,所以刚开始会抖。 set -u RELAY_DIR=/root/lanremote-relay echo "===== 等 90 秒让连接建齐 =====" for i in 1 2 3; do sleep 30 N=$(grep -c 'Registered tunnel connection' "$RELAY_DIR/tunnel.log" 2>/dev/null || echo 0) echo " ${i}0 秒: 已注册 $N 条连接" done echo echo "===== 当前连接情况 =====" grep -oE 'Registered tunnel connection.*(ip=[0-9.]+).*(location=[a-z0-9]+).*protocol=[a-z0-9]+' \ "$RELAY_DIR/tunnel.log" 2>/dev/null | tail -6 | sed 's/^/ /' echo echo " 连接的 location:" grep -oE 'location=[a-z0-9]+' "$RELAY_DIR/tunnel.log" 2>/dev/null | sort | uniq -c | sed 's/^/ /' echo echo " 断开次数: $(grep -c 'Connection terminated' "$RELAY_DIR/tunnel.log" 2>/dev/null || echo 0)" echo " quic 错误: $(grep -c 'Failed to dial a quic' "$RELAY_DIR/tunnel.log" 2>/dev/null || echo 0)" echo echo "===== 连打 20 次 =====" OK=0 DEAD=0 for i in $(seq 1 20); do C=$(timeout 15 curl -4 -s -o /dev/null -w '%{http_code}' \ -H 'User-Agent: LanRemote/1.4.0' \ https://relay.xxmxxs.top/v1/health 2>/dev/null) if [ "$C" = "200" ]; then OK=$((OK + 1)); MARK="✓"; else MARK="✗"; fi printf " %2d: %s HTTP %s\n" "$i" "$MARK" "${C:-超时}" sleep 1 done PCT=$((OK * 100 / 20)) echo echo " 成功 $OK / 20 ($PCT%)" echo echo "===== 和局域网直连对比(同一时刻)=====" LOK=0 for i in $(seq 1 10); do C=$(timeout 8 curl -s -o /dev/null -w '%{http_code}' \ http://127.0.0.1:8080/v1/health 2>/dev/null) [ "$C" = "200" ] && LOK=$((LOK + 1)) done echo " 局域网直连: $LOK / 10 (100% 说明中转本身没问题,抖的是隧道)" echo echo "===== 结论 =====" if [ "$PCT" -ge 90 ]; then echo " ✓ 隧道稳定($PCT%),可以正常用" elif [ "$PCT" -ge 70 ]; then echo " ~ 隧道可用但会抖($PCT%)—— 这条 4G 线路的问题" echo " 缓解手段已上:ha-connections=4 + 看门狗自动重启" elif [ "$LOK" -ge 9 ]; then echo " ✗ 中转本地 100% 正常,但隧道只有 $PCT%" echo " 说明是线路到 Cloudflare 边缘这一段不行,不是我们的代码问题" else echo " ✗ 中转本身也有问题" fi