• 此方法需中转略麻烦,建议v2ray代替,作者本人已不再使用

一、前言

准备

  • 一台连得上Google的服务器(测试用,可选)

    • 这里用的是腾讯云买的CentOS 7.2,新加坡节点
  • 一个heroku账号

    • heroku平台注册需要翻墙,但登录和部署均不需要
    • 账号还有免费app余额
  • 一台便宜且容易搞到手的国内服务器(可选)

    • 仅作为中转服务器,不需要多平台共用可以不备
  • 需要梯子服务的平台对应的客户端(Android、Win、Mac、Linux)


二、搭建梯子

国外服务器手动部署测试

首先测试下git上的项目能否正常部署运行服务器程序,这里用的是shadowsocksr,首
先登陆服务器

$ git clone -b manyuser https://github.com/shadowsocksr-backup/shadowsocksr.git

进入到目录,并初始化配置

$ cd shadowsocksr/
$ ./initcfg.sh

根据wiki说明如果是多用户的话接下来修改config.json,单用户的话修改user-config.json,我们这里是单用户,修改user-config.json,其他参数默认,只修改密码。同时这里要>记住下面几个参数,与后面客户端保持一致,参数的具体含义见wiki

{
    "server_port": 8388,
    "password": "12333333",//你修改的密码
    "method": "aes-128-ctr",
    "protocol": "auth_aes128_md5",
    "protocol_param": "",
    "obfs": "tls1.2_ticket_auth_compatible",
    "obfs_param": ""
}

修改完毕保存后进入子目录,启动后台进程

$ cd shadowsocks/
$ python server.py -d start

查看日志

$ tail -f /var/log/shadowsocksr.log

正常输出说明启动成功↓

2018-01-24 16:46:42 INFO     server.py:46 current process RLIMIT_NOFILE resource: soft 100001 hard 100002
2018-01-24 16:46:42 INFO     asyncdns.py:324 dns server: [('100.78.90.8', 53), ('100.78.90.19', 53)]
2018-01-24 16:46:42 INFO     server.py:106 server start with protocol[auth_aes128_md5] password [12333333] method [aes-128-ctr] obfs [tls1.2_ticket_auth_compatible] obfs_param []
2018-01-24 16:46:42 INFO     server.py:122 starting server at [::]:8388
2018-01-24 16:46:42 INFO     server.py:142 starting server at 0.0.0.0:8388

保持日志窗口观察连接情况


接下来使用客户端,注意要使用shadowsocksR的客户端,原生的shadowsocks客户端不支持>协议混淆,无法直接使用shadowsocksR服务端,几个平台的下载也顺便给出来一下,Assets下有最新版稳定版等

这里以Windows客户端为例,下载解压后进入目录,启动ShadowsocksR-dotnet.exe,这里用
的是4.0版
此处输入图片的描述

输入服务器ip,上面修改过的密码,以及协议和混淆等参数与上面保持一致,上面没有修改
这里也照默认

保存启动后可以试着登录Google了,访问正常情况下日志会持续输出,如果没有任何输出说
明很可能没连上,可以检查一下服务器端口是否开放了(腾讯云、阿里云等服务器默认的>安全组都只打开22、443等几个标准端口,需要自行开放设置


一键部署上heroku(重点)

经过上面的测试我们确认服务程序能正常运行,现在可以着手布置上云平台了,本来还在思
考ssr怎么转换成web服务的形式部署上云平台,然后就发现了这个,一键部署,异常>简单,跟着下面作者贴图说明服务端很快就能部署好

这里注意一点,这个是shadowsocks-heroku,不是shadowsocksR,协议不同,是不能直
接用刚才的ShadowsocksR客户端来连接的,这点作者在issue里面也提到了

接原作者的“启动本地 Client”说明,启动后相当于将本地当成一个代理服务器,要走代理>则流量都从本地1080端口走:

server listening at { address: '127.0.0.1', family: 'IPv4', port: 1080 }

简而言之,若要浏览器翻墙还得手动给浏览器做配置,如果有多个浏览器要一一配置,需要
修改代理服务器时也要一一修改,比较麻烦,而且只能在PC端应用,要应用到移动端需要另
装客户端v2ray
总结下我们对这个梯子的需求大概是:

  • 一个梯子,多平台通用
  • 集成到唯一的ShadowsocksR客户端里

全平台通用化(重点)

为了解决上面两个需求我们需要对协议进行转换,这里涉及到一个转换工具glider,>可以转换包括socks5、http、ss/ssr内的多种协议,这里我们将socks5转为ssr就可以为客>户端所用,glider规则示例说明如下,详细见wiki:

listen=ss://AES-128-CFB:password@:8449

↑ 表示监听8449端口,协议为ss混淆,即ssr

forward=socks5://127.0.0.1:1080

↑ 表示转发协议为socks5的本地1080端口的流量到监听的端口上

按照原本作者说明的操作整体架构如下,A为本机:

sequenceDiagram
A 其他client/代理->A ssHerokuRe: connect local 1080
A ssHerokuRe->B heroku: connect remote 80
Note over B heroku: websocket
Note over A ssHerokuRe: socks5://:1080
B heroku->A ssHerokuRe: return data
A ssHerokuRe->A 其他client/代理: return data

我们修改以适应ShadowsocksR客户端的架构如下,A为本机,B为中间服务器:

sequenceDiagram
A client->B glider: connect remote 8449
Note over B glider: ss://:8449
B ssHerokuRe->C heroku: connect remote 80
Note over C heroku: websocket
Note over B glider,B ssHerokuRe: forward 1080 to 8449
Note over B ssHerokuRe: socks5://:1080
C heroku->B ssHerokuRe: return data
B glider->A client: ssr protocol

架构稍微复杂了点,但实际操作起来难度并不大


首先登入我们的中间服务器,没有服务器的同学直接A机器与B机器用一台也可以,那样就只
有局域网内的设备能用了。这里B机器是Linux,因此不能直接用ss-heroku的win客户端,我
们在之前项目的issue里找到了作者提供的Linux客户端下载re.zip,下载后解压,进>入主目录:

$ npm install

没有npm与node请自行安装,操作完后修改config.json:

{
    "server": "xxxx.herokuapp.com",//你的app
    "local_address": "127.0.0.1",
    "scheme": "ws",
    "local_port": 1080,
    "remote_port": 80,
    "password": "pwd",//你的密码
    "timeout": 600,
    "method": "aes-256-cfb"
}

修改完保存后,运行命令,以后台进程形式运行:

$ nohup node local.js -c config.json &

退出目录,下载glider的Linux版,解压后进入主目录下的config目录,参照example:

$ vim glider.conf
listen=:8443
listen=ss://AES-128-CFB:password@:8449
forward=socks5://127.0.0.1:1080
verbose=True
strategy=rr
checkwebsite=www.microsoft.com
checkduration=30

8443为http/socks5代理端口,8449为ss混淆代理端口,也就是我们等会客户端需要使用的>远程端口。保存后退出config目录,运行命令启动后台进程:

$ nohup ./glider -config config/glider.conf &

启动后可分别查看两个目录的nohup.out查看日志,此时为客户端新添加一个服务器,参数>规则照之前一一对应,,协议改为origin,混淆改为plain,保存后使用该服务器代理>应该可以正常访问了,日志流水上也可看得到

因为多走了一轮代理的原因,访问的延时会比较大(自测在几百ms左右),因此不适合游戏
等对时延要求比较严格情况,简单的试了下youtube视频基本流畅,720p左右体验还行,最>大的优势在于免费,不限量,基本不计时


三、扩展思路

相关思考

  • Shadowsocks-heroku是用websocket代替了原本的socket发起的连接,除了项目的nodejs>版之外还有python语言版的链接在项目中可自取

相关用途及扩展

  • 说道代理就自然能想到爬虫,爬虫总怕不小心就被封了ip,而这里heroku平台提供创建50个免费的app,据测试每个app的ip都不同,代理ip什么的自然可以自由的切换。

  • 后端云平台是个很好的思路,除了heroku,应该也还存在其他免费的云平台,我们可以将
    自己的app部署上去,只要国内能正常访问就说明可以作为代理来使用,大致上找的时候符>合以下条件都有可用性:

    • 账户提供一定量免费限额

    • 服务试用不限制时长(免费试用一个月什么的没太大意义)

    • 服务试用不限制流量,限制流量基本难以操作了

  • paas支持的语言零散不全,他们常支持的Ruby On Rails对国内开发者来说较陌生,因此>若要搞出其他Shadowsocks-XX平台 服务端部署项目可能需要自行用ruby等语言重写,较麻>烦


有很多地方认识不完整,知识水平有限,抛砖引玉,望大佬们指正。

参考:


Written with StackEdit.