MENU

给你的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.comgoogle.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 香港
最后编辑于: 2020 年 05 月 14 日
添加新评论

已有 9 条评论
  1. CZ CZ

    修改啓動命令用什麽指令?

    1. @CZ随便,你可以用你自己喜欢的编辑器

  2. Press F to Pay Respect Press F to Pay Respect

    请问是什么原因导致只能Windows客户端用呢?

    1. @Press F to Pay Respect细节我也不知道,听dalao说是因为对数据包的处理方式不同导致的

  3. 博主你好,关于Cloudflare的那些IP,Trace了一下全都是到洛杉矶/圣何塞,也就是说都是Anycast的……这个该如何让他走特定地区呢……(・・;

    1. @Canvas087你无法决定cloudflare的ip走哪些线路,如果这些ip到了美国,我也咩办法.

  4. CC CC

    /etc/init.d/shadowsocks: line 104: unexpected EOF while looking for matching `"'

    /etc/init.d/shadowsocks: line 110: syntax error: unexpected end of file

    1. @CC我文章里有标点写错了,文章里第六行有个:
      删掉换成"

  5. CC CC

    修改do_start()之后,启动报错,第104、110行,不是重载配置问题

996.icu 996.icu