手把手:PVE 上搭建代理容器和 Ubuntu agent 虚拟机
在已经装好 PVE 的机器上,从零创建 LXC 容器、安装 mihomo 作为共享代理,再装一台 Ubuntu 虚拟机并让它走代理。
0. 先规划好 IP
后文都用下面这组地址举例,换成你自己家的网段。网段怎么选、换了网段哪些地方要跟着改,见 规划网段和 IP。
| 设备 | IP |
|---|---|
| 路由器(网关) | 192.168.50.1 |
| PVE 宿主机 | 192.168.50.205 |
| 代理容器 proxy(LXC) | 192.168.50.101 |
| 笔记本(装了 Clash Verge) | 192.168.50.59 |
| Ubuntu 虚拟机 agent-01 | 由路由器自动分配(DHCP) |
第一部分:创建 LXC 容器
1.1下载 Debian 模板
网页上的“模板”下载走的是国外官方服务器,实际很慢、两次都失败了。推荐直接在 PVE 的 Shell 里从中科大镜像下载(几十秒):
cd /var/lib/vz/template/cache F=$(curl -s https://mirrors.ustc.edu.cn/proxmox/images/system/ | grep -o 'debian-13-standard[^"<]*\.tar\.zst' | sort -uV | tail -1) echo "要下载:$F" # 2026-10 时是 debian-13-standard_13.6-1_amd64.tar.zst wget https://mirrors.ustc.edu.cn/proxmox/images/system/$F
下载完,在 local (pve) → CT 模板 里刷新就能看到。
想让网页上的 CT 模板 → 模板 下载也走国内镜像,可以执行下面的命令(PVE 升级后可能被还原,到时再执行一次)。正在下载的慢任务,在底部任务列表里双击 → 停止:
sed -i 's|http://download.proxmox.com|https://mirrors.ustc.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm systemctl restart pvedaemon && pveam update
1.2创建容器
点右上角的 创建 CT,按标签页逐个填写:
| 标签页 | 填什么 |
|---|---|
| 常规 | CT ID:101;主机名:proxy;保持勾选“无特权的容器”;勾选“嵌套”(Debian 13 的 systemd 需要,否则部分服务可能起不来);设置 root 密码 |
| 模板 | 存储:local;模板:刚下载的 debian-13-standard |
| 磁盘 | 存储:local-lvm;大小:4 GiB |
| CPU | 核心:1 |
| 内存 | 内存:512 MiB;Swap:512 MiB |
| 网络 | 桥接:vmbr0;IPv4 选“静态”;IPv4/CIDR:192.168.50.101/24;网关:192.168.50.1;IPv6 留空 |
| DNS | 留空,沿用宿主机的设置 |
| 确认 | 勾选 创建后启动,点 完成 |
“确认”页可以核对一下:应该看到 features nesting=1,以及 net0 … ip=192.168.50.101/24,gw=192.168.50.1。别忘了勾选左下角的“创建后启动”。
创建好后,在左侧选中 101 (proxy) → 选项 → 双击 开机自动启动,改成“是”。
1.3进入容器做基础设置
选中 101 (proxy) → 控制台。用户名填 root,密码是刚才设置的。登录后执行:
# 换成中科大镜像源(容器里先用 http,避免证书问题) sed -i 's|http://deb.debian.org|http://mirrors.ustc.edu.cn|g; s|http://security.debian.org|http://mirrors.ustc.edu.cn|g' \ /etc/apt/sources.list /etc/apt/sources.list.d/*.sources 2>/dev/null # 设成北京时间 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 安装需要用到的工具 apt update && apt install -y curl ca-certificates unzip # 确认容器能上网:显示 3 received 就对了 ping -c 3 223.5.5.5
网页控制台里粘贴:右键菜单粘贴,或者 Mac 上 Cmd+V。
第二部分:安装 mihomo
2.1下载 mihomo、IP 数据库和网页面板
这些文件都放在 GitHub 上,国内直接下载通常很慢甚至失败。有三种方式,实际用的是方式一。
方式一(推荐,实测可用):一键脚本,走 GitHub 加速代理
脚本会依次尝试几个 GitHub 加速地址(实测 ghfast.top 可用),IP 数据库优先走 jsDelivr CDN,每个文件下载完都会检查是否完整。在容器控制台里整段粘贴:
cat > /root/install-mihomo.sh <<'EOF'
#!/bin/bash
# 通过 GitHub 加速代理安装 mihomo、IP 数据库和网页面板
set -u
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY
apt-get install -y curl unzip gzip ca-certificates >/dev/null
# 依次尝试这些加速前缀(失效了可以自己加新的);最后的 "" 表示直连 GitHub
PROXIES=("https://ghfast.top/" "https://gh-proxy.com/" "https://ghproxy.net/" "")
dl() { curl -fL --retry 3 --connect-timeout 15 -o "$2" "$1"; }
echo "===== 1. 寻找可用的加速地址 ====="
GH=""; VER=""
for p in "${PROXIES[@]}"; do
echo "尝试:${p:-直连 GitHub}"
v=$(curl -fsSL --max-time 15 "${p}https://github.com/MetaCubeX/mihomo/releases/latest/download/version.txt" 2>/dev/null | tr -d '[:space:]')
if [[ "$v" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
GH="$p"; VER="$v"; echo " ✓ 可用,mihomo 最新版本:$VER"; break
fi
echo " ✗ 不可用"
done
[ -z "$VER" ] && { echo "所有加速地址都不可用,请改用方式三(Mac 下载后传进容器)"; exit 1; }
echo "===== 2. 下载并安装 mihomo ====="
cd /tmp
F="mihomo-linux-amd64-$VER.gz"
if ! dl "${GH}https://github.com/MetaCubeX/mihomo/releases/download/$VER/$F" "$F" || ! gzip -t "$F"; then
echo "✗ mihomo 下载失败或文件损坏"; exit 1
fi
gunzip -f "$F"
install -m 755 "mihomo-linux-amd64-$VER" /usr/local/bin/mihomo
/usr/local/bin/mihomo -v | head -1 || { echo "✗ mihomo 无法运行"; exit 1; }
echo "===== 3. 下载 IP 数据库(优先用 jsDelivr)====="
mkdir -p /etc/mihomo
get_geo() { # get_geo <远端文件名> <本地文件名>
local out="/etc/mihomo/$2"
for url in "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/$1" \
"${GH}https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/$1"; do
if dl "$url" "$out" 2>/dev/null && [ "$(stat -c%s "$out")" -gt 100000 ]; then
echo " ✓ $2($(du -h "$out" | cut -f1))"; return 0
fi
done
echo " ✗ $2 下载失败"; return 1
}
get_geo country.mmdb Country.mmdb || exit 1
get_geo geoip.metadb geoip.metadb || exit 1
echo "===== 4. 下载网页面板 ====="
if ! dl "${GH}https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip" /tmp/ui.zip || ! unzip -tq /tmp/ui.zip >/dev/null; then
echo "✗ 网页面板下载失败或文件损坏"; exit 1
fi
rm -rf /etc/mihomo/ui /tmp/metacubexd-gh-pages
unzip -q /tmp/ui.zip -d /tmp && mv /tmp/metacubexd-gh-pages /etc/mihomo/ui
echo " ✓ 网页面板已放到 /etc/mihomo/ui"
echo
echo "===== 全部完成 ====="
mihomo -v | head -1
ls -lh /etc/mihomo
EOF
bash /root/install-mihomo.sh
实测输出(2026-10-07):mihomo v1.19.32,Country.mmdb 7.4M,geoip.metadb 8.1M,网页面板放到 /etc/mihomo/ui。脚本可以重复运行,以后升级 mihomo 也再跑一次。
PROXIES,或者改用方式三。方式二:临时借用笔记本上 Clash Verge 的代理
- 在笔记本的 Clash Verge 里打开 设置 → 局域网连接(也叫 Allow LAN)
- 记下 端口号:Clash Verge Rev 默认是
7897,老版本是7890 - 如果是 Windows 笔记本,系统防火墙弹出提示时要点 允许
然后在容器控制台里执行:
# 临时通过笔记本的代理上网(IP 和端口换成你自己的) export http_proxy=http://192.168.50.59:7897 https_proxy=http://192.168.50.59:7897 curl -sI https://github.com | head -1 # 先测试:显示 200 再继续;502 就在 Clash Verge 里换个节点 # 1. 下载 mihomo 程序(自动获取最新版本号) cd /tmp VER=$(curl -sL https://github.com/MetaCubeX/mihomo/releases/latest/download/version.txt) echo "最新版本:$VER" curl -LO https://github.com/MetaCubeX/mihomo/releases/download/$VER/mihomo-linux-amd64-$VER.gz gunzip mihomo-linux-amd64-$VER.gz install -m 755 mihomo-linux-amd64-$VER /usr/local/bin/mihomo mihomo -v # 能显示版本号就说明装好了 # 2. 下载 IP 数据库(用来判断哪些是国内网站、可以直连) mkdir -p /etc/mihomo curl -L -o /etc/mihomo/Country.mmdb https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country.mmdb curl -L -o /etc/mihomo/geoip.metadb https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.metadb # 3. 下载网页面板 curl -L -o /tmp/ui.zip https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip unzip -q /tmp/ui.zip -d /tmp && mv /tmp/metacubexd-gh-pages /etc/mihomo/ui # 下载完毕,取消临时代理 unset http_proxy https_proxy
下载完成后,笔记本的“局域网连接”可以关掉,以后不再需要它。
方式三:在 Mac 上下载,再传进容器(最可靠)
在 Mac 浏览器里下载这 4 个文件:GitHub Releases 里的 mihomo-linux-amd64-v1.x.x.gz(注意是 linux-amd64)、country.mmdb、geoip.metadb、metacubexd 的 gh-pages.zip,然后:
# Mac 终端:传到 PVE 宿主机 cd ~/Downloads scp mihomo-linux-amd64-*.gz country.mmdb geoip.metadb metacubexd-gh-pages.zip root@192.168.50.205:/root/ # PVE 宿主机的 Shell:推进容器 for f in /root/mihomo-linux-amd64-*.gz /root/country.mmdb /root/geoip.metadb /root/metacubexd-gh-pages.zip; do pct push 101 "$f" "/root/$(basename $f)" done # 容器控制台:安装 cd /root gunzip mihomo-linux-amd64-*.gz && install -m 755 mihomo-linux-amd64-v* /usr/local/bin/mihomo mkdir -p /etc/mihomo mv country.mmdb /etc/mihomo/Country.mmdb && mv geoip.metadb /etc/mihomo/ unzip -q metacubexd-gh-pages.zip -d /tmp && mv /tmp/metacubexd-gh-pages /etc/mihomo/ui
2.2写配置文件
只需要改前两行:PASS 是网页面板的登录密码,自己随便定;SUB 是机场的订阅链接(Clash Verge → 订阅 → 右键 → 编辑信息里能看到)。然后整段粘贴:
PASS='改成你的面板密码'
SUB='你的订阅链接'
cat > /etc/mihomo/config.yaml <<EOF
mixed-port: 7890
allow-lan: true
bind-address: "*"
mode: rule
log-level: info
external-controller: 0.0.0.0:9090
secret: "${PASS}"
external-ui: ui
profile:
store-selected: true # 记住你选的节点,重启后不会丢
proxy-providers:
airport:
type: http
url: "${SUB}"
interval: 3600
path: ./providers/airport.yaml
health-check:
enable: true
url: https://www.gstatic.com/generate_204
interval: 300
proxy-groups:
- name: PROXY
type: select
use: [airport]
rules:
- IP-CIDR,192.168.0.0/16,DIRECT
- IP-CIDR,10.0.0.0/8,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY
EOF
mihomo -t -d /etc/mihomo
最后一行显示 configuration file ... test is successful 就是正确的。
- 面板密码:字母加数字,12 位以上;不要包含
'"\$,会把命令或配置弄乱。懒得想就生成一个:tr -dc 'A-Za-z0-9' </dev/urandom | head -c 16; echo - 以后改密码:
nano /etc/mihomo/config.yaml改secret:那一行,再systemctl restart mihomo
2.3设置成开机自启的系统服务
cat > /etc/systemd/system/mihomo.service <<'EOF' [Unit] Description=mihomo After=network-online.target [Service] ExecStart=/usr/local/bin/mihomo -d /etc/mihomo Restart=always [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable --now mihomo systemctl status mihomo --no-pager | head -3 # 看到 active (running) 就说明启动成功了 ls -lh /etc/mihomo/providers/ # 能看到 airport.yaml,说明订阅拉取成功
如果没有启动成功,或者没有 airport.yaml,用 journalctl -u mihomo -n 50 --no-pager 查看日志。
2.4在网页面板里选节点
- 在笔记本浏览器里打开
http://192.168.50.101:9090/ui - 第一次打开会要求填写后端地址:填
http://192.168.50.101:9090,密钥填配置里设置的secret - 进入 代理 页面 → 找到 PROXY 组 → 点一个真实的节点
2.5测试代理能不能用
回到容器控制台执行:
curl -x http://127.0.0.1:7890 -s -o /dev/null -w "%{http_code}\n" https://www.google.com
# 输出 200 就说明代理可以用了
curl -x http://127.0.0.1:7890 -s https://ipinfo.io # 出口 IP:应该是节点所在的国外 IP
在 Mac 上做一次完整测试(用 -x 指定走工作站上的代理,不受 Mac 上 Clash Verge 的影响):
P=http://192.168.50.101:7890
nc -vz -G 3 192.168.50.101 7890 # 1. 端口能连上:succeeded
curl -x $P -s -o /dev/null -w "Google: HTTP %{http_code}\n" https://www.google.com # 2. 200
curl -x $P -s https://ipinfo.io | grep -E '"(ip|city|country|org)"' # 3. 国外 IP
curl --socks5-hostname 192.168.50.101:7890 -s https://ipinfo.io/ip; echo # 4. SOCKS5 同一端口
curl -x $P -s -o /dev/null -w "Claude API: HTTP %{http_code}\n" https://api.anthropic.com # 5. 有状态码(如 404)即连通
curl -x $P -s -o /dev/null -w "%{speed_download}" "https://speed.cloudflare.com/__down?bytes=50000000" \
| awk '{printf "下载速度: %.1f MB/s\n", $1/1024/1024}' # 6. 速度
第三部分:安装 Ubuntu 虚拟机
3.1下载 Ubuntu 镜像
在 PVE 宿主机的 Shell 里直接下载到 ISO 目录:
cd /var/lib/vz/template/iso
F=$(curl -s https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/24.04/ | grep -o 'ubuntu-24\.04\.[0-9]*-live-server-amd64\.iso' | sort -u | tail -1)
echo "要下载:$F" # 2026-10 时是 ubuntu-24.04.5-live-server-amd64.iso
for M in https://mirrors.tuna.tsinghua.edu.cn https://mirrors.aliyun.com https://mirror.nju.edu.cn https://repo.huaweicloud.com; do
echo "===== 尝试 $M ====="
if wget -c "$M/ubuntu-releases/24.04/$F"; then
wget -qO- "$M/ubuntu-releases/24.04/SHA256SUMS" | grep " \*\?$F\$" | sha256sum -c && break
fi
done
ls -lh $F # 约 3.1G
403 Forbidden(它对 ISO 大文件有访问限制;apt 软件源不受影响)。上面的命令会依次尝试清华、阿里云、南京大学、华为云,下载完自动校验 SHA256,看到 OK 才算成功。3.2创建虚拟机
点右上角的 创建虚拟机,按标签页逐个填写:
| 标签页 | 填什么 |
|---|---|
| 常规 | VM ID:200;名称:agent-01 |
| 操作系统 | ISO 镜像:选刚下载的 Ubuntu;类型保持 Linux |
| 系统 | 保持默认,勾选 QEMU Agent |
| 磁盘 | 存储:local-lvm(如果加了 4T 数据盘就选 data4t);大小:128 GiB;勾选 Discard 和 SSD 仿真。按实际用量占空间,NocoBase 源码、node_modules 加 Docker 镜像,64G 很快就不够 |
| CPU | 核心:4;类别:host(很重要,性能会好很多) |
| 内存 | 16384 MiB(agent-01 负责全量构建和完整测试;以后克隆的日常 agent 用 8192 即可) |
| 网络 | 桥接:vmbr0;模型:VirtIO |
| 确认 | 勾选 创建后启动,点 完成 |
3.3安装 Ubuntu Server
选中 200 (agent-01) → 控制台,按安装程序的提示一步步操作。键盘用方向键和回车:
- Language:选 English(服务器版安装界面的中文显示容易出问题)
- Keyboard:English (US)
- Type:Ubuntu Server
- Network:保持默认的 DHCP 自动获取,记下屏幕上显示的 IP
- Proxy:填
http://192.168.50.101:7890(proxy 容器)。安装程序会把它写进新系统的 apt 配置,以后sudo apt也自动走代理 - Mirror:agent 虚拟机不用国内镜像,改成官方源
http://archive.ubuntu.com/ubuntu(安装程序可能按地区自动填成cn.archive.ubuntu.com,要改掉)。等出现This mirror location passed tests再继续 - Storage:选“Use an entire disk”,然后取消勾选“Set up this disk as an LVM group”。不取消的话,Ubuntu 默认只会用一半的磁盘空间
- Profile:
- Your name:随便填
- Server name:
agent-01 - Username:比如
dev - 设置密码
- Ubuntu Pro:选 Skip
- SSH:✅ 勾选 Install OpenSSH server
- Featured snaps:全部不选,直接 Done
- 等待安装完成,选 Reboot Now。如果提示移除安装介质,直接按回车
装完后再到 PVE 里:200 → 硬件 → CD/DVD 驱动器 → 编辑 → 选“不使用任何介质”。
3.4第一次登录和基础设置
在笔记本终端里 SSH 登录(IP 用安装时记下的那个):
ssh dev@192.168.50.xxx
登录后执行:
# 安装 QEMU Agent,装好后 PVE 网页上就能直接看到这台虚拟机的 IP sudo apt update && sudo apt install -y qemu-guest-agent sudo systemctl start qemu-guest-agent # 设成北京时间 sudo timedatectl set-timezone America/New_York # agent 虚拟机用纽约时区(和美国出口 IP 一致) # 更新系统 sudo apt full-upgrade -y
第四部分:让虚拟机走代理
4.1设置全局代理环境变量
sudo tee -a /etc/environment <<'EOF' http_proxy=http://192.168.50.101:7890 https_proxy=http://192.168.50.101:7890 HTTP_PROXY=http://192.168.50.101:7890 HTTPS_PROXY=http://192.168.50.101:7890 no_proxy=localhost,127.0.0.1,192.168.0.0/16,.lan NO_PROXY=localhost,127.0.0.1,192.168.0.0/16,.lan EOF
退出 SSH 再重新登录,设置才会生效。
10.x.x.x,要把 10.0.0.0/8 也加进 no_proxy 和 NO_PROXY,否则访问内网也会绕到代理。4.1+完整的全局代理(推荐,实际用的是这个)
4.1 只覆盖登录后的命令行程序。下面这个脚本让所有程序都走代理:登录会话、sudo、apt、systemd 后台服务(Docker、T3 Code 服务端等)、SSH 方式的 GitHub、snap,并顺便把时区设为纽约。可以重复执行,不会产生重复配置:
P=http://192.168.50.101:7890 NP=localhost,127.0.0.1,::1,192.168.0.0/16,10.0.0.0/8,.lan # 0. 时区:纽约(自动处理夏令时 EDT / 冬令时 EST) sudo timedatectl set-timezone America/New_York # 1. 登录会话:curl、git、npm、pnpm、Claude Code 等(先删掉旧的代理行,避免重复) sudo sed -i '/_proxy=/Id;/^NODE_USE_ENV_PROXY=/d' /etc/environment sudo tee -a /etc/environment >/dev/null <<EOT http_proxy=$P https_proxy=$P all_proxy=$P HTTP_PROXY=$P HTTPS_PROXY=$P ALL_PROXY=$P no_proxy=$NP NO_PROXY=$NP NODE_USE_ENV_PROXY=1 EOT # 2. apt sudo tee /etc/apt/apt.conf.d/95proxy >/dev/null <<EOT Acquire::http::Proxy "$P"; Acquire::https::Proxy "$P"; EOT # 3. sudo 执行的命令也保留代理变量 echo 'Defaults env_keep += "http_proxy https_proxy all_proxy no_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY NO_PROXY NODE_USE_ENV_PROXY"' \ | sudo tee /etc/sudoers.d/proxy >/dev/null sudo chmod 440 /etc/sudoers.d/proxy sudo visudo -c # 4. 所有后台服务(systemd 系统服务,比如 Docker)和用户服务(比如 T3 Code) for d in system user; do sudo mkdir -p /etc/systemd/$d.conf.d sudo tee /etc/systemd/$d.conf.d/proxy.conf >/dev/null <<EOT [Manager] DefaultEnvironment="http_proxy=$P" "https_proxy=$P" "HTTP_PROXY=$P" "HTTPS_PROXY=$P" "no_proxy=$NP" "NO_PROXY=$NP" "NODE_USE_ENV_PROXY=1" EOT done sudo systemctl daemon-reexec # 5. 用 SSH 方式访问 GitHub(git@github.com:...) sudo apt-get install -y netcat-openbsd >/dev/null mkdir -p ~/.ssh grep -q 'ProxyCommand nc' ~/.ssh/config 2>/dev/null || cat >> ~/.ssh/config <<EOT Host github.com ProxyCommand nc -X connect -x 192.168.50.101:7890 %h %p EOT # 6. snap 商店 sudo snap set system proxy.http="$P" proxy.https="$P" echo "完成。请退出 SSH 再重新登录,让设置生效。"
date 看时区(显示 EDT 或 EST),sudo curl -s https://ipinfo.io/ip 看 sudo 下也走代理,systemctl show-environment 看后台服务的代理变量。Docker 容器内部运行时的代理是另一回事,装 Docker 时再配。4.2检查是否生效
echo $https_proxy # 应该显示 http://192.168.50.101:7890 curl -s -o /dev/null -w "%{http_code}\n" https://www.google.com # 输出 200 curl -s -o /dev/null -w "%{http_code}\n" https://api.anthropic.com # 有状态码输出(比如 404)就说明能连上 curl -s https://ipinfo.io # 显示的应该是代理节点所在的地区
4.3需要单独配置的几种情况
① 用 SSH 方式操作 GitHub(地址是 git@github.com:... 这种)
https:// 开头的 Git 地址会自动走代理,SSH 方式不会。需要额外配置:
sudo apt install -y netcat-openbsd mkdir -p ~/.ssh && cat >> ~/.ssh/config <<'EOF' Host github.com ProxyCommand nc -X connect -x 192.168.50.101:7890 %h %p EOF
② Docker(装了 Docker 才需要配置)
Docker 拉镜像不读上面那些环境变量,要单独设置:
sudo mkdir -p /etc/systemd/system/docker.service.d sudo tee /etc/systemd/system/docker.service.d/proxy.conf <<'EOF' [Service] Environment="HTTP_PROXY=http://192.168.50.101:7890" Environment="HTTPS_PROXY=http://192.168.50.101:7890" Environment="NO_PROXY=localhost,127.0.0.1,192.168.0.0/16" EOF sudo systemctl daemon-reload && sudo systemctl restart docker
③ 自己写的 Node 程序
Node 自带的 fetch 默认不读代理变量。用 Node 24 以上版本时,加一个环境变量就能让它走代理:NODE_USE_ENV_PROXY=1。
4.4拍一个快照
到这里,一个干净可用的 agent 环境就配好了。在 PVE 里:200 → 快照 → 拍摄快照,名称填 base。以后 agent 把环境搞坏了,回滚到这个快照就行。
完成后的样子
PVE(192.168.50.205) ├── 101 proxy 192.168.50.101 mihomo 正在运行 ✅ 网页面板:http://192.168.50.101:9090/ui └── 200 agent-01 DHCP 分配的 IP 全局代理已设置 ✅ 快照 base ✅