#!/bin/bash # 测试 --region:能不能让 cloudflared 连亚洲边缘而不是美西? # # 现状:连的是 198.41.x.x,落地 lax01/sjc07(美西),ICMP 199~243ms, # 丢包 40%,握手经常超时。 # cloudflared 有个 --region 参数("Cloudflare Edge region to connect to")。 # 如果能把落地换到香港/新加坡/东京,延迟和丢包都会好很多。 set -u URL=https://relay.xxmxxs.top RELAY_DIR=/root/lanremote-relay BASE="--no-autoupdate --edge-ip-version 4 --retries 5 --config /root/.cloudflared/config.yml run lanremote" try_region() { local region="$1" local label="$2" systemctl stop lanremote-tunnel 2>/dev/null || true pkill -f cloudflared 2>/dev/null || true sleep 2 : > "$RELAY_DIR/tunnel.log" if [ -n "$region" ]; then nohup cloudflared tunnel --region "$region" $BASE \ >> "$RELAY_DIR/tunnel.log" 2>&1 & else nohup cloudflared tunnel $BASE >> "$RELAY_DIR/tunnel.log" 2>&1 & fi sleep 30 local conns loc proto conns=$(grep -c 'Registered tunnel connection' "$RELAY_DIR/tunnel.log" 2>/dev/null || echo 0) loc=$(grep -o 'location=[a-z0-9]*' "$RELAY_DIR/tunnel.log" 2>/dev/null | tail -1) proto=$(grep -o 'protocol=[a-z0-9]*' "$RELAY_DIR/tunnel.log" 2>/dev/null | tail -1) printf " %-14s 注册 %-3s %-14s %s\n" "$label" "$conns" "${loc:-?}" "${proto:-?}" if [ "$conns" = "0" ]; then echo " 报错:" grep -iE 'error|fatal|invalid' "$RELAY_DIR/tunnel.log" 2>/dev/null \ | tail -2 | sed 's/^/ /' fi # 快速探 10 次 local ok=0 for i in $(seq 1 10); do c=$(timeout 12 curl -4 -s -o /dev/null -w '%{http_code}' \ -H 'User-Agent: LanRemote/1.4.0' "$URL/v1/health" 2>/dev/null) [ "$c" = "200" ] && ok=$((ok+1)) sleep 2 done echo " 公网 $ok/10" echo "$label|$ok|${loc:-?}|$conns" >> /root/region_result.txt pkill -f cloudflared 2>/dev/null || true sleep 2 } : > /root/region_result.txt echo "===== 各 region 的表现 =====" try_region "" "默认(global)" try_region "ap" "ap" try_region "us" "us" echo echo "===== 汇总 =====" while IFS='|' read -r label ok loc conns; do printf " %-16s 公网 %s/10 落地=%s 注册=%s\n" "$label" "$ok" "$loc" "$conns" done < /root/region_result.txt echo echo "===== 恢复默认配置 =====" cat > /etc/systemd/system/lanremote-tunnel.service <