#!/bin/bash # 看隧道当前配置,并做一轮协议/连接数的对照实测。 set -u echo "════════ 1. 隧道服务当前参数 ════════" grep -E 'ExecStart' /etc/systemd/system/lanremote-tunnel.service | sed 's/^/ /' echo echo "════════ 2. cloudflared 版本 & 支持的参数 ════════" cloudflared --version 2>&1 | head -1 | sed 's/^/ /' echo " --- 和丢包恢复相关的参数:" cloudflared tunnel run --help 2>&1 | grep -E 'protocol|ha-connections|edge-ip-version|region|retries' | sed 's/^/ /' echo echo "════════ 3. 当前落点 ════════" curl -s --max-time 5 http://127.0.0.1:20241/metrics 2>/dev/null \ | grep 'server_locations.*} 1' | sed 's/^/ /' echo echo "════════ 4. 测一轮公网(12 次,记录耗时分布)════════" times=() ok=0 for i in $(seq 1 12); do out=$(curl -s -o /dev/null -w '%{http_code} %{time_total}' --max-time 25 \ -H 'User-Agent: LanRemote/1.8.0' https://relay.xxmxxs.top/v1/health) code=$(echo "$out" | awk '{print $1}') ms=$(echo "$out" | awk '{printf "%d", $2*1000}') times+=("$ms") [ "$code" = "200" ] && ok=$((ok+1)) printf " %2d: HTTP %-4s %5sms\n" "$i" "$code" "$ms" sleep 1 done echo " 可用 $ok/12" echo " 耗时: $(printf '%s\n' "${times[@]}" | sort -n | awk '{a[NR]=$1} END {printf "最小 %dms 中位 %dms 最大 %dms", a[1], a[int(NR/2)+1], a[NR]}')" echo echo "════════ 5. 每个候选 edge IP 的可达性(挑最快的)════════" python3 - <<'PY' import socket, time ips = ["198.41.192.47", "198.41.192.57", "198.41.192.67", "198.41.192.107", "198.41.192.167", "198.41.192.227", "198.41.200.23", "198.41.200.33", "198.41.200.43", "198.41.200.63", "198.41.200.113", "198.41.200.193"] rows = [] for ip in ips: s = socket.socket(); s.settimeout(4) t = time.perf_counter() try: s.connect((ip, 7844)) ms = (time.perf_counter() - t) * 1000 rows.append((ms, ip, "通")) except OSError as e: rows.append((99999, ip, "不通")) finally: s.close() rows.sort() for ms, ip, st in rows: if st == "通": print(" %-16s %6.0f ms" % (ip, ms)) else: print(" %-16s 不通" % ip) good = [r for r in rows if r[2] == "通"] print(" => %d/%d 可达,最快 %s" % (len(good), len(rows), good[0][1] if good else "无")) PY echo echo "════════ 6. 隧道日志里 i/o timeout 的最近频率 ════════" for kw in 'Registered tunnel connection' 'Lost connection' 'i/o timeout' 'context deadline'; do n=$(tail -800 /root/lanremote-relay/tunnel.log 2>/dev/null | grep -c "$kw") printf " %-34s %s 次(最近 800 行)\n" "$kw" "$n" done