前言

首先,不建议大家在服务器上使用Windows系统。不是说Windows server不好,作为服务器常年不关机来说,Windows确实是逊Linux一筹,服务器配置越烂开机时间越长体现得越明显。

本人手上有个Windows服务器,阿里云的,配置是最基础的,当初搞活动便宜3年的价格,偶尔要挂个淘宝客户端,所以用了Windows server 2008系统。远程桌面操作的时候体验挺差的,尤其是启动了千牛客户端程序后CPU狂飙,然后就被阿里云限制CPU恶性循环,所以在服务器上装个Shadowsocks服务端,另开个本地机器使用代理用千牛。

准备工作

Windows系统下装Shadowsocks服务端没有Linux那么方便,可选的版本也就只有 原版Shadowsocks,python语言libQtShadowsocks版 ,他们都好久不更新了,这里介绍原版。
我们需要安装准备以下环境:

  1. python
    • 根据自己的系统下载对应位数版本,建议是python 2.7
    • 安装的时候注意勾选将其添加到环境变量,要不然一会儿还要手动将python加入系统环境变量中
  2. OpenSSL
    • 同样根据自己的系统下载对应版本,建议下载v1.0.2 light
    • 安装的时候选择将lib库文件安装到系统目录,这样就不用设置系统环境变量就能找到OpenSSL的动态库了
    • 最新版本释放的lib库文件加了后缀的,外部程序去用找不到,需要自己找到文件将文件名中的数字版本去掉
    • OpenSSL 需要 Visual C++ 2008 Redistributables 支持,如系统中未安装请到此下载并自行安装好相应的依赖。

以上两个依赖环境请自行安装好,没什么好说的,下载安装程序一步步安装就可以了。
需要注意的是,请下载版本的时候选择相同的位数版本,不能32位和64位程序混用。

配置系统环境变量

如果以上安装你没有勾选添加到系统环境变量,那么你需要按以下方法将其添加到系统环境变量,以便第三方程序能够自动找到相应的依赖程序。

  1. 我的电脑上右键》属性 ,左边导航格可见:高级系统设置,点进去
  2. 右下角可见个 环境变量 ,点进去,在 用户变量 或者 系统变量 中添加 path 都可以,建议在 系统变量 中添加
  3. 找到 path 这个变量,双击或者点 编辑 都可以,添加如:C:\Python27\;C:\Python27\Scripts;C:\OpenSSL-Win32\bin; ,和其他已有值用英文逗号区隔,请注意自己的实际路径

安装 Shadowsocks

以上环境安装准备完成后,就剩下安装Shadowsocks了,方法如下:

  1. 打开 cmd(Windows Server 2012 R2 系统可按 Windows 图标+X+A打开管理员权限的命令提示符)
  2. cd C:\Python27\Scripts 进入 Python 目录
  3. 输入 pip install shadowsocks 即可安装Shadowsocks服务端,看提示即可

修复bug

前面说了Windows下的服务端可选择的少,已有的版本也n年没人维护了,总会留下些bug无法使用。
刚才pip安装的Shadowsocks服务端启动入口程序在 cd C:\Python27\Scripts 目录下『怎么改其他目录我也不知道』,直接启动的话将提示类似这样的错误:

1
undefined symbol: EVP_CIPHER_CTX_cleanup

这是因为OpenSSL的函数变了,我们需要对Shadowsocks的源码进行更改,找到 python2.7/dist-packages/shadowsocks/crypto/openssl.py 这个文件,找到下面两个函数:

1
2
libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p,)
libcrypto.EVP_CIPHER_CTX_cleanup

可以使用查找替换的方法将其改成 EVP_CIPHER_CTX_reset

1
2
libcrypto.EVP_CIPHER_CTX_reset.argtypes = (c_void_p,)
libcrypto.EVP_CIPHER_CTX_reset

如果你想使用新奇的加密方式,那你可能会遇到更多的错误,其实是需要安装对应的扩展支持插件。没什么屌事就老老实实用默认的加解密方法吧,你的数据并不需要多安全的保护。

启动

需要用命令启动 Shadowsocks,格式如:

1
ssserver.exe -p 443 -k password -m aes-256-cfb

也可以建个配置文件,然后导入配置文件的形式启动,如配置文件为 C:\Python27\Scripts\config.json ,其内容如下:

1
2
3
4
5
6
7
8
9
10
{
"server":"0.0.0.0",
"server_port":443,
"local_address":"127.0.0.1",
"local_port":1080,
"password":"password",
"timeout":300,
"method":"aes-256-cfb",
"fast_open": false
}

然后通过以下命令启动:

1
ssserver.exe -c C:\Python27\Scripts\config.json

记得在防火墙将用到的端口开放入站访问。为了每次启动方便,我们可以建快捷方式或者弄个批处理放桌面上,或者放进系统启动项:

1
2
3
4
5
@ECHO OFF
CD C:\Python27\Scripts
rem ssserver.exe -c config.json
ssserver.exe -p 443 -k password -m aes-256-cfb
PAUSE

要停止Shadowsocks服务时关掉启动窗口即可。

参考文档

https://github.com/shadowsocks/shadowsocks/issues/646