写点什么

毅硕 HPC | Pritunl + ECS + Frp 搭建远程办公 VPN

作者:INSVAST
  • 2025-11-24
    广东
  • 本文字数:3552 字

    阅读完需:约 12 分钟

毅硕HPC | Pritunl + ECS + Frp 搭建远程办公VPN

一、引言

对于许多中小团队、开发者或实验室环境而言,购买昂贵的商业 VPN 网关并非首选。我们通常已经拥有性能强大的本地工作站或服务器,存放着核心代码、数据和测试环境。能否将这些本地资源安全、便捷地开放给远程团队成员访问呢? 


传统方案可能是在路由器上配置端口转发,但这需要公网 IP,并会将内网服务直接暴露在公网上,面临安全风险。而直接在云上搭建 VPN,虽然管理方便,但所有访问云下本地设备的流量都需要经过云服务器中转,会产生不必要的带宽费用和延迟。

 

本教程将介绍一种 “鱼与熊掌兼得” 的创新方案:核心 VPN 服务(Pritunl)部署在您本地的强大工作站上,通过轻量级的 FRP 内网穿透工具,借助阿里云 ECS 提供的稳定公网入口,安全地将其服务能力发布到互联网。 这样,远程员工只需连接到一个统一的云上地址,即可直接接入您办公室或实验室的本地网络,访问其中的设备,实现真正意义上的“远程局域网”体验。

1.  方案架构

本方案的核心思想是:“服务在身边,入口在云端”。它巧妙地将服务主体与访问入口分离,兼顾了成本、性能和安全性。


1)核心组件与角色:

  • 本地工作站:

    角色:整个 VPN 体系的核心。

    运行服务:

  • Pritunl Server:提供专业的 OpenVPN/WireGuard 接入服务,管理用户认证和 VPN IP 分配。

  • FRP Client:作为内网穿透的主动发起方。

  • 阿里云 ECS:

  • 角色:提供稳定、可靠的公网访问入口。

  • 运行服务:

  • FRP Server:接收 FRP Client 的连接,建立加密隧道,并将外部对特定端口的访问转发到本地 Pritunl 服务。

  • FRP(Fast Reverse Proxy):

    角色:连接云端与本地的“安全信使”。它避免了在本地网络进行复杂的端口转发,实现了“服务隐藏”。


2)整体数据流如下:

  • 准备阶段:本地工作站上的 FRP 客户端主动连接到云 ECS 上的 FRP 服务端,建立一条稳定的加密隧道。

  • 连接阶段:远程用户配置 Pritunl 客户端,连接至云 ECS 服务器的公网 IP 和 FRP 映射的端口(例如,your-ecs-ip:11940)。

  • 穿透阶段:ECS 上的 FRP 服务端收到 VPN 连接请求后,通过已建立好的隧道,将该请求无缝转发给本地工作站的 Pritunl 服务。

  • 接入阶段:远程用户通过 Pritunl 的身份验证后,成功接入本地工作站所在的物理网络,获取到一个该内网的 IP 地址(如 192.168.1.x)。

  • 访问阶段:此时,远程用户如同直接坐在办公室的局域网内一样,可以直接访问网络中的其他设备,如 NAS(192.168.1.10)、开发服务器(192.168.1.20)或打印机等。


3) 架构优势:

  • 成本极低:云 ECS 仅需最基础的配置(1 核 1G),仅作为流量入口,消耗资源极少。

  • 性能无损:访问本地设备时,数据在远程用户和本地网络间直接路由(通过 VPN 隧道),不经过 ECS 中转,避免了云服务带宽费用和延迟。

  • 安全性高:本地网络无需配置公网 IP 或端口转发,所有服务都被 FRP 隧道保护起来,外部无法直接扫描到 Pritunl 服务

2.  为何选择 Pritunl?

在本架构中,Pritunl 的价值不仅在于其自身强大,更在于它与 FRP 结合的可行性。一个命令行操作的 OpenVPN 服务器很难通过 FRP 稳定地暴露出去,而 Pritunl 解决了这个难题。



二、部署详解

1.  ECS 部署 Frps 服务

  • Github 克隆或下载 frp


  • 编辑配置文件:

# nano frp_0.65.0_linux_amd64/frps.toml
# 服务绑定的IP与端口bindAddr = "0.0.0.0"bindPort = 8888
# web dashboard配置webServer.addr = "0.0.0.0"webServer.port = 7500webServer.user = "admin"webServer.password = "admin@123"# token权限验证,需与客户端配置一致,随机的、足够长的字符串auth.method = "token"auth.token = "Q5-CzF2v-GkVXylfpTBqpjoJdB71wyYWSGV4yzyM7Gw"# 日志配置log.to = "/root/frp_0.65.0_linux_amd64/logs/frps.log"log.level = "info"log.maxDays = 3
复制代码
  • 编辑 service 文件,实现开机自启动:

# nano /etc/systemd/system/frps.service
[Unit]# 服务名称Description = frp serverAfter = network.target syslog.targetWants = network.target
[Service]Type = simple# 启动frps的命令 您的frps的安装路径ExecStart = /root/frp_0.65.0_linux_amd64/frps -c /root/frp_0.65.0_linux_amd64/frps.toml
[Install]WantedBy = multi-user.target
复制代码
  • 启动 frps service:

systemctl daemon-reloadsystemctl start frpssystemctl enable frps
复制代码

注意:ECS 防火墙需开放 8888 端口,安全组开放 8888 端口

2.  本地安装 MongoDB 和 Pritunl

# 添加 MongoDB 源sudo tee /etc/apt/sources.list.d/mongodb-org.list << EOFdeb [ signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverseEOF
# 添加 Pritunl 源sudo tee /etc/apt/sources.list.d/pritunl.list << EOFdeb [ signed-by=/usr/share/keyrings/pritunl.gpg ] https://repo.pritunl.com/stable/apt noble mainEOF
# 添加 OpenVPN 源sudo tee /etc/apt/sources.list.d/openvpn.list << EOFdeb [ signed-by=/usr/share/keyrings/openvpn-repo.gpg ] https://build.openvpn.net/debian/openvpn/stable noble mainEOF
# 安装并启动服务sudo apt --assume-yes install gnupgcurl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor --yescurl -fsSL https://swupdate.openvpn.net/repos/repo-public.gpg | sudo gpg -o /usr/share/keyrings/openvpn-repo.gpg --dearmor --yescurl -fsSL https://raw.githubusercontent.com/pritunl/pgp/master/pritunl_repo_pub.asc | sudo gpg -o /usr/share/keyrings/pritunl.gpg --dearmor --yessudo apt updatesudo apt --assume-yes install pritunl openvpn mongodb-org sudo systemctl start pritunl mongodsudo systemctl enable pritunl mongod
复制代码

3.  Web 登录并初始化

  • 访问 https://192.168.1.88/setup

  • 获取初始化密钥:

sudo pritunl setup-key# 填入setup key完成数据库初始化
复制代码
  • 获取默认用户名和密码登录:

sudo pritunl default-password# 根据username和password登录web,然后填入ECS的公网IP和新密码完成初始化
复制代码


  • 添加组织: Users->Add Organization

  • 添加用户 Users->Add User

4.  Server 配置

  • 添加 server Servers->Add Server ,其中 port 为你的 frpc 客户端转发的端口。

  • 添加 route Servers->Add Route,其中 network 为你内网设备的 IP 段

5.  本地 Frpc 配置

  • 编辑 frpc.toml 配置文件:

# nano frp_0.65.0_linux_amd64/frpc.toml
#配置公网服务器上frp服务的IP与端口serverAddr = "xxx.xxx.xxx.xxx"serverPort = 8888
#日志配置log.to = "/root/frp_0.65.0_linux_amd64/logs/frpc.log"log.level = "info"log.maxDays = 3#token权限验证,需与服务端配置一致auth.method = "token"auth.token = "Q5-CzF2v-GkVXylfpTBqpjoJdB71wyYWSGV4yzyM7Gw"#面板相关配置webServer.port = 7200webServer.user = "admin"webServer.password = "admin"

#代理配置[[proxies]]name = "gz_vpn_admin"                   #名称type = "tcp"                            #代理类型localIP = "127.0.0.1"                   #本地IPlocalPort = 13204                       #内网服务监听的端口remotePort = 13204                      #需要在公网服务器上监听的端口
复制代码

注意:ECS 防火墙开放 13204 端口,安全组开放 13204 端口

  • 启动 frpc 服务:

# cat /etc/systemd/system/frpc.service
[Unit]# 服务名称Description = frp clientAfter = network.target syslog.targetWants = network.target
[Service]Type = simple# 启动frpc的命令 您的frpc的安装路径ExecStart = /home/snpbio/frp_0.65.0_linux_amd64/frpc -c /home/snpbio/frp_0.65.0_linux_amd64/frpc.toml
[Install]WantedBy = multi-user.target
# frpc开机自启systemctl daemon-reloadsystemctl start frpcsystemctl enable frpc
复制代码

6.  远程测试

1)安装 OpenVPN 客户端

2)从本地的 Pritunl Web 下载用户的配置文件:

3)解压下载的 tar 文件,打开 OpenVPN 客户端导入.ovpn:

输入创建用户时设置的 PIN 登录

提示连接成功!



三、ENJOY

教程到这,我们已经成功地将本地的强大工作站,通过 FRP 这把“神奇的钥匙”,变成了一个拥有云上公网入口的专业级 VPN 网关。这个方案架构最大限度地利用了现有资源:本地工作站的算力和云服务器的网络可达性。

本方案的核心价值:

  • 资源最大化:无需购买专用 VPN 硬件,将已有的高性能本地工作站物尽其用。

  • 成本最优化:云服务器仅作为入口,配置要求低,有效控制云端开支。

  • 访问直接化:远程用户直接接入目标局域网,访问延迟低,体验流畅。

  • 管理现代化:通过 Pritunl 的 Web 界面,像管理云服务一样管理您部署在本地的 VPN。

用户头像

INSVAST

关注

还未添加个人签名 2023-07-04 加入

还未添加个人简介

评论

发布
暂无评论
毅硕HPC | Pritunl + ECS + Frp 搭建远程办公VPN_远程办公_INSVAST_InfoQ写作社区