2.1.2:隧道稳定性加固(继续修「网站还是容易挂」)

2.1.1 修掉了 nettune 死锁之后,公网上到 200,但**过一阵又 530**。
这次抓到的是隧道自己:

cloudflared 的 precheck 输出(tunnel.log):

    | UDP Connectivity  region1.v2.argotunnel.com  FAIL  QUIC connection failed                      |
    | TCP Connectivity  region1.v2.argotunnel.com  FAIL  HTTP/2 connection is blocked or unreachable |
    | Cloudflare API    api.cloudflare.com:443     PASS  API is reachable                            |
    | ERROR: Allow outbound QUIC traffic on port 7844 or use HTTP2.                                  |

也就是 **443 通、7844 不通**,而且是**间歇性**的(过几分钟自己又好了,
然后再次断)。Cloudflare 隧道的边缘连接走 7844(QUIC 走 UDP 7844、
HTTP/2 走 TCP 7844)。这条线路对它是间歇性阻断 —— 属于运营商那一侧,
设备改不了,但可以让 cloudflared 自己去适应。

== 两个改动 ==

1. **协议从写死改成 auto**
       lanremote-tunnel      --protocol quic    -> --protocol auto
       lanremote-tunnel-h2   --protocol http2   -> --protocol auto
   原来两条实例各赌一个协议:那一刻 7844 的 UDP 和 TCP 都不通就一起死,
   没有退路(实测连接数掉到 1/0、公网 530)。改成 auto 之后
   cloudflared 自己在 QUIC / HTTP/2 之间挑当前能通的那条,
   10 条连接全都有自适应能力。

2. **--retries 5 -> 1000000**
   原来失败 5 次就退出、靠 systemd Restart=always 拉起来,
   每次退出到重启之间网站都是断的。而这条线路的抖动是分钟级的 ——
   实测隧道每 3~10 分钟就被重启一次(19:37 / 19:40 / 19:43 / 19:50 / 19:52),
   公网跟着一起断。拉大之后抖动期间连接自己恢复,整条隧道不退出。

3. 顺手加日志轮转(tunnel.log 已经 2.98 MB,这台机器硬盘不大)。

== 实测 ==

    改前:连接数 1/0,公网 530
    改后:连接数 7+2(接近满配 10),公网连测 5 次全部 200

== 同步 ==

relay/deploy.sh 里的 MAIN_PROTO / ALT_PROTO 也改成 auto、
TUNNEL_BASE 的 --retries 也拉到 1000000,新机器装出来就是加固过的。

全量回归 46 个阶段全部通过。
This commit is contained in:
xmz7891
2026-10-08 20:04:35 +08:00
parent 4e64bc7920
commit 8dc47d0f48
19 changed files with 423 additions and 36 deletions
+31 -5
View File
@@ -204,9 +204,26 @@ fi
#
# (早先这里写的是"两条同时跑会互相争抢",那个结论是错的,已作废。
# 再早还写过"运营商封 UDP",那个测量方法本身是错的,也作废。)
MAIN_PROTO=quic
# ⚠ 用 auto,不要写死 quic / http2。
#
# 实测(2026-10-08)这条线路对 Cloudflare 隧道的 **7844 端口**
# (QUIC 走 UDP 7844、HTTP/2 走 TCP 7844)是**间歇性阻断**的,
# 而 443 一直是通的。cloudflared 自己的 precheck 报得很清楚:
#
# | UDP Connectivity region1.v2.argotunnel.com FAIL QUIC connection failed |
# | TCP Connectivity region1.v2.argotunnel.com FAIL HTTP/2 connection is blocked or unreachable |
# | Cloudflare API api.cloudflare.com:443 PASS API is reachable |
# | ERROR: Allow outbound QUIC traffic on port 7844 or use HTTP2. |
#
# 写死协议的时候,那一刻 7844 的 UDP 和 TCP 都不通 -> 两条实例一起死
# -> 连接数掉到 1/0 -> 公网 530。实测就是这么挂的。
#
# 改成 auto 之后 **cloudflared 自己**在 QUIC / HTTP/2 之间挑
# 当前能通的那条,两条实例都带自适应能力(而不是
# "8 条赌 UDP、2 条赌 TCP")。改完实测连接数 7+2、公网连测 5 次全 200。
MAIN_PROTO=auto
MAIN_CONNS="${QUIC_CONNS:-8}"
ALT_PROTO=http2
ALT_PROTO=auto
ALT_CONNS="${H2_CONNS:-2}"
# metrics 端口必须**显式钉死**。
@@ -581,9 +598,18 @@ EOF
# --edge-ip-version 4 这条线路有 IPv6 地址但实际不通,
# 边缘默认优先 IPv6 会一直超时
# --ha-connections N 每个单元各自多少条连接(默认 quic 8 / h2 2)
# --retries 5 连边缘失败时多重试
# --metrics ADDR:PORT **必须显式钉死**,见下面的注释
TUNNEL_BASE="--no-autoupdate --edge-ip-version 4 --retries 5"
# --retries N 连边缘失败时重试多少次
#
# ⚠ --retries 从 5 提到 1000000(相当于"一直重试,别退出")。
#
# 原来 5 次就退出,靠 systemd Restart=always 拉起来 ——
# 每次退出到重启之间网站都是断的。而这条线路对 7844 的阻断是
# **分钟级**的,5 次重试远远扛不过去:实测隧道每 3~10 分钟
# 就被重启一次,公网跟着 530。
#
# 拉大之后,抖动期间连接自己恢复,整条隧道不退出,
# 网站也就不会跟着断。
TUNNEL_BASE="--no-autoupdate --edge-ip-version 4 --retries 1000000"
if [ -n "$TOKEN" ]; then
# Token 模式:Token 存单独的 600 权限文件,不写进 unit
+1 -1
View File
@@ -59,7 +59,7 @@ from collections import deque
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
from pathlib import Path
VERSION = "2.1.1"
VERSION = "2.1.2"
# ---------------- 参数(都能用环境变量覆盖)----------------