Linux 桌面环境下使用 shadowsocks

随着最近天气情况越来越恶劣,翻土墙已经成为生活必须的技能之一,shadowsocks 是目前本人和小伙伴们使用最多的一种,作者在 Mac OS X 和 Windows 下都提供了界面友好的客户端程序如 https://github.com/shadowsocks/shadowsocks/wiki/Ports-and-Clients ,但是 Linux 下的使用稍微麻烦些,最近在一台老电脑上新装上了 Linux ,加上小伙伴问到过这问题,于是就有了这篇折腾的记录。 我使用的 Linux Mint 17,基于 Ubuntu 的衍生版本,理论上 Debian 系的操作都是一样的,Arch Linux 的 AUR 中有shadowsocks 的预编译包,CentOS 嘛 github 也有介绍(真有人拿 cent 当桌面用吗) 建议全程使用 root 账户操作以避免反复 sudo 输密码。

准备工作

准备工作需要一个可用的 http 代理或者 ssh 代理,用于在没有配好 ss 的时候无痛连接 github 和更新 PPA,不然脸黑的话apt-get update 能卡半天。


A,如果你使用的是 http 代理,请使用:

export http_proxy=http://yourproxyaddress:proxyport

这条命令将临时修改你的全局代理环境变量也就是会影响你所有软件。


B,如果你没有 http 代理,请使用:

ssh -N -D 8888 user@hostname

其中8888是本地端口号,user@hostname 是你的 ssh 帐号和服务器,这条命令将把你 ssh 服务器的端口绑定到本地的8888端口,那么你本机127.0.0.1:8888将成为一个 socks 代理,-N 参数表示不打开远端的命令行。 然后你需要将任何软件通过 socks 代理使用的工具:tsocks,我们将使用它让 apt-get 通过代理更新。

apt-get update
apt-get install tsocks

编辑 /etc/tsocks.conf 配置文件

local = 192.168.2.0/255.255.255.0
#local表示本地的网络,也就是不使用socks代理的网络
local = 10.0.0.0/255.0.0.0
server = 127.0.0.1
# socks 类型,ssh 和 shadowsocks 都是 sock5
server_type = 5
# 端口是刚才绑定的8888
server_port = 8888

需要注意的一点是如果你使用的代理服务器不是本机,但其 IP 不在 local 的 IP 段里会报错:SOCKS server xxx.xx.xxx.xxx (xxx.xxx.xxx.xxx) is not on a local subnet 只要保持 ssh -D 进程存在,任何需要代理的工作都可以简单的在命令前加 tsocks,如

tsocks apt-get update

准备工作结束。

安装 shadowsocks 后端

ss 的后端有很多语言实现,包括 Python、Go、libev等,这里使用广泛的 Python 后端。

apt-get install python-pip
pip install shadowsocks

然后编辑/etc/shadowsocks.json

{
    "server":"xx.xx.xx.xx",
    "server_port":xxxx,
    "local_address": "127.0.0.1",
    "local_port":1080,
    "password":"xxxxxxxx",
    "timeout":300,
    "method":"aes-256-cfb",
    "fast_open": true,
    "workers": 1
}

在 server 后填上 ss 服务器域名或者 IP,server_port是服务器的端口,password 填 ss 的密码,加密方式请保持与服务器一致,local_port 表示本地的代理端口。 配置文件详解请参看https://github.com/shadowsocks/shadowsocks/wiki/Configuration-via-Config-File  (链接失效)这个时候

sslocal -c /etc/shadowsocks.json

即可简单的开启 ss 代理(加上 -d start 参数可以在后台运行),在 network manager 里可以将socks代理设为127.0.0.1:1080 (这时是全局翻墙)

安装图形界面

其实习惯终端操作的话,可以编辑/etc/rc.local 加上

sslocal -c /etc/shadowsocks.json -d start

就可以实现开机自动启动,基本不需要进行过多干涉,如果不需要安装 GUI 可以直接看下一个部分。 ss-qt5项目介绍 https://github.com/librehat/shadowsocks-qt5/wiki/用户指南 作者 PPA 页面 https://code.launchpad.net/%7Ehzwhuang/+archive/ubuntu/ss-qt5 使用shadowsocks-qt5 需要添加作者的 PPA,什么是 PPA 编辑 /etc/apt/source.list :

deb http://ppa.launchpad.net/hzwhuang/ss-qt5/ubuntu trusty main 
deb-src http://ppa.launchpad.net/hzwhuang/ss-qt5/ubuntu trusty main

添加PPA的密钥避免出现“W: GPG 错误,由于没有公钥,无法验证下列签名”的错误提示:

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6DA746A05F00FA99

更新源列表、安装 ss-qt5:

apt-get update
#如响应缓慢请自行在前面添加 tsocks ,不再重复
apt-get install shadowsocks-qt5

参数不会使用 /etc/shadowsocks.json ,需要自己填,格式和之前相同。 QQ20150129-2@2x 遇到问题可以在“杂项”选项卡里开启“除错级别的日志”。查看日志里的信息。比如提示端口号占用于是我把1080换成了1090。

配置自动切换

FF 和 chrome 浏览器都有自动切换的功能,比如 chrome 的插件 SwitchyOmega(原来的 switchsharp) QQ20150129-3@2x   可以自己手写规则,也可以从 gfwlist 获取 txt 之后使用 gfwlist2pac 转换成 pac 文件

pip install gfwlist2pac
tsocks wget https://autoproxy-gfwlist.googlecode.com/svn/trunk/gfwlist.txt
gfwlist2pac -i ./gfwlist.txt -f ./gfw.pac -p "SOCKS5 127.0.0.1:1090;" #端口号和ss保持一致,可以使用-h参数查看帮助

然后在 network manager 里修改本地网络代理配置(FF 可以使用独立的配置,chrome 我没发现相关设置项), QQ20150129-4@2x


PS,另外也可以使用 cow 作为 shadowsocks 的二级客户端,详情参见 https://github.com/cyfdecyf/cow 暂时挖个坑,以后补充关于 cow 的使用记录

 

 


UPDATE 2015.08.22

原作者 clowwindy 被约谈,ss 维护停止,R.I.P


本文链接:https://www.starduster.me/2015/01/29/use-shadowsocks-on-linux/
本站基于 Creactive Commons BY-NC-SA 4.0 License 允许并欢迎您在注明来源和非商业使用前提下自由地对本文进行复制、分享或基于本文进行创作。
请注意:受限于笔者水平,本站内容可能存在主观臆断或事实错误,文中信息也可能因时间推移而不再准确,在此提醒读者结合自身判断谨慎地采纳。

29条评论


  1. 博主的 fast_open 参数标注一下吧,对内核有要求,我踩那个坑上了……
    希望博主最后更新一下 cow 的使用
    这个博客我很喜欢,常来逛,嘿嘿

    回复

    1. 补一句,那个 tsocks 工具有些太老了

      回复

      1. 现在有proxychains-ng,我自己也是在用这个,写这个的时候还不知道proxychains

        回复

    2. 本来这个配置的详细信息github上有的我就没多说,然后某次事件之后就被和谐了sigh,我也很无奈

      回复

  2. 我想请问下ss安装完成后,应该怎样启动pac模式?是在本机的网络里设置还是ss的客户端?debian8.2

    回复

  3. 请问 运行sslocal -c /etc/shadowsocks.json后 出现: ERROR [Errno 98] Address already in use该怎么解决?谢谢!

    回复


    1. header 的源码里有这句 <防meta charset=”<吞?php bloginfo( ‘charset’ ); ?>”防>吞,我这边浏览器看源码显示出来就是 meta charset=”UTF-8″

      回复

          1. chrome下同,错误信息如下: This page contains the following errors:error on line 313 at column 37: Input is not proper UTF-8, indicate encoding !Bytes: 0x1C 0xEF 0xBC 0x89Below is a rendering of the page up to the first error.


    1. 突然就发现 RSS 好像正常了而我什么都没改过的样子,那大概就是以前主题的锅了。。

      回复

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据