person

为避免重复制造轮子而写下这篇文章,一来总结,二来备忘。文章的前提是已经搭建好服务端,我所使用的环境如下:

  • 服务器:Bandwagon + Shadowsocks
  • 本地系统:Ubuntu 18.04 最小化安装

shadowsocks-ubuntu.png

一、安装客户端

Linux下有不同的 Shadowsocks 客户端,我要安装的是 Shadowsocks 2.8 。

#更新系统和源
sudo apt update
sudo apt upgrade

#安装 pip
sudo apt install python-pip

#安装 Shadowsocks
sudo pip install shadowsocks

二、创建配置文件

为了让客户端连接上服务器,服务器信息要写入到配置文件中。

#将文件保存在用户目录下
cd ~/username/shadowsocks

#创建文件
vim shadowsocks.json

文件内容须根据服务器信息填写:

{
  "server":"my_server_ip",            # 服务器IP 
  "local_address": "127.0.0.1",       # 本地IP,无需修改
  "local_port":1080,                  # 本地端口,无需修改
  "server_port":my_server_port,       # 服务器 Shadowsocks 端口
  "password":"my_password",           # 服务器 Shadowsocks 连接密码
  "timeout":300,                      # 超时时间,无需修改
  "method":"aes-256-cfb"              # 服务器 Shadowsocks 加密类型
}

三、连接服务器

Shadowsocks 的程序名称为 sslocal,连接服务器方法如下:

sslocal -c 配置文件路径

连接成功后终端开始输出连接详情,关闭该终端则会导致连接中断。

连接时可能产生 undefined symbol 错误,这是由于 openssl 1.1.0 中废弃了 EVP_CIPHER_CTX_cleanup() 函数而引入了 EVE_CIPHER_CTX_reset() 函数所导致。

解决方案(原文:解决openssl升级到1.1.0后shadowsocks服务报错问题):

#用vi打开文件
vi /usr/lib/python2.7/site-packages/shadowsocks/crypto/openssl.py

#跳转到52行(shadowsocks2.8.2版本,其他版本搜索一下cleanup)

#进入编辑模式

#将第52行:
    libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p,)
#改为:
    libcrypto.EVP_CIPHER_CTX_reset.argtypes = (c_void_p,)

#再次搜索cleanup(全文件共2处,此处位于111行),将:
    libcrypto.EVP_CIPHER_CTX_cleanup(self._ctx)
#改为:
    libcrypto.EVP_CIPHER_CTX_reset(self._ctx)

#保存并退出

#启动shadowsocks服务
service shadowsocks start

四、设置代理

依次点击 设置 - 网络 - 网络代理,选择 手动,在 socks主机 中填写 127.0.0.1,端口填写 1080

这样操作后所有流量都通过代理服务器,包括访问国内资源的流量,使用 PAC 可以实现自动分流。

1、Chrome/Firefox 代理插件

如果使用 Shadowsocks 的主要场景是浏览器,那么使用浏览器插件是最快捷有效的方法。推荐使用插件 SwitchyOmega

插件安装之后打开设置页面,在左侧情景模式下选择 proxy,在右侧输入以下信息:

代理协议:SOCKS5
代理服务器:127.0.0.1
代理端口:1080

点击 应用选项 保存修改。

选择情景模式 auto switch,将预设的两条规则删除,点击下方 添加规则列表,规则列表格式选择 AutoProxy,规则列表网址填入:

https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt

点击 立即更新情景模式,插件自动下载规则。点击左侧 应用选项 保存修改。

浏览网页时选择 auto switch 模式即可自动分流。

2、Ubuntu 全局代理

本地程序如需分流,需要创建 PAC 文件供 Ubuntu 使用。目前网络上能够找到的方法主要是使用 genpac 软件生成 PAC 文件,但是根据教程操作多次未能成功,暂且放一边,日后有时间再尝试。

五、开机启动

未开启 Shadowsocks 而系统设置了代理时网络将无法使用,但是每次开机都要切换到目录中去运行服务又很繁琐,最便捷的方法是让开启服务的命令在开机时自动运行。

网上流行的操作是在 /etc/systemd/system 目录下新建 shadowsocks.service 文件来创建服务,在 Ubuntu 18.04 下却无法成功,最后找到另一个方法(原文:Ubuntu配置ss+pac开机自动启动实现正常上网):

#新建一个启动 Shadowsocks 的脚本
vim /home/username/shadowsocks/autostart.sh

#写入命令
sslocal -c /home/username/shadowsocks/shadowsocks.json -d start

#新建服务文件
sudo vim /lib/systemd/system/shadowsocks.service

#写入规则 
[Unit]
Description=Shadowsocks Service
After=network.target
[Service]
Type=forking
ExecStart=/home/dexter/startSS.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target

#使服务生效
sudo systemctl enable shadowsocks

#启动服务
sudo systemctl start shadowsocks

这样操作过后开机就能够自动连接上 Shadowsocks ,因为是后台运行,也不用考虑开启终端保持连接的问题。

相关文章

新评论