Pritunl 是一款极简的企业级开源 OpenVPN 图形化管理软件。它不仅免去了手写 OpenVPN 配置的痛苦,还原生支持用户管理、组织架构划分以及可视化的路由管理(分割隧道)。
网上的老教程大多基于 CentOS 7 和单机版 MongoDB。在真实的企业生产环境中,通常会将前端 VPN 网关与后端数据库解耦,并接入已有的 MongoDB 副本集。本笔记记录了在 Ubuntu 20.04 系统下,部署 Pritunl 并连接外部 MongoDB 集群的全过程。
1. 配置 Pritunl 官方 APT 源并处理 GPG 密钥
在 Ubuntu 20.04 下,首先需要添加 Pritunl 的官方源。
# 写入 apt 源
sudo tee /etc/apt/sources.list.d/pritunl.list << EOF
deb https://repo.pritunl.com/stable/apt focal main
EOF
⚠️ 踩坑提示:
官方文档给的 GPG 导入命令直接去外网的 keyserver.ubuntu.com 获取,在国内网络环境下极容易超时失败。如果你遇到 timeout,可以使用以下备用方案手动下载并导入密钥:
# 从公钥服务器通过 hkp 协议导入 Pritunl 密钥
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com --recv 7568D9BB55FF9E5287D586017AE645C0CF8E292A
2. 安装 Pritunl 服务
更新缓存并安装 Pritunl(因为我们使用外部统一的 MongoDB 集群,所以不需要在本机安装 mongodb-server)。
sudo apt update
sudo apt install pritunl -y
# 启动并设置开机自启
sudo systemctl start pritunl
sudo systemctl enable pritunl
3. 核心步骤:对接外部 MongoDB 副本集
企业环境中,为了数据高可用,通常会有专门的 DB 集群。千万别去浏览器那个初始 Setup 页面里直接填 MongoDB 副本集连接串(带逗号和问号的 URL),极容易触发 Web 解析报错(提示 Unknown server error occurred)。
最稳妥的方式是直接把配置写进 /etc/pritunl.conf。
首先,在 MongoDB 主库里建好专属的权限账号:
use pritunl
db.createUser({
user: "pritunl_user",
pwd: "你的高强度密码",
roles: [ { role: "dbOwner", db: "pritunl" } ]
})
接着,在跑 Pritunl 的机器上直接覆盖配置文件:
sudo cat > /etc/pritunl.conf << 'EOF'
{
"mongodb_uri": "mongodb://pritunl_user:你的高强度密码@10.20.30.73:27017,10.20.30.74:27017,10.20.30.75:27017/pritunl?replicaSet=你的副本集名称&authSource=pritunl",
"server_key_path": "/var/lib/pritunl/pritunl.key",
"server_cert_path": "/var/lib/pritunl/pritunl.crt",
"log_path": "/var/log/pritunl.log",
"temp_path": "/tmp/pritunl_%r",
"bind_addr": "0.0.0.0",
"debug": false,
"www_path": "/usr/share/pritunl/www",
"local_address_interface": "auto",
"port": 443
}
EOF
写入后,重启服务让底层直接加载正确的数据库配置:
sudo systemctl restart pritunl
4. 获取初始密钥与登录密码
获取进入 Web 界面所需的 Setup Key:
sudo pritunl setup-key
获取系统自动生成的管理员默认密码:
sudo pritunl default-password
浏览器访问 https://<你的服务器IP>,填入上面的 Setup Key 即可秒过初始化。随后输入账号 pritunl 和获取到的默认密码进行登录,并立刻修改密码。
5. 网络架构核心配置:添加路由(Split Tunneling)
在 Web 后台创建好 Organization(部门)、User(员工)和 Server(VPN 节点网关)后,最核心的一步是配置网关路由(Routes)。
- 不推荐: 默认自带
0.0.0.0/0路由。这叫“全局代理/Full Tunnel”,员工上网看视频的流量全走公司网络,会瞬间跑崩公司出口带宽。 - 企业最佳实践(分割隧道/Split Tunnel): 删除
0.0.0.0/0,点击Add Route精准添加内网网段(如10.20.30.0/24),确保勾选 NAT。 这样员工访问内网服务走 VPN,访问外网(百度、B站)依然走自己家宽带,既保证内网安全,又极大节省了公司出口带宽。
6. 进阶场景:内网部署无公网 IP 时的 FRP 穿透
如果你的 Pritunl 部署在纯内网虚拟机(如 10.20.30.x),需要用 FRP 映射出去给外部员工使用。
FRP 客户端 (frpc) 配置参考:
[common]
server_addr = <云服务器公网IP>
server_port = 7000
token = your_token
# 管理面板穿透
[pritunl_web]
type = tcp
local_ip = 127.0.0.1
local_port = 443
remote_port = 8443
# VPN 核心隧道穿透
[pritunl_vpn]
type = udp
local_ip = 127.0.0.1
local_port = 1194
remote_port = 1194
⚠️ 致命踩坑点:
穿透后,切记登录 Pritunl Web 面板,点击你创建的 Server 名字,在设置里找到 Public Address(公网地址),填入你的 <云服务器公网IP> 并保存重启 Server。
如果不填,Pritunl 给员工下发的 .ovpn 文件里就会包含 10.20.30.x 的内网 IP,员工在外网永远拨不通!
完成上述所有配置后,在 Users 页面点击下载按钮拿到 .ovpn 或 .tar 文件,发给员工,使用任意标准的 OpenVPN 客户端导入即可瞬间连接。