outline是另一个爬墙的方案,主要采用docker的形式运行shadowsocks提供服务,是jigsaw团队折腾出来一个比较友好方案。outline由客户端,服务端管理和shadowbox(加强版的ss)组成,其中客户端支持win/linux/mac/android/iOS平台。截止目前客户端发版617次, 基本满足日常划水了。
outline优点
- 支持全平台
- docker化部署
- 兼容shadowsocks客户端
- 支持API
- 支持监控
- TypeScript实现
0x1 部署
首先你要有一台服务器来部署服务,outline manager服务端软件提供四种方案;其中前三种是DigitalOcean、Google Cloud和AWS三家云厂商。貌似DigitalOcean可以低至5刀每月,最后一种是自建方案,推荐有vps的用户使用。
服务端配置:
下载安装脚本
1
wget https://raw.githubusercontent.com/Jigsaw-Code/outline-server/master/src/server_manager/install_scripts/install_server.sh
配置脚本
1
2
3
4
5
6
7
8
9#查看参数
sh install_server.sh -h
输出:
Usage: install_server.sh [--hostname <hostname>] [--api-port <port>] [--keys-port <port>]
--hostname 访问域名
--api-port API管理端口
--keys-port shadowsocks服务端口(兼容ss客户端)执行安装
1
2
3
4
5
6# 环境需要提前安装docker
sh install_server.sh --hostname 域名 --api-port 80 --keys-port 443
# docker镜像安装
quay.io/outline/shadowbox => 封装的shadowsocks镜像
docker.io/v2tec/watchtower=> docker容器监控镜像配置
脚本安装完成后,终端中会输出如下信息。注意apiUlr的json数据, 服务端管理客户端需要这个。1
2
3
4
5
6
7
8......
To manage your Outline server, please copy the following line (including curly
brackets) into Step 2 of the Outline Manager interface:
{"apiUrl":"https://www.demo.com:33104/pHFagvPGtiprJ4gAVRcSVQ","certSha256":"E71C445A78CF6D37D3959AE190D1E350425D5FB956232228FDEBEDD8CE689CC4"}
......服务端客户端配置
粘贴上述apiUlr json字符到客户端中即可添加1
* 分享链接中KEY需要解码,复制出`ss://`字符, 使用"ss协议工具"解密
outline server配置文件(docker容器)
1
2
3
4
5
6
7
8
9
10应用目录:
/root/shadowbox
/root/shadowbox/bin/outline-ss-server
/root/shadowbox/bin/prometheus
配置目录:
/opt/outline
/opt/outline/persisted-state/shadowbox_config.json
/opt/outline/persisted-state/shadowbox_server_config.json
/opt/outline/persisted-state/outline-ss-server/config.yml
0x2 项目分析
outline这个项目前身是uProxy, outline项目主要分为outline-client、outline-server和outline-ss-server三个工程。outline-client采用electron和typescript开发客户端,移动端配置相对简单,github上有iOS客户端ipa文件。outline-ss-server工程使用golang重新实现shadowsocks功能,相对go-shadowsocks2多了端口复用和监控上报功能,更多详情参考官方说明。
outline核心是outline-server工程, 包装outline-ss-server作为一个核心代理服务。
项目模块:
shadowbox
1
shadowbox提供outline-ss-server服务docker镜像构建、配置加载和API服务实现
server_manager
1
outline服务端管理软件,和outline-client类型都是采用electron实现GUI界面,调用API接口操作
sentry_webhook
1
日志服务上报,利用Google cloud function功能配合https://sentry.io/outlinevpn平台上报数据
metrics_server
1
元数据上报,利用Google cloud function功能实现数据上报。outline-server可以设置上报数据开关。具体参考shadowbox_server_config.json配置文件。如果Docker环境变量未设置SB_METRICS_URL值,系统默认上报地址是https://metrics-prod.uproxy.org, 无法通过outline-server修改上报地址。数据上报也是outline被诟病的地方。
outline的优势在于整体配置简单,有自成一体的客户端全家桶,使用方便。从本质上来说,都只是在shadowsocks上套了一层壳而已。