22 Apr
22Apr

什么是shadowsocks-libev翻墙软件

shadowsocks-libev 是一个 shadowsocks 协议的轻量级实现,是 shadowsocks-android, shadowsocks-ios 以及 shadowsocks-openwrt 的上游项目。其具有以下特点:

  1. 体积小巧。静态编译并打包后只有 100 KB。
  2. 高并发。基于 libev 实现的异步 I/O,以及基于线程池的异步 DNS,同时连接数可上万。
  3. 低资源占用。几乎不占用 CPU 资源,服务器端内存占用一般在 3MB 左右。
  4. 跨平台。适用于所有常见硬件平台,已测试通过的包括 x86,ARM 和 MIPS。也适用于大部分 POSIX 的操作系统或平台,包括 Linux,OS X 和 Cygwin 等。
  5. 协议及配置兼容。完全兼容 shadowsocks 协议,且兼容标准实现中的 JSON 风格配置文件,可与任意实现的 shadowsocks 客户端或服务端搭配使用。

shadowsocks-libev 包括服务端和客户端两部分,一共三个模块。

  1. ss-server:服务器端,部署在远程服务器,提供 shadowsocks 服务。
  2. ss-local:客户端,提供本地 socks5 协议代理。
  3. ss-redir:客户端,提供本地透明代理,需要与 NAT 配合使用
  4. ss-tunnel: 客户端,本地端口转发

官网地址:

https://github.com/shadowsocks/shadowsocks-libev


翻墙软件Shadowsocks-libev服务端设置

要利用 shadowsocks-libev翻墙,首先要有一台国外的服务器安装并运行shadowsocks 服务端。如果还没有服务器,可以到 digitalocean 购买一台SSD虚拟服务器VPS。

Ubuntu安装 shadowsocks-libev服务端

#Add GPG public key: wget -O- http://shadowsocks.org/debian/1D27208A.gpg | sudo apt-key add - 
# Ubuntu 14.04 or above sudo add-apt-repository "deb http://shadowsocks.org/ubuntu trusty main" 
# Debian Wheezy, Ubuntu 12.04 or any distribution with libssl > 1.0.1 sudo add-apt-repository "deb http://shadowsocks.org/debian wheezy main" 
sudo apt-get update sudo apt-get install shadowsocks-libev

上述命令的效果:

  • 把 deb http://shadowsocks.org/ubuntu trusty main 加到 /etc/apt/sources.list
  • 安装ss-local ss-redir ss-server ss-tunnel到 /usr/bin
  • 启动文件 /etc/init.d/shadowsocks-libev
  • 配置文件 /etc/shadowsocks-libev/config.json (旧版是/etc/shadowsocks/config.json)
  • 一些默认启动配置 /etc/default/shadowsocks-libev (旧版是/etc/default/shadowsocks)

编辑shadowsocks-libev配置文件

sudo vi /etc/shadowsocks-libev/config.json

改成类似如下:

{    "server":"1.0.9.8",    "server_port":1098,    "password":"killgfw",    "method":"aes-256-cfb"        }

必须把server 1.0.9.8 改成你自己的,或者改成 0.0.0.0 表示监听本机,其他可以不改。如果访问变慢,时断时续,这可能是受到干扰了,可以尝试改变加密方式,如改成bf-cfb。

控制shadowsocks-libev的方法

sudo service shadowsocks-libev start sudo service shadowsocks-libev stop 
#设置随机启动 Shadowsocks-libev. 新版已经不需要手动设置随机启动 #sudo update-rc.d shadowsocks-libev defaults 99 
#取消shadowsocks-libev随机启动    #sudo update-rc.d -f shadowsocks-libev remove    

查看ss-server是否已经启动并且带有 -u启动参数

ps ax | grep ss-server

如果启动正常,返回结果类似如下:

/usr/bin/ss-server -c /etc/shadowsocks-libev/config.json -a root -u -f /var/run/shadowsocks-libev/shadowsocks-libev.pid

注意其中有-u。如果shadowsocks客户端启用了udp relay, 而服务端启动时不带-u参数,翻墙自然就失败了。

启动shadowsocks-libev服务端

sudo service shadowsocks-libev start

参考:




OpenWrt路由器运行shadowsocks-libev客户端

shadowsocks-libev for OpenWrt要和OpenWrt一致,否则可能无法安装,或者安装了不能启动。

下面地址可以下载:

http://sourceforge.net/projects/openwrt-dist/files/shadowsocks-libev/

请自行测试是否适用于你的OpenWrt。

如果自行编译翻墙固件,最好按照教程自己编译 shadowsocks-libev for OpenWrt。

shadowsocks-libev选择OpenSSL版还是PolarSSL版

根据依赖的 SSL 库可分为 OpenSSL 和 PolarSSL 两种版本OpenSSL 版依赖 libopenssl, 支持加密方式多, 体积大 PolarSSL 版依赖 libpolarssl, 体积小, 加密方式少。

如果内存大就选OpenSSL版,反之则选PolarSSL版。

安装shadowsocks-libev客户端到OpenWrt路由器(星号替换成实际的字符)

~/Downloads$ scp shadowsocks-libev-polarssl_*_ar71xx.ipk root@192.168.1.1:/tmp/ ~/Downloads$ ssh root@192.168.1.1 root@OpenWrt:~# cd /tmp root@OpenWrt:~# opkg install shadowsocks-libev-polarssl_1.*.*_ar71xx.ipk

修改shadowsocks-libev客户端配置

root@OpenWrt:~# vi /etc/shadowsocks.json

改成类似如下:

{    "server":"1.0.9.8",    "server_port":1098,    "local_port":7654,    "password":"killgfw",    "method": "aes-256-cfb" }

注意,server IP必须修改你的实际IP。其他可以保持默认。

shadowsocks代理上网测试

  • 启动shadowsocks 客户端:

    root@OpenWrt:~# ss-local -c /etc/shadowsocks.json

  • Ubuntu浏览器代理上网设置,以FireFox配合AutoProxy为例,增加Proxy Server, Proxy Host填192.168.1.1,Port是7654, 勾选Sock5.如下图:

Ubuntu设置AutoProxy的默认代理是shadowsocks,就可以打开被墙的网站如YouTube.com

以前我在每台电脑上都运行一个shadowsocks客户端,每台电脑都要像上面这样配置浏览器代理上网翻墙。

现在路由器里安装了shadowsocks,所有有线和无线上网设备都不用分别安装shadowsocks了,非常方便了。但是还是太复杂,如果家里有十台上网设备,所有要连国外网站的软件都可能要配置代理访问,有些软件还根本没有设置代理的接口。有没有更简单的方法呢?



Shodowsocks翻墙不同加密方式速度区别

Shodowsocks翻墙不同加密方法,哪一种速度最快最好:

  • 翻墙不稳定,有的能上,有的不能上,有时能上,有时不能上,可能是加密方式的特征被识别,从而被干扰,方法是更换加密方式
  • rc4-md5加解密速度虽然快,但是加密强度不够大,容易被干扰
  • 无论哪一种加密方式,只要使用的人多了,就可能被重点研究,从而受到干扰
  • aes-256-cfb 加密强度大些,一样可能被干扰
  • 有人推荐chacha20或者salsa20,没有试过
  • 其实 bf-cfb就很好,速度很快,官方的shadowsocks-libev及本教程预编译的翻墙固件都直接支持

网友实测Shodowsocks不同加密方尘速度

encrypt and decrypt 20MB data:

aes-128-cfb 0.368462085724s aes-128-ofb 0.400309085846s aes-192-cfb 0.452577829361s aes-192-ofb 0.381041049957s aes-256-cfb 0.418514966965s aes-256-ofb 0.405379056931s cast5-cfb 0.859935045242s cast5-ofb 0.911785125732s chacha20 0.429271936417s rc4 0.154517173767s rc4-md5 0.169504165649s salsa20 0.44139790535s

网友评论:

clowwindy:

因为 chacha20 从 x86 上的性能来看,对速度的影响太小,提高还太有限,不如换个思路,因为通信包到了终端以后,走的都是电路,这里其实涉及到一个供电体系的问题,更换加密不如换一个电网,同一个 VPS,同一个路由器,但是,改用核电给路由器供电时,比火电丢包率会降低一个数量级,大大提高 TCP 吞吐率,经测试这是目前速度最快的供电方式,甚至优于水电,同理选 VPS 机房也要看供电,有些号称用了绿色能源,其实效果不好,这里面其实还涉及到选用 UPS 的型号,就不细说了 另外说到硬件加速,连接路由器的网线也很重要,建议用六类屏蔽线,不过一定不能买那种超薄扁平的网线,会对带宽起到整形作用,突发上不去,看 4K 会受影响,数据可能不准,不过大概也体现了差异 今天没有时间再次测试了,就发这么多吧。你们有一个好,出个新功能,写教程比别人都快,但试来试去的结论,太简单,有时太朴素了,我感觉你们还需要学习,提高自己的知识水平,将来如果写的教程有偏差,你们要负责

rlei:

讨论shadowsocks不同加密方式的安全性没有意义。shadowsocks是被设计来混淆数据,增加某Wall检查出流量特征所需的计算量,提高实时检测的成本,而不是加密。ss的作者多次强调过这一点

参考:



零起点DO VPS shadowsocks-libev 翻墙设置教程

Digital Ocean 的优点:

  • 业界最有名的VPS服务商,服务有保障
  • 全SSD硬盘,速度极快,重启在20秒内
  • 所有VPS具有独立IP
  • 费用极低,$5/月起
  • 管理后台Console Access可以直接运行所有linux命令,可以不设置SSH
  • 收费以小时计算,不用了可以删除,不会多收一分钱
  • 更换IP方便,创建snapshot,再从snapshot新建Droplet,就可能得到新的IP了

立即点击这里注册DO

创建翻墙用的虚拟服务器Droplet

注册DO并绑定支付方式后,登录管理后台,点击右上角的 Create Droplet:

  • Choose an image 选择最新版的Ubuntu 64位,下图是14.04.3,下拉还有更新的如15.10:
  • Choose a site 一般512MB那款就够了:
  • Choose a datacenter region 选择San Francisco:
  • Select additional options, 勾选IPv6:
  • Choose a hostname, 只是助记,比如ubuntu-shadowsocks
  • Create 创建虚拟服务器

进入DO VPS管理界面

在20秒内,VPS创建完毕,并自动分配了IP,点击VPS名字进入管理VPS管理界面:

重置DO VPS Root密码:

注:如果已经收到root密码,请跳到一下步

点击 Reset Root Password 重置密码:

重置密码完成后,新的密码会发送到你的邮箱,下面我们就用这个密码登录并直接在网页上管理VPS

进入DO VPS命令行控制界面 Console Access

DO有个极为强大的功能,可以可以直接在管理后台Console Access 运行Linux命令管理VPS,相当于一个在线版的SSH:

点击 Console Access 开启命令行窗口,如果打开失败就按F5刷新页面重试直到打开。

点击打开的命令行窗口以获得输入焦点。

命令行设置新的Root密码

开启DO Console Access后,输入root并回车,然后重新设置密码。

Ubuntu 15.10 ubuntu-shadowsocks tty1 ubuntu-shadowsocks login: root Passwd: 输入root密码 You are required to change your password immediately (root enforced) Changing password for root. (Current) UNIX password: 输入root密码 Enter new UNIX password: 输入新的root密码 Retype UNIX password: 再次输入新的root密码

密码更新完成后更新一下系统:

root@ubuntu-shadowsocks:~# apt-get update root@ubuntu-shadowsocks:~# apt-get dist-upgrade

可能会问你要不要更新一下grub,直接回车就行了。(我选择的是升级到 install the package maintainer's version

从源码编译 shadowsocks-libev server

2016-01-19发现,shadowsocks.org网页无法打开,这给 apt-get install 方式安装shadowsocks-libev带来不便,不过我们可以自己从源码编译,很简单,而且随时可以编译到最新的版本。

Console Access界面是无法粘贴命令的,把下面命令逐行粘贴到浏览器地址栏,抄着输入也是很快的,输入第一行命令并回车后输入 y 安装所有相关包。

root@ubuntu-shadowsocks:~# apt-get install build-essential autoconf libtool libssl-dev gawk debhelper dh-systemd init-system-helpers pkg-config git root@ubuntu-shadowsocks:~# git clone https://github.com/shadowsocks/shadowsocks-libev.git root@ubuntu-shadowsocks:~# cd shadowsocks-libev root@ubuntu-shadowsocks:~# dpkg-buildpackage -us -uc -i root@ubuntu-shadowsocks:~# cd .. root@ubuntu-shadowsocks:~# sudo dpkg -i shadowsocks-libev*.deb root@ubuntu-shadowsocks:~# ls /usr/bin/ss-* root@ubuntu-shadowsocks:~# ss-local ss-manager ss-redir ss-server ss-tunnel

设置 shadowsocks-libev server,见 翻墙软件Shadowsocks-libev服务端设置

至此,我们已经开通了DO VPS,并且在网页界面就安装完成了 shadowsocks-libev,下面是修改设置并重启shadowsocks-libev

root@ubuntu-shadowsocks:~# vi /etc/shadowsocks-libev/config.json root@ubuntu-shadowsocks:~# service shadowsocks-libev restart

详细的设置教程在 翻墙软件Shadowsocks-libev服务端设置

再配置好客户端,如果没有错误,就可以成功翻墙了。所有以上过程2016-01-19亲测通过。

附录:怎样更换DO翻墙VPS的IP(或者怎样使用最省钱)

  • 照上面教程创建Droplet ubuntu-shadowsocks, 设置好shadowsocks-libev服务端,其中server写 0.0.0.0 并测试通过
  • Poweroff VPS,也就是VPS关机,这时还会产生VPS使用费用的,因为IP,空间等资源还是被你占用
  • 创建Snapshot,命名为shadowsocks,并传送到你可能使用的各个区域。比如你原来是在San Francisco创建的,可以传送到New York区
  • 删除VPS,Destroy Droplet ubuntu-shadowsocks,然后就不产生任何费用了。不怕麻烦,每天都这样操作,一个月可能只要2元钱就行了
  • 下次要使用,在Create Droplet的第一步,Choose an image, 选择Snapshots, shadowsocks,其他和上面教程一样
  • 从snapshot创建Droplet完成,页面显示了VPS的IP地址,shadowsocks客户端连接到这个IP地址就行了,服务端不用更改任何设置

附录:怎样不“登录”路由器更改OpenWrt shadowsocks-libev路由器的server IP

  • 路由器设置密钥登录,这样ssh登录就不用密码了
  • 创建config配置文件, Ubuntu下是 ~/.ssh/config,增加如下内容:

      Host router      HostName 192.168.1.1      User root      Port 22      IdentityFile /path/to/your/rsa

    Windows下安装 git for Windows,选择使用OpenSSH,编辑 C:\Program Files\Git\etc\ssh\ssh_config

    然后就可以 ssh router 登录路由器了

  • reset.sh:

      #!/bin/bash   # Author: https://github.com/softwaredownload/openwrt-fanqiang  # Date: 2016-01-20   ssh router <<'ENDSSH'   sed -ri "s/([0-9]{1,3}\.){3}[0-9]{1,3} /1.0.9.8 /" /usr/bin/shadowsocks-firewall  sed -ri "s/([0-9]{1,3}\.){3}[0-9]{1,3}/1.0.9.8/" /etc/shadowsocks.json   /etc/init.d/shadowsocks restart   ENDSSH

    把reset.sh中的 1.0.9.8 改成shadowsocks服务端的server IP,然后运行 reset.sh就可以了。

    想要测试一下日本,英国,新加坡或美国的IP,so easy,2分钟就行了。

Reference:


编译shadowsocks-libev for OpenWrt ipk安装包

不同OpenWrt版本下编译的shadowsocks-libev ipk一般是不能通用的。比如现在用的是trunk版的OpenWrt,如果使用OpenWrt Chaos Calmer 15.05 下编译的shadowsocks-libev,可能安装后根本不能启动。

前面我曾编译出翻墙固件,其中shadowsocks-libev是别人编译,从sourceforge上下载的,刷上固件后,shadowsocks总是没有自动启动,运行/usr/bin/ss-redir,报告没有找到这个文件,其实文件是在的,只是不兼容。所以,最好还是自行编译shadowsocks-libev。

以下 不要使用root用户来操作

下面是在Ubuntu 64bit下编译shadowsocks-libev for OpenWrt ipk安装包的步骤:

安装依赖库,不同的操作系统版本可能要作相应调整

sudo apt-get install build-essential subversion libncurses5-dev zlib1g-dev gawk gcc-multilib flex git-core gettext

下载OpenWrt源代码

cd ~/Downloads git clone git://git.openwrt.org/openwrt.git

下载shadowsocks-libev源码

cd ~/Downloads/openwrt pushd package git clone https://github.com/shadowsocks/shadowsocks-libev.git popd

或者:

cd ~/Downloads/openwrt/package git clone https://github.com/shadowsocks/shadowsocks-libev.git 
编译 DIR505固件2015-12版时用的源码版本是:Date:   Tue Dec 22 21:42:40 2015

更新Feeds,使package在make menuconfig中可用,而不是真正安装或编译,并按照自己的路由型号设定target,否则默认target下编译好的工具链在重新设定target后无效

cd ~/Downloads/openwrt ./scripts/feeds update -a ./scripts/feeds install -a    # run make menuconfig and set target; # Choose your own Target System -> SubTarget -> Target Profile make menuconfig make defconfig

先编译要用到的工具和库

make prereq && make tools/install && make toolchain/install

等待时间较长,可以先和大妈一起去跳个广场舞,制造更多噪音恶心一下别人:)

make menuconfig配置选项

# 运行命令 make menuconfig

有三个选项:

  • y: 编译进固件
  • m: 编译出安装包,但不打包进固件
  • n: 排除

输入命令make menuconfig进入配置程序后:

  • Target System:
    • Atheros AR7xxx/AR9XXX (Default value,不同的路由器,可能选择不同)
      适合: WNDR4300, DIR505A1, TLWR2543
  • Subtarget:
    • Generic device with NAND flash
      适合: WNDR4300
    • Generic
      适合: DIR505A1
  • Target Profile: (因我们只是编译包,这步可以不选)
  • Network, 选择shadowsocks-libev 和 shadowsocks-libev-polarssl, 按m设置为编译独立ipk安装包
  • Save && Exit

图 make menuconfig

图 选择shadowsocks-libev-polarssl

编译shadowsocks-libev for OpenWrt

make V=99 package/shadowsocks-libev/openwrt/compile    

查看编译出的shadowsocks-libev和shadowsocks-libev-polarssl文件

cd ~/Downloads/openwrt/bin/ar71xx/packages/base/ tree ├── libc_1.1.11-1_ar71xx.ipk ├── libgcc_5.2.0-1_ar71xx.ipk ├── libopenssl_1.0.2e-1_ar71xx.ipk ├── libpolarssl_1.3.15-1_ar71xx.ipk ├── libpthread_1.1.11-1_ar71xx.ipk ├── shadowsocks-libev_2.4.3_ar71xx.ipk ├── shadowsocks-libev-polarssl_2.4.3_ar71xx.ipk └── zlib_1.2.8-1_ar71xx.ipk     # 如果用来编译翻墙固件,把shadowsocks-libev复制到Image Builder目录下:    # for DIR505A1: cp shadowsocks* ~/Downloads/OpenWrt-ImageBuilder-ar71xx-generic.Linux-x86_64/packages/base # for WNDR4300 cp shadowsocks* ~/Downloads/OpenWrt-ImageBuilder-ar71xx-nand.Linux-x86_64/packages/base

把文件scp复制到OpenWrt路由器/tmp,就可以 opkg install shadowsocks-libev_2.4.3_ar71xx.ipk 安装了。

参考:



Comments
* The email will not be published on the website.
I BUILT MY SITE FOR FREE USING