IP 守护面板
==============

作用
----
面板装在一台服务器上，定时检测源站 IP 的端口。

- 大陆能连上：不处理。
- 大陆连不上、海外能连上：判定被墙。连续失败达到次数后，POST 换 IP 网址，等专属域名解析出新 IP，再把这个 IP 写成 Cloudflare 的 A 记录。
- 大陆和海外都连不上：默认认为是服务自己没开，不换 IP，避免把 IP 换掉仍旧没用。

检测机器建议放在大陆。只有装在会被墙影响的网络里，检测结果才有意义。


一、上传到宝塔
--------------
1. 把 dist 目录里的「cf-ip-guard-宝塔上传.zip」上传到宝塔。
2. 解压到网站根目录：
   /www/wwwroot/api-cf.ladder-cat.com/
3. 解压后应能直接访问：
   https://api-cf.ladder-cat.com/
   https://api-cf.ladder-cat.com/install.sh
   https://api-cf.ladder-cat.com/cf-ip-guard.tar.gz
4. 这个目录只是安装包下载站，不要把面板 data 目录放进来。安装包里带有当前面板设置，包含换 IP 网址和 Cloudflare 密钥。
5. 如果站点开了防盗链或禁止下载 sh、gz，需要关掉，否则另一台机器拉不下来。


二、在另一台服务器安装
----------------------
用 root 登录要安装面板的 Linux 服务器，执行：

  cd /tmp
  curl -fL -o install.sh "https://api-cf.ladder-cat.com/install.sh"
  bash install.sh "https://api-cf.ladder-cat.com/cf-ip-guard.tar.gz"

没有 curl 时：

  wget -O install.sh "https://api-cf.ladder-cat.com/install.sh"
  wget -O cf-ip-guard.tar.gz "https://api-cf.ladder-cat.com/cf-ip-guard.tar.gz"
  bash install.sh ./cf-ip-guard.tar.gz

指定面板端口：

  bash install.sh --port 12580 "https://api-cf.ladder-cat.com/cf-ip-guard.tar.gz"

系统需要 Ubuntu 20.04、Debian 11 或更新的发行版。脚本会优先使用已经安装的 Node 18 及以上；没有的话会从国内镜像下载独立 Node，不改系统原来的 Node。

安装位置：
- 程序：/opt/cf-ip-guard
- 配置和密码：/opt/cf-ip-guard/data
- 端口配置：/etc/cf-ip-guard.env
- 服务名：cf-ip-guard

装好后放行端口：
- 云服务器安全组放行 12580/tcp
- 宝塔「安全」里也放行同样端口
- 浏览器打开 http://服务器IP:12580 ，默认管理员密码是 admin。登录后可以在设置里修改。

常用命令：
  systemctl status cf-ip-guard
  systemctl restart cf-ip-guard
  journalctl -u cf-ip-guard -f


三、面板里要填的内容
--------------------
1. 检测
   - 检测目标：源站 IP，或 VPS 面板里的专属域名。
   - 端口：只填真正对外的端口，例如 443。不要填本来就没开的端口。
   - 本机所在网络：面板装在大陆，保持「大陆」。超时只记录，不换 IP。大陆明确连不上才换 IP。
2. 更换 IP
   - 换 IP 网址：从 VPS 面板复制「换 IP 随机网址」。它等同密码。
   - 请求方式：按服务商说明，常见是 POST。
   - 专属域名：永远指向当前公网 IP 的那个域名。换 IP 后用它确认新地址。
3. Cloudflare 域名
   - API Token：在 Cloudflare 创建，权限至少包含 Zone 读取、Zone DNS 编辑。用这种时邮箱留空。
   - Global API Key：和注册邮箱一起填写。只填密钥、不填邮箱时，Cloudflare 不会接受。
   - Zone ID：可点「查找 Zone」。
   - 解析域名：一行一个，例如 vpn.example.com。根域名可填 @，但要先有 Zone ID。
   - 仅 DNS（灰云）：域名直接指向新 IP，适合客户端直连源站。
   - 已代理（橙云）：只更新源站地址，访客仍先访问 Cloudflare。
4. 先点「保存设置」。
5. 点「测试连接并读取解析」确认 Token 可用。
6. 点「把当前 IP 写入 CF」，先把域名指到现在的 IP。
7. 点「立即检测」看端口结果。
8. 确认无误后，打开右上角「自动换 IP」。

自动换 IP 默认连续失败 3 次才更换。平时约 15 秒检测一次；已经明确连不上时，约 8 秒再确认一次。换完冷却 10 分钟。
单次连接默认最多等 3 秒。超时只记录，不换 IP。
检测目标如果填的是 IP，换成功后会自动改成新 IP。填专属域名则不用改。
首页「记录」可以清除，换 IP 历史会保留。
这次的安装包带有当前面板设置。新机器第一次安装会直接用这些设置。如果 /opt/cf-ip-guard/data/settings.json 已经存在，安装不会覆盖它。


四、升级
--------
把新的上传包解压覆盖宝塔里的 cf-ip-guard 目录，然后在业务服务器重新执行安装命令。
/opt/cf-ip-guard/data 和 /etc/cf-ip-guard.env 会保留。


五、卸载
--------
安装包里的 uninstall.sh 可以单独执行：

  bash uninstall.sh

这会停掉服务并删除程序，但保留 data 目录。彻底删除：

  rm -rf /opt/cf-ip-guard /etc/cf-ip-guard.env


六、注意
--------
- 换 IP 网址、Cloudflare Token 和面板密码都只在业务服务器的 data 目录里。
- 不要把 data 目录同步到公开网站，也不要发给别人。
- VPS 面板里一旦刷新换 IP 网址，旧网址立刻失效，要回到本面板重新填写。
- 自动换 IP 会真实调用服务商接口并修改 Cloudflare 解析，请先手动检测和手动写入各成功一次。
