Shadowsocks + openSUSE

入墙回国之后,不能上 Dropbox 和 Gmail 非常头疼。原来用的大路货 GoAgent 现在也不能用了。本想买个 VPN 帐号但是都死贵,还限制一台设备登录。于是网上搜索一番,还是决定用 Shadowsocks 代理了。

Shadowsocks + Linode 东京 VPS,速度很快,可以看 YouTube 高清(720p)。 Linux, Windows, OS X, Android, iOS 都能用。由于是代理的形式,需要应用支持代理才行。大多数浏览器, Thunderbird 邮件客户端,以及 Dropbox 等都支持代理。可以满足基本上网需求了。

我的服务器操作系统和桌面操作系统都是 openSUSE ,也是这篇唯一的特色了。

获得一个 openSUSE 服务器

据我所知支持 openSUSE 系统的服务器只有 Linode 。Azure ,AWS 之类的可能支持 SUSE Enterprise Linux 。

注册一个Linode账号。需要填写信用卡或借记卡信息。借记卡需要充值,可以先充个 10 美元。最便宜的 Linode 1GB 方案现在是 10 美元/月,不足一月的按小时数计费。一旦 VPS 创建即开始收费,即使不开机运行。因此如果不再需要的话,必须删掉 VPS 才能省钱……

Linode 的指南我就不写了,网上有很多人写得很好了。创建虚拟机的时候选择:

  • Plan: Linode 1GB
  • Location: Tokyo, JP
  • System: openSUSE 13.2 (64bit) 或者更新的版本

服务器

Shadowsocks 有好几种实现,功能是类似的。但很多后来都弃坑了。现在还有 Python 版和 libev 版比较成熟。 openSUSE 的苏学姐打包了 libev 版,我们就用它了吧!安装软件包

sudo zypper addrepo http://download.opensuse.org/repositories/home:MargueriteSu/openSUSE_13.2/home:MargueriteSu.repo
sudo zypper refresh
sudo zypper install shadowsocks-libev

修改配置文件

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

内容如下:

{
  "server":"my_server_ip",
  "server_port":8388,
  "local_address": "127.0.0.1",
  "local_port":1080,
  "password":"mypassword",
  "timeout":300,
  "method":"aes-256-cfb",
  "fast_open": false
}
  • server: 服务器的实际 IP 地址。
  • server_port: 选择一个端口,只要不是被其他服务占用的就行,可以改成 8966 之类的。
  • local_address: 不用改,这个是给客户端用的,对服务器没有任何影响。
  • local_port: 不用改,这个是给客户端用的,对服务器没有任何影响。
  • password: 设置一个密码,以防止被他人蹭流量或者从事非法网络活动。

修改完之后复制一份保存到自己的电脑上,客户端也要用相同的配置文件。

启动服务

libev 版打包时添加了 Systemd 支持,可以通过 systemctl 命令启动服务。启动服务时需要指定配置文件,如果配置文件是 /etc/shadowsocks/shadowsocks-libev-config.json 的话,服务就要在后面加上 @shadowsocks-libev-config 的!通过指定不同的配置文件,可以同时运行多个 shadowsocks 服务。

sudo systemctl start shadowsocks-libev-server@shadowsocks-libev-config

设置开机启动服务,以后即使服务器重启,shadowsocks 也能自动恢复。

sudo systemctl enable shadowsocks-libev-server@shadowsocks-libev-config

SuSEfirewall2

SuSEfirewall2 在 Linode 默认是不安装的。如果你服务器安装了 SuSEfirewall2 ,那么需要添加规则,允许 shadowsocks 通过。否则,客户端和服务器 shadowsocks 将无法连接。

sudo vi /etc/sysconfig/SuSEfirewall2.conf

找到这一行,并将 shadowsocks 配置的 server_port 添加到这里,允许此端口被访问:

FW_SERVICES_EXT_TCP="8388"

重启 SuSEfirewall2

sudo systemctl restart SuSEfirewall2

客户端

libev 版也是有客户端的,但是打 systemd 命令行也不是很方便。我们使用图形客户端的 shadowsocks-qt5 ,openSUSE 软件中心下载

启动软件之后,点击菜单栏上的“连接 –> 添加 –> 从 config.json”,然后导入原先保存的服务器版 shadowsocks-libev-config.json 文件。在主界面列表里就能看到新创建的连接了。选中它,点击工具栏的“连接”,没有错误的话,就连接成功了。

Spectacle.Hf5774

浏览器和其他应用配置Socks代理

对于浏览器等应用程序来说,Shadowsocks客户端才是代理服务器,地址为127.0.0.1,端口1080。浏览器或其他应用的网络数据先经过客户端,即代理服务器,然后被传输到Shadowsocks服务器,达到翻墙的目的。由于Shadowsocks客户端与服务器之间的通讯是加密的,且可通过任意端口。

Firefox (不使用扩展)

浏览器一般都支持代理服务器。Firefox打开首选项,高级 > 网络 > 连接,点击“设置”按钮,打开代理配置对话框:

Firefox Shadowsocks Proxy

注意:一定要勾选“远程DNS”,否则被墙的网站依旧无法解析。

现在就能翻墙了,只是所有网站都使用代理,国内网站的访问反而不方便了。

Firefox+FoxyProxy

FoxyProxy,AutoProxy等扩展的便利之处就是能够一键切换代理服务器,还能根据白名单只对被墙的网站使用代理。

在Firefox附加组件中搜索FoxyProxy。如果你只需要手动切换代理,安装FoxyProxy Basic即可。如果需要使用GFW List等白名单自动代理被墙的网站,则需要使用FoxyProxy Standard。

单击Firefox工具栏上的FoxyProxy图标,打开代理配置列表。蓝色的“默认”是不使用代理服务。我们新建一个代理服务器。在“常规”标签页中,随意选一个名字和不同的表示颜色。然后切换到“代理服务器细节”标签页,填写Shadowsocks代理信息:

Firefox Shadowsocks FoxyProxy

点击确定保存。

鼠标右击工具栏上的FoxyProxy图标,就能手动切换代理了。这也是我现在使用的方法,平时都开Shadowsocks代理,而在访问中国网站时使用“默认”,即无代理。

在FoxyProxy“模式订阅”中,可以添加GFW List订阅,自动更新代理的URL规则,只代理那些被墙的网站。

GFW List有几个明显的问题,所以我现在不想用它了:

  1. 很多国外网站虽然没有被墙,但访问超慢,比如我自己的博客,GithubopenSUSE.org。我还是想要使用代理访问全部外国网站,不用代理访问国内网站。而GFW List等的白名单或黑名单过滤器无法做到这一点。不如手动切换。
  2. GFW List的作者认为Gmail,Google等网站应该改Hosts翻墙,所以没有包含在GFW List中。但是,Hosts总是过一两个月就失效,谁又想去频繁地手动修改那一大堆列表呢?不如都用代理好了。
  3. GFW List好像已经不再更新,但GFW可是每天都在进化。很多后来被墙的网站不能自动代理。

如果你确实想用GFW List,可以Google搜索一下Shadowsocks或GoAgent配置FoxyProxy + GFW List的文章。

Dropbox

一张图说明:

Dropbox Shadowsocks

5 Replies to “Shadowsocks + openSUSE”

  1. 其实 software.opensuse.org 上有苏姐打包的 shadowsocks-libev,还提供了 shadowsocks-libev-server.service & shadowsocks-lib-client.service,用起来还是很方便的。
    话说看到你还在用 init.d 脚本,总觉得不像是 openSUSE 的风格啊,有 systemd 为什么不用?

发表评论

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

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