﻿========================================================
 服务器端（随身 WiFi / Linux）  版本 1.4.0
========================================================

作用：让**不在同一个网络**的电脑和手表连上。

    手表 ──HTTPS──┐
                  ├──> Cloudflare ──> 本机 :8080
    电脑 ──HTTPS──┘

本程序是**纯标准库**的 Python，不装任何第三方包。
内存占用约 20MB，加 cloudflared 共约 60MB —— 512MB 的小机器跑得动。


【装】

  把本文件夹拷到设备上，然后：

      bash install.sh

  它会：
    1. 检查 python3 / cloudflared（没有就下载）
    2. 装两个 systemd 服务并设为开机自启：
         lanremote-relay    中转服务
         lanremote-tunnel   Cloudflare 隧道
    3. 打印公网地址和管理页地址


【常用命令】

  lanremote-url       打印当前公网地址
  lanremote-key       打印管理钥匙
  systemctl status lanremote-relay
  systemctl status lanremote-tunnel
  journalctl -u lanremote-relay -f


【地址老变怎么办？记住一个局域网地址就行】

  匿名隧道的公网地址每次重启都会变。查当前地址：

      浏览器打开  http://<随身WiFi的IP>:8080/url

  比如 http://192.168.2.156:8080/url
  它会直接返回当前的公网地址，纯文本，不用登录。

  下面还有两个命令（SSH 上去用）：
      lanremote-url       打印当前公网地址
      systemctl restart lanremote-tunnel   换个地址（超时的时候用）


【管理】

  管理页： <公网地址>/?key=<lanremote-key 的输出>
  管理页顶部也会大字显示"当前公网地址"。
  管理密码：120830（存在 data/admin_password.txt，可改）

  能看到：设备列表、在线状态、配对码、流量、会话数
  能操作：踢会话、抹掉配对码绑定


【重要：这几个参数都是实测调出来的】

  install.sh 里给 cloudflared 加了：
      --edge-ip-version 4     只走 IPv4
      --ha-connections 1      并发连接数
      --retries 5             连边缘失败时多重试

  为什么（都是踩出来的，不是拍脑袋）：

  ① IPv6：这条线路**分配了 IPv6 地址但实际不通**，
     而 Cloudflare 边缘默认优先 IPv6，会导致建隧道一直超时
     （日志里是 context deadline exceeded）。

  ② 协议：**用默认的 QUIC，不要写 --protocol http2**。
     实测这条线路把 HTTP/2 用的 TCP 7844 挡了：
         TLS handshake with edge error: read tcp ...:7844: i/o timeout
     而 QUIC 走 UDP 7844 是通的。
     （早期版本这里误写成 --protocol http2，隧道完全起不来。）

  ③ 连接数：用 1（默认是 4）。这条线路对并发 UDP 很敏感：
     链路好时 ha=4 只成功注册 1 条（9/10），ha=2 是 10/10；
     链路退化时 ha=2 掉到 0/10（一条失败重试把另一条也拖下水），
     而 ha=1 是 15/15 + 10/10（100%）。
     多一条连接不是多一份冗余，而是多一份争抢。
     冗余交给看门狗（每 30 秒查一次，断了就重启）更靠谱。

  换了网络环境可以试着去掉这些参数用默认值。


【关于隧道地址会变】

  默认用的是 Cloudflare **匿名快速隧道**，地址每次重启会变。
  想固定地址要用**具名隧道**（需要你自己的域名）：

      cloudflared tunnel login          # 浏览器点授权
      cloudflared tunnel create lanremote
      cloudflared tunnel route dns lanremote relay.你的域名
      # 然后把 lanremote-tunnel.service 的 ExecStart 换成：
      #   cloudflared tunnel --no-autoupdate run lanremote

  具名隧道不受匿名隧道限流，稳定性完全不是一个级别。


【省内存】

  默认给两个服务各设了 MemoryMax=128M。
  要再省就把用不上的服务停掉：
      systemctl stop mariadb php8.2-fpm apache2
      systemctl disable mariadb php8.2-fpm apache2
