给你的shadowsocks+obfs套上一层cloudflare
@(哭泣)最近卷入辞职困境中,忐忑不安,刚解决了这个问题(大概),把前几天发现的这个操作写一下,其实这个操作很久之前就有,但是我当时是在ss-libev+obfs上测试的,所以没有成,不知为何这个操作只能在windows的那个客户端上用(小伙伴tsukasa给我解释了一番原因,但是我是一头雾水,咩听懂),前几天在公司闲来无事又测试了一番,发现windows上可以,于是先写一下.
准备
- ubuntu16.04
- simple-obfs(windows的obfs-local和linux的obfs-server)
- shadowsocks-windows
- shadowsocks-libev(作为服务端)
服务端不限语言版本,根据原理推断所有版本应该都可以(没试过),我千篇一律的使用shadowsocks-libev作为服务端
windows客户端只能用shadowsocks-windows(原来的shadowsocks-csharp)版本
windows的obfs-local在github的releases里有下载
obfs的安装
libev服务端的安装就不再说了,去google搜索"shadowsocks-libev ubuntu一键"能找到秋水的debian的一键,直接用那个就可以
apt-get install --no-install-recommends build-essential autoconf libtool libssl-dev libpcre3-dev libev-dev asciidoc xmlto automake git wget -y
git clone https://github.com/shadowsocks/simple-obfs.git
cd simple-obfs
git submodule update --init --recursive
./autogen.sh
./configure && make
make install
修改libev的配置
安装了秋水的libev之后需要修改一下启动配置以便使用obfs
先修改端口,安装时设置了端口这步就可以省略
cloudflare对http端口只支持如下几个,需要将shadowsocks的端口设置为其中一个
- 80
- 8080
- 8880
- 2052
- 2082
- 2086
- 2095
文件位置在/etc/shadowsocks-libev/config.json
修改里面的port为上面任意一个即可
然后修改启动文件,加入obfs-server
文件在/etc/init.d/shadowsocks
找到do_start()
修改为这样(注意看第六行增加的参数)
do_start() {
if check_running; then
echo "$NAME (pid $PID) is already running..."
return 0
fi
$DAEMON -v --plugin "obfs-server" --plugin-opts "obfs=http" -c $CONF -f $PID_FILE
if check_running; then
echo "Starting $NAME success"
else
echo "Starting $NAME failed"
RET_VAL=1
fi
}
修改后执行service shadowsocks restart
,这里需要注意一下,如果修改的时候shadowsocks已经在运行了的话需要执行一个reload命令,具体命令忘了,执行restart的时候会出现提示,命令会用粗体标出,直接复制执行即可
配置cloudflare
直接去cloudflare注册个账户,然后弄个域名添加到cloudflare,然后使用主域名或添加一个子域名设置a记录,开启cloudflare防护,然后再attack页面将域名的防护等级设置到最低
不建议添加自己做站的域名,因为可能会被ban,建议单独找一个域名,可以去注册tk,ml,ga,gq之类的
如果不想接入cloudflare的ns的话可以找个cloudflare的合作伙伴接入,这样支持cname
配置客户端
下载ss-local和shadowsocks-windows将它们放在同一个目录,然后运行shadowsocks客户端
服务器地址填写cloudflare的ip(ping在cloudflare设置a记录的那个域名得到的ip即可)
端口填写设置的端口,加密方式和密码正常填写
插件程序填写obfs-local
插件选项填写obfs=http;obfs-host=google.com
将google.com
换成在cloudflare设置a记录的域名
然后保存之后启动即可
但是这样的话,你的流量先到美国的cloudflare节点然后走cloudflare自己的线路到回源节点,再到自己的机器,看起来除了能防ban没有啥用处,而且就那节点的链接质量还会减速.
没问题请往下看
一个操作
cloudflare有一部分ip使用了任播技术(客户在中国则连接到香港的cloudflare机房,在日本则连接到日本的cloudflare机房),但处于成本考虑只有企业或更高级的套餐才会提供使用
由于cloudflare使用了一个我不知道叫啥的技术,使得cloudflare任意ip(回源用的除外)添加host都可以请求到你的站点(配合合作伙伴设置cname接入的方式也可以免费使用这部分节点)
找出这部分ip将shadowsocks的客户端里服务端ip改为这部分ip
这样链接到离你最近的cloudlfare机房,然后流量会走cloudflare自己的线路到回源节点,然后到自己的机器.
这样,使用一些线路较差的机器也可以提高一定的速度
找ip的方法
这个没啥好的方法,无非就是找一下cloudflare的企业用户的网站然后去ping一下得到ip之后路由追踪一下
下面这些是我已经找到的一些,挑一段ping一下,能ping通的即可使用
104.18.62.1/24 香港hkix.net
104.16.35.1/24 香港hkix.net
104.16.36.1/24 香港hkix.net
104.18.35.1/24 香港hkix.net
104.18.36.1/24 香港hkix.net
104.16.54.1/24 香港
104.16.55.1/24 香港
104.18.128.1/24 香港
104.18.129.1/24 香港
104.18.130.1/24 香港
104.18.131.1/24 香港
104.18.132.1/24 香港
104.19.195.1/24 香港
104.19.196.1/24 香港
104.19.197.1/24 香港
104.19.198.1/24 香港
104.19.199.1/24 香港
修改啓動命令用什麽指令?
随便,你可以用你自己喜欢的编辑器
请问是什么原因导致只能Windows客户端用呢?
细节我也不知道,听dalao说是因为对数据包的处理方式不同导致的
博主你好,关于Cloudflare的那些IP,Trace了一下全都是到洛杉矶/圣何塞,也就是说都是Anycast的……这个该如何让他走特定地区呢……(・・;
你无法决定cloudflare的ip走哪些线路,如果这些ip到了美国,我也咩办法.
/etc/init.d/shadowsocks: line 104: unexpected EOF while looking for matching `"'
/etc/init.d/shadowsocks: line 110: syntax error: unexpected end of file
我文章里有标点写错了,文章里第六行有个:删掉换成"
修改do_start()之后,启动报错,第104、110行,不是重载配置问题