April 6, 2019

pritunl 指北

pritunl 是一个带有web后台的Openvpn 服务端,需要有mongodb支持。官方文档在此,虽然文档已经很详细,不过关于安装细节配置不是很直观,实际安装过程,或许会遇到各种麻烦,如果你需要基于Caddy反代pritunl,需要使用MongoDB Cloud上的 MongoDB Atlas,这篇教程应该比较合适。

pritunl 是一个带有web后台的Openvpn 服务端,需要有mongodb支持。官方文档在此,虽然文档已经很详细,不过关于安装细节配置不是很直观,实际安装过程,或许会遇到各种麻烦,如果你需要基于Caddy反代pritunl,需要使用MongoDB Cloud上的 MongoDB Atlas,这篇教程应该比较合适。

0x00 安装

简单再Copy一下官网的安装过程。我的VPS是ubuntu 18 Bionic。

安装命令如下(去掉了mongodb 的安装命令, 因为之后我们会使用外部的Mongodb:

sudo tee /etc/apt/sources.list.d/pritunl.list << EOF
deb http://repo.pritunl.com/stable/apt bionic main
EOF

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com --recv 7568D9BB55FF9E5287D586017AE645C0CF8E292A
sudo apt-get update
sudo apt-get --assume-yes install pritunl
sudo systemctl start pritunl
sudo systemctl enable pritunl 

这时候,pritunl 会默认在你的443端口启用,我们先不管它,去看看数据库部分。

0x01 安装依赖

如果没有这一步,使用后面的mongodb链接地址可能会报错:

packages/pymongo/uri_parser.py", line 351, in parse_uri raise ConfigurationError('The "dnspython" module must be ' ConfigurationError: The "dnspython" module must be installed to use mongodb+srv:// URIs Traceback (most recent call last):

这时候安装dnspython 到pritunl的本地python库就好了:

 pip install --target=/usr/lib/pritunl/local/lib/python2.7/ dnspython

0x02 MongoDB 配置

MongoDB 提供了免费500M的云端数据库,可以选择部署在AWS或者Google Cloud上。
注册页面

注册完成,建好项目,需要做两件事情:
1.添加用户
cc0

2.设置IP白名单
cc1

IP的白名单就是你的VPS地址,算是最低限度的安全保障了。

3.拿到数据库链接
cc2

// 替换掉<password> 为你的密码
// 替换掉/test? 部分为你的数据名称(随便写啥
mongodb+srv://o0o:<password>@xxxxx.gcp.mongodb.net/test?retryWrites=true

0x03 配置pritunl 和Caddy

我是使用Caddy作为web服务器,不需要任何繁琐配置,它会默认给你启用HTTPS,而反代的配置也特别简单:

xxxx.com {
   proxy / 127.0.0.1:446/ {
       transparent
   }
}

pritunl 有两种配置方法,一种是编辑配置文件 sudo vi /etc/pritunl.conf

{
    "mongodb_uri": "mongodb+srv://xxxxx", <-上面的数据库地址
    "log_path": "/var/log/pritunl.log",
    "static_cache": true,
    "temp_path": "/tmp/pritunl_%r",
    "bind_addr": "127.0.0.1",
    "www_path": "/usr/share/pritunl/www",
    "server_ssl": false,
    "local_address_interface": "auto",
    "port": 446
}

另外一种是直接在命令行输入:

 // 配置数据库地址
 pritunl set-mongodb mongodb+srv://user:[email protected]/dbname?retryWrites=true
 // 配置服务器端口
 pritunl set app.server_port 446
 // 配置服务器端口 也可能是这样写?
 pritunl set app.port 446
 // 关闭自带的ssl
 pritunl set app.server_ssl false
 // 允许反代
 pritunl set app.reverse_proxy true
 // 绑定地址
 pritunl set app.bind_addr 127.0.0.1

0x04 访问web页面

如果顺利,第一次访问应该会看到要求在后台生成密码的的提示。
之后的步骤,移步官方文档即可

其他采坑

最初我是把mongodb放在本地来着,不过小vps还跑着mysql,ghost,commento等一些东西。看上去很奢侈的1G内存瞬间就瓜分得差不多了。后来,mysql挂了然后pritunl因为内存原因跑不起来,我才意识到要好好节约。

学习到的一些命令:

1.查看可用内存

free -m

cc3-1

2.查看最内存高占用的进程
top 然后按下shift+m
cc4

3.切换screen
我发现系统在其他终端驻留的进程,占用了很大的内存。从名字上看是关于系统升级,不敢随便终止。于是使用screen命令切换到对应终端,去具体环境下解决了它。其间用到了如下命令:

查看全部screen

screen -ls

切换到 pid 11111 的screen

screen -r 11111

退出screen

exit