UKeyboard / shadowsocks-libev

Docker shadowsocks-libev with polipo and cow support

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

基本描述

本项目在Shadowsocks的基础上同时封装了polipo服务和 cow 服务, 并使用kcptun加速。

Polipo将Shadowsocks提供的socks5协议代理转成http代理,满足不支持socks5协议的场合,如 shell环境中  

Cow提供一种无缓存的多代理解决方案,支持条件转发,cow将所有代理请求按条件转发到其他代理服务。Cow对外提供的也是http代理。

                                                                           
代理类型服务名称默认端口
socks5shadowsocks-libev无默认,需在SS_CONFIG中指定
httppolipo8123
httpcow7777

使用本项目的一般流程:

  1. 根据Dockerfile构建Docker镜像
  2. 用有效参数创建 Docker Container (这里要对外暴露 代理端口,如 7777, 8123,$SS_LOCAL_PORT)
  3. 在系统或Chrome等浏览器中指定使用代理 代理地址示例:
                                                                 
服务名称 代理类型 代理地址
cow 代理 http 全局代理:”http://127.0.0.1:7777
自动代理:”http://127.0.0.1:7777/pac“
polipo 代理 http 全局代理:”http://127.0.0.1:8123
polipo自身不支持自动代理
ss 代理 socks5 全局代理:”http://127.0.0.1:$SS_LOCAL_PORT
shadowsocks自身不支持自动代理
$SS_LOCAL_PORT为shadowsocks参数中指定的 "-l" 参数
注意: socks5协议的 ss 代理只有当 shadowsocks 参数中指定了 ”-b 0.0.0.0“ 才可用!

搭建代理服务

使用本项目搭建代理服务非常简单,故简单带过,本节主要讨论启动代理服务的注意事项。

构建Docker镜像:

由于本项目目前尚未上传到Docker服务仓储中备份,用户需要自行编译Docker镜像,步骤如下:

  1. 下载项目中的Dockerfile配置文件和enterpoint.sh脚本文件

wget -sSLO https://raw.githubusercontent.com/UKeyboard/shadowsocks-libev/master/Dockerfile
wget -sSLO https://raw.githubusercontent.com/UKeyboard/shadowsocks-libev/master/entrypoint.sh

或直接 clone 本项目:


git clone https://github.com/UKeyboard/shadowsocks-libev.git
cd shadowsocks-libev
  1. 编译Docker镜像

docker build -t $NAME:$TAG .

启动代理服务:

编译的Docker镜像中包含了Shadowsocks,polipo,cow服务和kcptun加速服务。 镜像使用 entrypoint.sh 脚本作为启动脚本,该脚本负责按参数启动各项服务,我们只要使用正确、合法的参数构建镜像的Container并启动它就可以轻松启动代理服务。

代理服务正确打开姿势


docker run --name=shadowsocks $NAME:$TAG -m $SS_MODULE -s $SS_COFIG -k $KCP_CONFIG -x -v

其中 -skmxv 为启动参数:

                                                                                                                                                                                                                       
参数名称参数描述可接受参数值
-m $SS_MODULE指定要启动的ss程序,目前仅支持ss-local和ss-server,默认值=ss-serverss-local|ss-server
指定ss-local启动ss客户端
指定ss-server启动ss服务端
-s $SS_COFIGshadowsocks-libev 参数字符串,所有参数将被拼接到 -m 指定的ss程序后构成完整ss程序启动代码所有shadowsocks-libev 支持的选项参数
-k $KCP_CONFIGkcptun 参数字符串,所有参数将被拼接到 kcptun 程序后构成完整 kcptun启动代码,只有设置了 -x 参数这些参数被使用所有 kcptun 支持的选项参数
-x是否启用 kcptun 标志符
设置 -x 参数启用 kcptun 服务
反之,禁用kcptun程序, -k指定的kcptun参数将无效
-v设置启动Debug模式

使用启动参数的命令示例:

Server服务端

假设服务端的网址或域名是 ss.example.org


docker run -dt --name=shadowsocks -p 6443:6443 -p 6500:6500/udp $NAME:$TAG -s "-s :: -s 0.0.0.0 -p 6443 -m aes-256-cfb -k test123 --fast-open" -k "-t 127.0.0.1:6443 -l :6500 -mode fast2" -x

相当于执行了下面命令:


ss-server -s :: -s 0.0.0.0 -p 6443 -m aes-256-cfb -k test123 --fast-open
kcp-server -t 127.0.0.1:6443 -l :6500 -mode fast2

ss运行在6443端口; kcp-server为ss构建了加速通道,运行在6500端口。此时服务端准备好了。如果不想开启kcp加速,删除 -k和-x参数即可。

Client客户端


docker run -dt --name=shadowsocks -p 1080:1080 -p 8123:8123 -p 7777:7777 $NAME:$TAG -m "ss-local" -s "-s 127.0.0.1 -p 6443 -l 1080 -b 0.0.0.0 -m aes-256-cfb -k test123 --fast-open" -k "-r ss.example.org:6500 -l :6443 -mode fast2" -x

相当于执行了下面命令:


ss-local -s 127.0.0.1 -p 6443 -l 1080 -b 0.0.0.0 -m aes-256-cfb -k test123 --fast-open
kcp-client -r ss.example.org:6500 -l :6443 -mode fast2

这样就和ss服务端通过kcp建立了快速通道,同时内部还启动了polipo和cow,分别监听8123端口和7777端口实现代理转发,kcp的基本原理如下图: kcptun原理示意图 如果ss服务端没有开启kcptun服务或不想使用kcptun加速服务,可使用


docker run -dt --name=shadowsocks -p 1080:1080 -p 8123:8123 -p 7777:7777 $NAME:$TAG -m "ss-local" -s "-s ss.example.org -p 6443 -l 1080 -b 0.0.0.0 -m aes-256-cfb -k test123 --fast-open"

直接同ss服务端的ss-server建立连接。注意这里的监听ip和端口的变化

环境变量支持

与启动参数 -skmxv 对应地本项目支持 SS_CONFIG,KCP_CONFIG,SS_MODULE,KCP_FLAG,DEBUG 五个环境变量。

                                                                                                                                               
环境变量作用取值
SS_CONFIG shadowsocks-libev 参数字符串同 -s 参数,支持所有 shadowsocks-libev 支持的选项参数
KCP_CONFIG kcptun 参数字符串同 -k 参数,支持所有kcptun 支持的选项参数
SS_MODULE shadowsocks 启动命令同 -m 参数,ss-local 或 ss-server
KCP_FLAG 是否开启 kcptun 支持效果同 -x参数,可选参数为 true 和 false,默认为 fasle 禁用 kcptun
DEBUG是否输出debug信息效果同 -v参数,可选参数为 true 和 false,默认为 fasle 禁用 debug信息
环境变量与启动参数一一对应,但启动参数相对环境变量具有更高的优先级,也就是说同时指定环境变量和启动参数的情况下将以启动参数为准,环境变量会被屏蔽。

上文使用启动参数示例换成使用环境变量后命令如下:

Server服务端


docker run -dt --name=shadowsocks -p 6443:6443 -p 6500:6500/udp  -e SS_CONFIG="-s :: -s 0.0.0.0 -p 6443 -m aes-256-cfb -k test123 --fast-open" -e KCP_CONFIG="-t 127.0.0.1:6443 -l :6500 -mode fast2" -e KCP_FLAG="true" $NAME:$TAG

Client客户端


docker run -dt --name=shadowsocks -p 1080:1080 -p 8123:8123 -p 7777:7777 -e SS_CONFIG="ss-local" -s "-s 127.0.0.1 -p 6443 -l 1080 -b 0.0.0.0 -m aes-256-cfb -k test123 --fast-open" -e KCP_CONFIG="-r ss.example.org:6500 -l :6443 -mode fast2" -e KCP_FLAG="true" $NAME:$TAG

使用docker-compose简化操作

上文中无论启动ss服务还是启动ss客户端都使用的是 命令行模式,这种模式我们不仅要输入一大串参数或环境变量,而且给快速部署带来不变,所幸我们可以将这些复杂的参数或环境变量写进配置文件,然后使用docker-compse从配置文件中自动加载这些设置。

上文的客户端启动代码我们可以用以下三种方式写进 docker-compose.yaml 效果是一样的。


# 方式一
shadowsocks:
  image: $NAME:$TAG
  command:
    -s "-s 127.0.0.1 -p 6443 -l 1080 -b 0.0.0.0 -m aes-256-cfb -k test123 --fast-open"
    -k "-r ss.example.org:6500 -l :6443 -mode fast2"
    -x
  expose:
    - 1080
    - 8123
    - 7777
  restart: always

# 方式二
shadowsocks:
  image: $NAME:$TAG
  command: -s "-s 127.0.0.1 -p 6443 -l 1080 -b 0.0.0.0 -m aes-256-cfb -k test123 --fast-open" -k "-r ss.example.org:6500 -l :6443 -mode fast2" -x
  expose:
    - 1080
    - 8123
    - 7777
  restart: always

# 方式三
shadowsocks:
  image: $NAME:$TAG
  environment:
     - "SS_CONFIG=-s 127.0.0.1 -p 6443 -l 1080 -b 0.0.0.0 -m aes-256-cfb -k test123 --fast-open"
     - "KCP_CONFIG=-r ss.example.org:6500 -l :6443 -mode fast2"
     - KCP_FLAG=true
  expose:
    - 1080
    - 8123
    - 7777
  restart: always

然后使用 docker-compose up 运行container 或添加 -d 参数使其运行在后台。

多代理使用 Haproxy 路由

Docker化的服务能够实现轻松复制,使用上文的代理服务我们可以用不同的参数启多个本地代理,甚至可以使用相同的参数(注意端口冲突)开启多个配置相同的本地代理。在多代理的环境下,手动在代理间切换是个很不人性化的工作。Hapxory 提供了多代理路由的解决方案,能轻松实现多代理路由并能平衡代理负载。

docke-compose.yaml.sample 和 haproxy/haproxy.cfg  给出了一个结合本项目和Haproxy的多代理路由示例。 在示例中我们使用上节中三种不同的docker-compose配置方式启动了三个一模一样的代理服务客户端,并使用Haproxy路由。

再次强调端口问题,polipo和cow默认运行在8123和7777端口,这个在 docke-compose.yaml.sample 和 haproxy/haproxy.cfg 可以不用更改,除非使用了别的设置;ss的常规运行端口是 1080,用户可以在启动服务时在 -s 参数中指定别的端口,响应地在 docke-compose.yaml.sample 和 haproxy/haproxy.cfg 文件中要进行更改。

About

Docker shadowsocks-libev with polipo and cow support

License:GNU General Public License v3.0


Languages

Language:Shell 100.0%