PVE 内网穿透实战:LXC 容器部署 frpc

PVE 内网穿透实战:LXC 容器部署 frpc

本文由大妖怪猫咪老师辅助撰写...放心,已经过人工严格复核了。

以前使用 DDNS 访问 PVE ,这次安装 PVE 后也想继续用,但是发现公网IP没了,正好尝试一下使用 frp。

为了不污染 PVE 宿主机环境,推荐在 PVE 中单独开辟一个轻量化的 LXC 容器来独立运行 frpc 客户端。LXC 容器拥有接近宿主机的性能,且内存占用极低。

本文将演示如何在 PVE 部署一个极简的 Debian 12 LXC 容器,并通过它将内网 PVE 服务的 8006 端口安全地转发至 VPS 指定的公网端口。

🛠️ 环境拓扑与结构

在开始动手之前,先明确整体的流量转发链路:

[ 远程浏览器 ] 
       │ 访问 https://VPS公网IP:18006
       ▼
 [ 公网 VPS ] ──────( 建立受保护的 TCP 隧道 )────── [ 家里 PVE (LXC 容器) ]
   运行 frps                                            运行 frpc 客户端
                                                               │ 内部本地转发
                                                               ▼
                                                     [ PVE 宿主机后台:8006 ]

一、创建轻量化 LXC 容器

进入 PVE Web 管理界面,点击右上角的 “创建 CT”(Create CT),按照以下配置创建一个极简容器:

配置项

推荐设定值

说明

无特权容器

勾选(Unprivileged container)

增强安全性,frpc 无需主系统宿主特权

主机名

frpc-service

便于在容器列表中识别

模板

debian-12-standard(或最新 Debian 模板)

资源占用极小,纯净且稳定

根磁盘

4 GB

frpc 体积很小,4G 绰绰有余

CPU

1 核

处理穿透流量,单核完全足够

内存

256 MB / 512 MB

运行内存视穿透并发量而定,静态运行仅占用几兆

网络

桥接网卡选择 vmbr0,IPv4 选择 DHCP 或手动静态 IP

建议为该容器指定静态内网 IP

创建完成后,勾选“创建后启动”。如果不习惯通过 Web 终端操作,可以在 PVE 宿主机 Shell 中查出该 LXC 容器的虚拟机 ID(例如 101),并直接飞入容器内部:

# 列出当前的 CT status
pct list

# 进入指定 ID 的容器终端
pct enter 101

二、配置基础工具及系统架构确认

进入 LXC 容器后,首先更新系统并安装常用的网络和文本编辑工具:

apt update && apt install -y wget tar curl nano

确认容器的系统架构,以保证下载对应版本的 frp 客户端二进制包:

uname -m

若终端返回 x86_64,其对应的程序版本为 linux_amd64

三、部署 frpc 客户端

  1. 进入临时目录并下载对应的 frp 包(以当前主流稳定的 v0.69.1 为例):

    cd /tmp
    wget https://github.com/fatedier/frp/releases/download/v0.69.1/frp_0.69.1_linux_amd64.tar.gz
  2. 解压提取包体

    tar -zxvf frp_0.69.1_linux_amd64.tar.gz
    cd frp_0.69.1_linux_amd64
  3. frpc 二进制主程序剪切至系统的用户执行路径下,并赋予执行权限

    cp frpc /usr/local/bin/
    chmod +x /usr/local/bin/frpc
  4. 验证安装状态

    frpc -v

    控制台输出正确的版本号(如 0.69.1),即代表主程序安装成功。

四、创建服务配置文件 (TOML)

现代版本的 frp 使用 toml 格式进行配置。需额外注意大小写与缩进格式。

  1. 创建 frpc 专属配置目录

    mkdir -p /etc/frp
  2. 新建并编辑配置文件

    nano /etc/frp/frpc.toml
  3. 写入下述配置信息(请按实际公网 VPS 情况替换关键参数):

    # 公网 VPS 处的服务连接指标
    serverAddr = "1.2.3.4"             # 你的 VPS 公网 IP
    serverPort = 7000                  # 对应 frps 面板/服务绑定的监听端口
    auth.token = "your_secure_token"   # 必须与 vps 端 frps.toml 中的 auth.token 保持一致
    
    # PVE 登录控制台的穿透规则
    [[proxies]]
    name = "pve-control-panel"
    type = "tcp"
    localIP = "192.168.1.100"          # PVE 宿主机本身的局域网 IP
    localPort = 8006                   # PVE 控制台默认 HTTPS 端口
    remotePort = 18006                 # 穿透到 VPS 暴露出的外部访问端口
  4. 保存变更: 在 nano 编辑器中按 Ctrl + O 保存,回车确定,再按 Ctrl + X 退出编辑器。

五、联机功能实机测试

配置完成后,我们先通过前台手动拉起 frpc 进程,查看与 VPS 端 frps 的通信是否顺畅:

frpc -c /etc/frp/frpc.toml

观察后台日志,若显示类似下文则代表连通成功:

[service.go:317] login to server success
[proxy.go:102] [pve-control-panel] start proxy success

此时,在室外网络环境下尝试通过浏览器访问: https://你的VPS公网IP:18006

PVE 后台服务默认强制走加密的 SSL 协议,因此在输入 VPS 穿透地址时,前面必须带上 https:// 而非普通的 http://,否则会引发握手连接错误

六、配置 Systemd 守护进程与开机自启

为了保证 LXC 容器每次随 PVE 宿主机开机,或者链路出现波动时 frpc 主动断线重连,需要将其写成标准的 Systemd 系统服务。

  1. 编写系统服务单元文件

    nano /etc/systemd/system/frpc.service
  2. 写入服务守候配置

    [Unit]
    Description=FRP Client Daemon
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    Type=simple
    ExecStart=/usr/local/bin/frpc -c /etc/frp/frpc.toml
    Restart=always
    RestartSec=5
    LimitNOFILE=1048576
    
    [Install]
    WantedBy=multi-user.target
  3. 重新加载系统服务管理器并启用自动拉起

    systemctl daemon-reload
    systemctl enable frpc
  4. 拉起服务并校验当前服务状态

    systemctl start frpc
    systemctl status frpc

控制台看到绿色高亮的 active (running),表明服务已经完美移交后台守护。

七、后置清理与维护

最后,将物理空间中的临时安装缓存彻底移除,保持 Debian 12 LXC 系统骨架干净利落:

rm -f /tmp/frp_0.69.1_linux_amd64.tar.gz
rm -rf /tmp/frp_0.69.1_linux_amd64

📂 最终关键资产清单:

  • 客户端主程序:/usr/local/bin/frpc

  • 配置文件:/etc/frp/frpc.toml

  • 启动服务定义/etc/systemd/system/frpc.service

通过在单独的 LXC 容器内运转内网穿透逻辑,即便容器出现异常重启或漏洞,也不会波及到核心的 PVE 主系统,保证了家庭自建实验室的高可用性。

Proxmox VE (PVE) 8.4 初始化配置 2026-07-04

评论区