软路由相关
PVE 一键部署 mihomo 旁路由:pve-mihomo-oneclick.sh 详细教程
PVE 一键部署 mihomo 旁路由:pve-mihomo-oneclick.sh 详细教程
> 上一篇《PVE 部署 mihomo 旁路由(透明代理)详细教程》是手动一步步来,这篇是它的"一条命令版":在 PVE 宿主机上跑一个脚本,自动完成建 LXC、放行 TUN、装 mihomo + 面板,最后打印面板地址。
> 适用版本:PVE 7 / 8 / 9(本文在 PVE 9.2.10 实测通过),容器用 Debian 12 模板。
> ⚠️ 地址说明:下文
http://10.10.10.2/... 是作者内网存放配套文件的服务器地址。你自己的环境要把配套文件放到自己能访问的位置,并把所有 10.10.10.2 替换掉。一、脚本是干什么的
pve-mihomo-oneclick.sh 在 PVE 宿主机上一条命令跑完整个旁路由部署:不需要会 PHP、不需要编译、不需要手写 Clash 规则。
> 📥 直接下载:pve-mihomo-oneclick.sh
二、准备工作
- 一台 PVE(7 / 8 / 9 均可),能 SSH 或网页控制台进入 root shell;
- 一个 Clash 格式的节点订阅链接(脚本默认用
http://10.10.10.2/yaml/sub-clash.yaml,可在环境变量里改); - 主路由 DHCP 正常(爱快 / OpenWrt / 任意路由器)。
配套文件清单(都放在
http://10.10.10.2/yaml/,可换成你自己的地址):| 文件 | 用途 |
|---|---|
| pve-mihomo-oneclick.sh | PVE 宿主机一键部署脚本(本文主角) |
| pgw-install.sh | 容器内一键安装脚本(mihomo + 面板 + 配置 + 开机自启) |
| pgw-mihomo.yaml | 基础版配置(脚本内置,一般不用手动下) |
| pgw-mihomo-split.yaml | 分流版配置(可选,见第十节) |
| pgw-deploy.zip | 以上文件打包 |
三、下载脚本并自检(先别急着部署)
在 PVE 宿主机(root)执行:
wget -qO /tmp/pve-mihomo-oneclick.sh http://10.10.10.2/blog/uploads/yaml/pve-mihomo-oneclick.sh
bash /tmp/pve-mihomo-oneclick.sh --check
--check 只做只读检查,不会创建任何东西。输出类似:[+] 探测模板…
[+] 模板: debian-12-standard_12.12-1_amd64.tar.zst
[+] 探测存储…
[+] 存储: local
[+] 探测网桥…
[+] 网桥: vmbr0
[+] 检查容器 ID…
[+] VMID 200 空闲
[+] 环境检查通过,未做任何修改。
如果某一步报错(模板没有、找不到存储、网桥不对、VMID 被占用),按第十一节排查。
四、正式部署(DHCP 自动拿 IP)
bash /tmp/pve-mihomo-oneclick.sh 200 pgw-2026 pgw vmbr0
四个参数依次是:
| 参数 | 含义 | 示例 |
|---|---|---|
| 第 1 个 | 容器 ID(VMID) | 200 |
| 第 2 个 | 面板密码(建议纯字母数字) | pgw-2026 |
| 第 3 个 | 容器主机名 | pgw |
| 第 4 个 | 网桥名 | vmbr0 |
部署过程会实时打印每一步,最后输出:
================= 部署完成 =================
容器 ID : 200(hostname: pgw)
旁路由 IP : 10.10.10.102
节点面板 : http://10.10.10.102:9090/ui 密码: pgw-2026
客户端设置 : 网关 = 10.10.10.102 , DNS = 10.10.10.102
===========================================
五、正式部署(固定 IP)
想给旁路由一个固定 IP(推荐,省得以后去主路由绑 DHCP),在第 4 个参数后面再加一个 IP:
bash /tmp/pve-mihomo-oneclick.sh 200 pgw-2026 pgw vmbr0 10.10.10.200
固定 IP 时:
PGW_GW=10.10.10.10 bash /tmp/pve-mihomo-oneclick.sh ...。六、环境变量(可选)
| 变量 | 作用 | 默认值 |
|---|---|---|
PGW_INSTALL_URL | 容器内安装脚本地址 | http://10.10.10.2/blog/uploads/yaml/pgw-install.sh |
PGW_TEMPLATE | 指定模板名,跳过自动选择 | 自动选 Debian 12/11 |
PGW_STORE | 指定存储 | 自动选 |
PGW_ROOTFS | 磁盘大小(GB) | 4 |
PGW_GW | 固定 IP 时的网关 | PVE 默认网关 |
示例:
PGW_ROOTFS=8 PGW_TEMPLATE=debian-12-standard_12.12-1_amd64.tar.zst \
bash /tmp/pve-mihomo-oneclick.sh 201 mypass pgw2 vmbr0 10.10.10.201
七、脚本后台做了什么(原理)
pveam update + 自动挑 Debian 12/11 模板;本地没有就下载。pct create,特权模式(--unprivileged 0),net0 桥接到你指定的网桥,DHCP 或固定 IP。/etc/pve/lxc/<ID>.conf 追加两行,放行 c 10:200 并把宿主机的 /dev/net/tun 挂进容器;同时确保宿主机 tun 模块开机自动加载。/etc/resolv.conf 写入网关 + 223.5.5.5,保证能解析 apt 和 GitHub。pgw-install.sh 并执行,它自动完成 7 步——装依赖、下载最新 mihomo 内核(GitHub 失败自动换 gh-proxy)、装 metacubexd 面板、下载 geoip/geosite、写配置、开 IP 转发、装 systemd 服务开机自启。mihomo.service 变 active 才结束。八、装好后验证
面板能开不代表代理链路一定通,建议按顺序确认:
# 1. 服务状态(应输出 active)
pct exec 200 -- systemctl is-active mihomo
# 2. 内核版本
pct exec 200 -- /usr/local/bin/mihomo -v
# 3. API 是否带密钥响应(把 pgw-2026 换成你的密码)
pct exec 200 -- bash -c "curl -s -H 'Authorization: Bearer pgw-2026' http://127.0.0.1:9090/version"
# 4. 代理出口测试(返回 204 说明节点链路通)
pct exec 200 -- curl -s -o /dev/null -w "%{http_code}\n" -x http://127.0.0.1:7890 https://www.gstatic.com/generate_204
浏览器打开
http://旁路由IP:9090/ui,密钥填部署时设的密码。连上后能看到订阅里的全部节点和两个策略组(🚀 节点选择 / ♻️ 自动选择)。九、把设备指到旁路由
以爱快为例:网络设置 → DHCP 服务端 → 静态分配,把需要走代理的设备的网关和 DNS 单独填成旁路由 IP;其他设备不动,继续直连。
验证方法:在指定设备上访问 ipinfo.io,出口 IP 应是你选的节点所在地区;访问百度应直连。
十、按应用分流(可选)
基础版只有一个总开关。想按应用分流(TikTok / AI 固定新加坡等),换成分流版配置:
# 容器内执行
cp /etc/mihomo/config.yaml /etc/mihomo/config.yaml.bak
wget -qO /etc/mihomo/config.yaml http://10.10.10.2/blog/uploads/yaml/pgw-mihomo-split.yaml
sed -i 's/CHANGEME/pgw-2026/' /etc/mihomo/config.yaml
/usr/local/bin/mihomo -t -d /etc/mihomo -f /etc/mihomo/config.yaml
systemctl restart mihomo
十一、常见问题
| 现象 | 原因与处理 |
|---|---|
--check 提示找不到模板 | 先执行 pveam update,或 PGW_TEMPLATE=模板名 bash ... --check |
storage 'local-lvm' does not exist | 你的存储不叫这个名字,脚本已自动探测,确认 pvesm status -content rootdir 有输出 |
| 网桥相关报错 | 用 ip a 看实际网桥名,把第 4 个参数换成它 |
| VMID 已被占用 | 换一个空闲 ID,例如从 201 开始试 |
| 固定 IP 提示无法探测网关 | 用 PGW_GW=主路由IP 指定 |
| 容器 120 秒没拿到 IP | 检查主路由 DHCP、网桥是否选对 |
| mihomo 报 TUN 错误 | 确认 /etc/pve/lxc/<ID>.conf 里有那两行 TUN 配置,并已重启容器 |
| 面板提示后端无法连接 / unauthorized | 后端地址填 http://旁路由IP:9090,密钥和部署时一致 |
| 面板里没有节点 | 容器内测订阅:curl -I http://10.10.10.2/yaml/sub-clash.yaml |
| 设备提示无 Internet | TUN 已启用即可;msftconnecttest 等直连规则基础配置已内置 |
十二、回滚 / 卸载
pct exec 200 -- systemctl disable --now mihomo;pct stop 200 && pct destroy 200(连同容器磁盘一起删,建议先备份配置)。十三、下载
> 和上一篇手动教程配合看:这篇讲"怎么一键装好",那篇讲"每一步为什么这么做"。
评论(0)