跳到主要内容

frp实现内网tcp端口转发以访问pve的web服务

最后更新于:

frp实现内网tcp端口转发以访问pve的web服务

问题

1192.168.1.10是我pve机器的ip
2
3192.168.1.11是pve里一台虚机(frp)地址
4
5我能通过通过公网访问frp的地址来访问到 https://192.168.1.10:8006/ (pve web界面)这个服务吗?

结论放在前面:可以,只要你的 frp 服务器配置正确,就能通过公网访问到 PVE 的 Web 界面。

因为你现在的网络结构很清晰: 公网 IP -> 家里公网IP -> FRP 虚拟机(192.168.1.11) -> PVE 宿主机(192.168.1.10:8006)

这是一个标准的内网穿透场景,完全可行。我帮你梳理一下配置要点,保证一次成功。


1. 你的网络连接逻辑

你需要让 FRP 充当“转发员”:

  • 访问入口:公网IP 的某个端口(例如 4438006
  • 转发目标:FRP 虚拟机 -> PVE 宿主机的 192.168.1.10:8006

2. 关键配置检查

第一步:检查 FRP 服务端(公网服务器)

确保你的公服务器上的 frps.ini 配置正确,开启了 TCP 端口监听。

1[common]
2bind_port = 7000
3# 如果你需要用 HTTPS 域名访问,建议加一个 dashboard
4dashboard_port = 7500
5token = 你的授权密码

第二步:检查 FRP 客户端(PVE 里的虚拟机 192.168.1.11)

这是最关键的一步。你需要在 192.168.1.11 这台机器上运行 frpc,并配置代理规则指向 PVE 宿主机。

推荐使用 docker-compose 启动,创建 docker-compose.yml

1version: '3'
2services:
3  frpc:
4    image: snowdreamtech/frpc
5    restart: always
6    network_mode: host # 必须用host模式,才能访问192.168.1.0/24网段
7    volumes:
8      - ./frpc.ini:/etc/frp/frpc.ini

然后创建同目录的 frpc.ini

 1[common]
 2server_addr = 你的公网IP地址
 3server_port = 7000
 4token = 你的授权密码 # 必须和服务端一致
 5
 6# [proxmox-web] 是代理名称,可以自定义
 7[proxmox-web]
 8type = tcp
 9# 这里指向 PVE 宿主机的 IP 和端口
10local_ip = 192.168.1.10
11local_port = 8006
12# 公网服务器上开放的端口,建议用 8007 或 443 避免冲突
13remote_port = 8007

3. 访问方式与安全提醒

  1. 访问地址: 启动容器后,你就可以通过浏览器访问: https://你的公网IP:8007 (注意:因为 PVE 强制 HTTPS,公网端口也必须是 HTTPS 端口,否则会报错)

  2. 安全加固(非常重要)

    • 不要直接用 8006 端口:公网暴露 8006 是 PVE 默认管理端口,容易被暴力扫描。建议用 remote_port = 8007 或其他不常见端口。
    • 开启防火墙:在 PVE 宿主机的防火墙里,只允许 192.168.1.11 这台机器访问 8006 端口,拒绝其他内网IP直接访问。
    • 使用 strongSwan 或 WireGuard(进阶):如果对安全要求极高,建议搭建 VPN 服务,仅允许 VPN 接入后管理 PVE,比 FRP 更安全。

4. 排错指南

  • 连不上:检查公网服务器安全组/防火墙,是否放行了 remote_port (如 8007)。
  • 能通但打不开:浏览器地址栏必须输入 https://...,不能写 http。
  • 网络卡顿:检查 FRP 虚拟机的 CPU 和内存占用,建议给 FRP 虚拟机多分 1-2 核 CPU 和 1G 内存。

按照这个配置,你就能顺利通过公网访问到家里的 PVE 界面了。需要我帮你检查一下具体的配置文件内容吗?

最新文章

文档导航