问题描述
有关 Shadowsocks 原理,该笔记不再赘述。
该笔记将记录:如何安装并设置 Shadowsocks 服务,以实现网络访问(访问 Google、Twitter、Facebook 等等)
补充说明
因某些原因,自 shadowsocks 2.8.2 后,该项目就已经不再维护了。但是出现许多“衍生版本”(基于原版本进行问题修复和扩展的版本)。推荐安装 shadowsocks-py 软件包,该软件包也是在原有的基础上进行代码维护。但是本文内容依旧基于 shadowsocks 2.8. 版本。
目前Shadowsocks流量已经能够被识别,这与使用默认端口、数据加密类型都有关系。现在是时候挖条加密隧道保护流量。比如你可以使用SSH创建加密隧道,通过该隧道SOCKS流量。
解决方案
环境概述
本地台式机,扮演客户端,壹台想要科学上网的主机。
远程服务器,扮演服务端,壹台能够访问任何站点的主机。
第一步、安装服务(在两台主机上执行)
#(搜索)执行如下命令,搜索出Shadowsocks软件包名: pip search shadowsocks #(安装)使用pip安装Shadowsocks包 pip install shadowsocks pip install shadowsocks==2.8.2 # (其他可选安装方法)安装特定的版本 # (其他可选安装方法)直接从Git安装 pip install git+https://github.com/shadowsocks/shadowsocks.git@master
安装的可执行程序:
命令 | 功能 |
---|---|
sslocal | 实现SOCKS5协议的客户端,运行在本地主机中。 |
ssserver | 实现SOCKS5协议的服务端,运行在远程服务器中。 |
第二步、服务端配置(在远程服务器上执行)
# 方式一、直接命令行启动
执行如下命令启动服务:
# 直接启动 ssserver -p 8388 -k "your password" -m aes-256-cfb # 后台运行(以nobody用户运行) ssserver -p 8388 -k "your password" -m aes-256-cfb --user nobody -d start
查看服务日志:
#!/bin/sh tail -f /var/log/shadowsocks.log
停止正在运行的服务:
ssserver -d stop
# 方式二、使用配置文件
每次都在命令行中指定选项、密码等参数,不仅不安全,而来不方便。可以通过配置文件:
{ "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 }
然后使用该配置文件来启动服务:
#!/bin/sh ssserver -c /etc/shadowsocks.json # 启动和停止服务 ssserver -c /etc/shadowsocks.json -d start ssserver -c /etc/shadowsocks.json -d stop # 启动管理地址 ssserver -c /etc/shadowsocks.json --manager-address 127.0.0.1:6001 -d start
配置文件的配置方法参考「Create configuration file and run」文档
第三步、客户端配置(在本地台式机上执行)
客户端有两种选择:使用sslocal命令;使用图形化客户端;
# 方式一、使用sslocal命令
# 方式二、使用图形化客户端
可以到官网下载GUI客户端。支持Windows、Mac OS X、Linux、Android、IOS、OpenWRT。使用方法可以「查看官方的Quick Guide」。
或者安装客户端程序:shadowsocks-qt5
源码安装 Shadowsocks 服务
该部分将介绍使用源码安装 Shadowsocks 服务(该方法适用于某些特殊场景)。
第一步、拉取源码
在终端里执行如下命令,以从GitHub中检出代码:
git clone -b master https://github.com/shadowsocks/shadowsocks.git
第二步、执行安装
进入源码目录,并进行安装:
cd shadowsocks python setup.py install
常见错误列表
#1 libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup
问题描述:
2016-12-02 20:16:46 INFO loading libcrypto from libcrypto.so.1.1 Traceback (most recent call last): File "/usr/local/bin/sslocal", line 9, in <module> load_entry_point('shadowsocks==2.8.2', 'console_scripts', 'sslocal')() ...... File "/usr/lib/python2.7/ctypes/init.py", line 380, in getitem func = self._FuncPtr((name_or_ordinal, self)) AttributeError: /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup
解决办法:
according to this link you can find any string like:
libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p,)
and replace with:
libcrypto.EVP_CIPHER_CTX_reset.argtypes = (c_void_p,)
also, replace this part:
libcrypto.EVP_CIPHER_CTX_cleanup(self._ctx)
with
libcrypto.EVP_CIPHER_CTX_reset(self._ctx)
in the file openssl.py , which is located somewhere like /usr/lib/python2.7/dist-packages/shadowsocks/crypto/openssl.py , you could find it.
… and the problem would be solved.
#2 ImportError: No module named pkg_resources
问题描述:
Traceback (most recent call last): File "/usr/local/bin/sslocal", line 5, in <module> from pkg_resources import load_entry_point ImportError: No module named pkg_resources
解决办法:
在Ubuntu 16.04中,执行apt-get install python-pip命令安装pip包(其他的GNU/Linux发行版是类似的)
相关链接
Is there a way to disable encryption? #762
参考文献
ShadowSocks Homepage
ShadowSocks Client
shoadowsocks Github Wiki
近期Shadowsocks屏蔽,更换SSR,以及BBR部署的一些经历
SS是不是又因为敏感因素瘫痪了?#2553