#!/bin/bash # 反复重启隧道,直到拿到一个能用的地址。 # # 背景:这条线路对 api.trycloudflare.com(Cloudflare 真实 IP)TCP 握手超时, # 所以匿名隧道时好时坏。多重试几次通常能碰上一次成功的。 set -u URL_FILE=/root/lanremote-relay/public_url.txt for attempt in 1 2 3 4 5; do echo "===== 第 $attempt 次尝试 =====" systemctl restart lanremote-tunnel rm -f "$URL_FILE" URL="" for i in $(seq 1 30); do sleep 3 URL=$(cat "$URL_FILE" 2>/dev/null || echo "") [ -n "$URL" ] && break done if [ -z "$URL" ]; then echo " 60 秒没拿到地址,看日志:" tail -2 /root/lanremote-relay/tunnel.log 2>/dev/null | sed 's/^/ /' continue fi echo " 拿到地址: $URL" for j in 1 2 3; do C=$(timeout 15 curl -s -o /dev/null -w '%{http_code}' "$URL/v1/health" 2>/dev/null) printf " 验证第 %d 次: HTTP %s\n" "$j" "${C:-超时}" if [ "$C" = "200" ]; then echo echo " ✓ 可用!" echo "$URL" > "$URL_FILE" exit 0 fi sleep 5 done echo " 地址拿到了但访问不通" done echo echo " ✗ 5 次都没成功" echo " 这正是必须用具名隧道的原因 —— 匿名隧道在这条线路上不可靠。" echo echo " 当前仍然可用的入口(局域网):" echo " http://192.168.2.156:8080/url" exit 1