PHP Laravel NGINX html css Bootstrap Python Symfony Apache Windows linux jquery Django ASP vanilla Slim vagrant docker Homestead MySQL Redis Git SVN ssh Root vim PhpStorm Pycharm sass less PHP Laravel android html css Vue Angular React NGINX html css Javascript

阿里云服务器搭建Shadowsocks Server及使用SwitchyOmega切换代理设置实战教程

原创

原创不易 ~ 转载请注明出处哦

严正声明:本文旨在讲解云服务器下如何搭建Shadowsocks VPN Server,以技术交流为目的,请勿以任何方式转载或非法谋取利益!

在去年写过一篇名为使用Amazon EC2及OpenVPN搭建属于自己的VPN服务器的教程,收到了非常多朋友的正面反馈。但是由于今年度OpenVPN搭建的服务器连接并不够稳定,有时会出现连接困难,于是我测试了一下Shadowsocks

还是不多说,先放出几张图给大家看看效果:

https://blog.sbot.io - youtube
https://blog.sbot.io - Facebook
https://blog.sbot.io - twitter
https://blog.sbot.io - Google

我的服务器使用的是阿里云香港机房服务器,系统Ubuntu 16.04 LTS,实际测试连接速度很快,延迟很低,目前表现比我的Lantern Pro稳定和快速。如果你通过我的教程成功上网,可以留言给我个正面的反馈,或者你对教程步骤的建议等以供更多朋友参考!:)

好了,那么我们先来说一下需要准备的工具及环境:

  • 阿里云香港或国外地区云服务器一台,镜像选择Ubuntu 16.04 LTS(当然你选CentOS也没有问题,不过我会以Ubuntu为例进行讲解)。

  • SSH工具
    Windows下可以使用阿里云后台远程连接或者使用Git Bash(下载地址 https://github.com/git-for-windows/git/releases/tag/v2.18.0.windows.1
    macOS可以打开终端(Terminal)进行操作
    Linux用户直接在Terminal命令窗口里进行操作

  • ShadowSocks客户端(地址将在后文中以百度网盘的形式给出,如果在Github上可以下载,将直接给出Github链接)

如果你还没有云服务器并且打算购买,那么请在下面的地址领取代金券,然后参考我的另一篇教程:

手把手教你购买、配置、远程连接属于自己的云服务器以及架设简单的个人网站

【阿里云通用代金券领取】

服务器不需要很高的配置,单核0.5G内存或者1G内存就够了(只跑shadowsocks的话0.5G足矣)。香港机房会比内地机房稍稍贵一点,不过总体一年大概也就几百块钱,并不贵。在阿里云官网,选择云服务器ECS点击购买进行参数配置就可以了,唯一需要注意的就是机房选香港或者国外(已测试内地机房不可用,推荐使用香港服务器)

接下来我们列出需要做的几个步骤:

  1. 卸载阿里云盾(安骑士)服务
  2. 在服务器下载并安装Shadowsocks
  3. 配置Shadowsocks(连接参数)并设置安全组规则
  4. 创建系统服务让Shadowsocks自动启动并以service身份在后台持续运行
  5. 下载客户端及设置连接信息
  6. 使用Chrome下载SwitchyOmega并设置Proxy参数档案

在开始前最后说一点:本文技术性将比配置OpenVPN更强,我会尽量详尽地描述每一步的步骤,但是个人推荐你必须具备一定的Linux知识及云服务器操作知识,如果你不知道如何ssh或者连接上你的云服务器,那么这个教程对你来说可能难度比较高。如果你完全按照我写的步骤进行操作,那么你应该也可以完成shadowsocks的配置。


好了,那么我们开始。首先我们ssh进入我们的云服务器:

$ ssh root@my-server-public-address

注意请使用你的云服务器公共ip替换上面的my-server-public-address


1. 卸载阿里云盾(安骑士)服务

由于阿里会检测服务器是否存在ss,如果保留安骑士,阿里云会给你发邮件警告。
如果你是首次购买服务器,请在购买时直接反选安骑士服务。

如果已经安装了安骑士,那么我们需要使用以下命令移除:

$ wget http://update.aegis.aliyun.com/download/uninstall.sh
$ chmod +x uninstall.sh
$ ./uninstall.sh
Stopping aegis                                                           [  OK  ]
umount: /usr/local/aegis/aegis_debug: mountpoint not found
Uninstalling aegis                                                       [  OK  ]

$ wget http://update.aegis.aliyun.com/download/quartz_uninstall.sh
$ chmod +x quartz_uninstall.sh
$ ./quartz_uninstall.sh
Stopping aegis                                                           [  OK  ]
Stopping quartz                                                          [  OK  ]
Uninstalling aegis_quartz                                                [  OK  ]

$ pkill aliyun-service
$ rm -rf /etc/init.d/agentwatch /usr/sbin/aliyun-service /usr/local/aegis*
$ rm uninstall.sh
$ rm quartz_uninstall.sh

2. 在服务器下载并安装Shadowsocks

首先我们访问shadowsocks-libevGithub上的官方地址:

https://github.com/shadowsocks/shadowsocks-libev#linux

可以看到,上面有关于所支持系统的安装文档。

如果你的服务器系统为Ubuntu 16.10及以上,那么可以直接使用以下命令安装Shadowsocks-libev

$ sudo apt update
$ sudo apt install shadowsocks-libev

由于目前阿里云服务器Ubuntu版本最高为16.04,所以我们需要添加一个ppa来安装:

$ sudo apt-get install software-properties-common -y
$ sudo add-apt-repository ppa:max-c-lv/shadowsocks-libev -y
$ sudo apt-get update
$ sudo apt install shadowsocks-libev

完成后,我们就安装好了shadowsocks-libev


3. 配置Shadowsocks(连接参数)

shadowsocks-libev有以下几个命令可以使用:

ss-[local|redir|server|tunnel|manager]

那么我们在服务端会讲解ss-server以及ss-manager的使用。
前者用于配置单个端口连接,后者可以配置多个端口及用户连接。

那么我们先来看一下ss-server的设置。首先我们打开/etc/shadowsocks-libev/config.json这个文件(没有的话我们创建一个):

$ vim /etc/shadowsocks-libev/config.json

在这个文件中,我们填入以下信息:

{
    "server": "0.0.0.0",
    "server_port": 5678,
    "local_port":1080,
    "password": "MySecret",
    "timeout":60,
    "method":"chacha20-ietf-poly1305"
}

这里有几个地方需要着重强调一下。
首先server一定要填0.0.0.0,而不是填你的服务器公共ip
server_port可以填我们想使用的端口号,这里我用了5678
method指的是加密方式,推荐使用chacha20-ietf-poly1305aes-256-gcm

这样一来,我们对ss-server的配置就完成了。为了尽可能给大家减少混淆,ss-manager配置我会放在后文中进行说明。

现在我们来尝试运行一下:

$ ss-server -c /etc/shadowsocks-libev/config.json

 2018-08-20 10:08:40 INFO: initializing ciphers... chacha20-ietf-poly1305
 2018-08-20 10:08:40 INFO: tcp server listening at 0.0.0.0:5678
 2018-08-20 10:08:40 INFO: running from root user

如果看到这样的信息,说明运行成功。如果你发现bind() error等类似的错误提示信息,那么请检查你的配置文件。

接下来,我们需要修改服务器的安全组配置。在阿里云后台,我们在服务器的安全组配置中,新建以下几条规则:
https://blog.sbot.io - aliyun-security-rules

同理,我们需要创建一条TCP规则,端口号也填入5678


4. 创建系统服务让Shadowsocks自动启动并以service身份在后台持续运行

现在我们安装完了ss,并且也配置好了ss-server,现在我们来看一下如何创建系统服务让shadowsocks服务器一直运行在后台。

当然最简单粗暴的方法可以用screen这个程序。

$ sudo apt-get install -y screen

安装完成后,我们运行screen

$ screen

Screen version 4.03.01 (GNU) 28-Jun-15
[...]
Capabilities:
+copy +remote-detach +power-detach +multi-attach +multi-user +font +color-256 +utf8 +rxvt +builtin-telnet

                               [Press Space or Return to end.]

回车后,我们运行ss-server

$ ss-server -c /etc/shadowsocks-libev/config.json

接下来,我们按下ctrl + A,然后按D键,这样ss-server就会在后台运行,哪怕我们退出服务器。
要想停止ss-server,我们可以先查看screenid

$ screen -ls
There is a screen on:
	18529.pts-0.iZj6c5pz734d3dibf225oiZ	(08/20/2018 10:11:13 AM)	(Detached)
1 Socket in /var/run/screen/S-root.

可以看到,有一个sceen正在运行,要回到该screen,我们可以使用以下命令:

$ screen -r 18529

注意,18529是上面我们看到的screenpid
回到screen后,我们ctrl + C停止ss-server即可。接着我们输exit退出。

好了,如果我们不想用screen呢,那么我们可以创建一个systemd服务来控制ss-server的启动和停止。

实际上,我们不需要自己创建这个系统服务,因为shadowsocks-libev已经帮我们创建好了,我们只需要使用systemctl命令就可以启动这个服务:

$ sudo systemctl enable shadowsocks-libev.service  
Synchronizing state of shadowsocks-libev.service with SysV init with /lib/systemd/systemd-sysv-install...  
Executing /lib/systemd/systemd-sysv-install enable shadowsocks-libev

$ sudo systemctl start shadowsocks-libev

运行上述命令后,我们查看一下服务是否运行成功:

$ sudo systemctl status shadowsocks-libev

● shadowsocks-libev.service - Shadowsocks-libev Default Server Service
   Loaded: loaded (/lib/systemd/system/shadowsocks-libev.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2018-08-20 10:21:52 CST; 5s ago
     Docs: man:shadowsocks-libev(8)
 Main PID: 18586 (ss-server)
   CGroup: /system.slice/shadowsocks-libev.service
           └─18586 /usr/bin/ss-server -c /etc/shadowsocks-libev/config.json -u

Aug 20 10:21:52 iZj6c5pz734d3dibf225oiZ systemd[1]: Stopped Shadowsocks-libev Default Server Service.
Aug 20 10:21:52 iZj6c5pz734d3dibf225oiZ systemd[1]: Started Shadowsocks-libev Default Server Service.
Aug 20 10:21:52 iZj6c5pz734d3dibf225oiZ ss-server[18586]:  2018-08-20 10:21:52 INFO: UDP relay enabled
Aug 20 10:21:52 iZj6c5pz734d3dibf225oiZ ss-server[18586]:  2018-08-20 10:21:52 INFO: initializing ciphers... chacha20-ietf-poly1305
Aug 20 10:21:52 iZj6c5pz734d3dibf225oiZ ss-server[18586]:  2018-08-20 10:21:52 INFO: tcp server listening at 0.0.0.0:5678
Aug 20 10:21:52 iZj6c5pz734d3dibf225oiZ ss-server[18586]:  2018-08-20 10:21:52 INFO: udp server listening at 0.0.0.0:5678

可以看到,服务运行成功了。在18586 /usr/bin/ss-server -c /etc/shadowsocks-libev/config.json -u一行,我们看到ss-server默认将使用/etc/shadowsocks-libev/config.json这个配置文件,并且-u表示我们想要开启UDP Relay


5. 下载客户端及设置连接信息

好了,我们的服务端配置在上一步就已经完成了,现在我们需要在本地下载客户端进行连接。

根据你的系统,我会给出不同的链接,连接配置都很相似,我主要讲解Linux系统下的配置,WindowsmacOS下的注意事项我会列出来,其他系统都是一样适用的。

Windows系统用户请前往以下github发布页面找到.zip后缀的文件进行下载:

https://github.com/shadowsocks/shadowsocks-windows/releases

https://blog.sbot.io - shadowsocks_windows

下载完成我们打开程序,并在服务器配置中,填入我们在配置服务器config.json时使用的信息。
shadowsocks-windows-config.png

完成之后点击OK。接下来我们退出程序,会发现在程序所在的文件夹下多出了一个名为gui-config.json的文件,我们用记事本打开它,找到其中一段json配置:

{
  "proxy": {
    "useProxy": true,
    "proxyType": 0,
    "proxyServer": "127.0.0.1",
    "proxyPort": 1080,
    "proxyTimeout": 5
  }
}

注意到,这里useProxy的值为true, 我们需要将其改为false。完成后,保存这个文件。然后我们就可以按照步骤5下载安装Proxy SwitchyOmega了。

有几个地方需要注意:

  • 若程序在C盘,请以系统管理员身份运行shadowsocks以免发生权限错误。
  • 如果程序出现问题请尝试安装最新的.NET Frameworkhttps://www.microsoft.com/net/download

Mac用户请前往以下地址下载:

https://github.com/shadowsocks/ShadowsocksX-NG/releases

https://blog.sbot.io - shadowsocks_mac

下载完成解压得到.app后缀的程序文件,将其放入应用程序文件夹打开即可。注意打开后不会直接有UI界面弹出来,你需要看电脑右上角多出一个小飞机图标,点击进行服务器信息设置(具体设置请参考后文Linux配置步骤),然后点击PAC自动模式就可以上网了。


Android用户请前往以下地址下载apk安装包:

https://github.com/shadowsocks/shadowsocks-android/releases


ios用户注意了,你需要美区(或国外)App Store账户才能操作。已测试可用,有需要的请单独联系我。


Linux用户请前往以下地址查看版本要求:

https://github.com/shadowsocks/shadowsocks-qt5/wiki/Installation

可以看到,如果你的Linux版本为64位以上且比Debian Wheezy新,那么可以下载AppImage形式的客户端:

https://github.com/shadowsocks/shadowsocks-qt5/releases

https://blog.sbot.io - shadowsocks_linux

下载完成后,我们需要将客户端的权限修改成可运行:

$ chmod a+x Shadowsocks-Qt5-x86_64.AppImage

然后我们输入以下命令运行客户端(其他系统用户只需要下载安装点击客户端即可运行):

$ ./Shadowsocks-Qt5-x86_64.AppImage

https://blog.sbot.io - shadowsocks_client_linux

可以看到,界面非常的简单,我们在Connection菜单栏中,点击add - manually,然后会弹出一个要我们输入服务器信息的窗口:

https://blog.sbot.io - shadowsocks_client_linux_profile.jpg

这里我们按照在服务器上config.json文件配置的内容填写,Server Port填入我们开放的端口号(这里为5678),Password填入我们的密码,但是注意在Server Address一栏填入我们服务器的公共ip。其他信息按照上面图片中的填写即可。

点击OK,然后在客户端中会显示出我们的连接信息。右键单击,选择connect,然后在StatusLatency中,查看是否连接成功。如果Latency中显示类似30ms这样的延迟信息,说明连接已经成功。


6. 使用Chrome下载SwitchyOmega并设置Proxy参数档案

手机端用户做完第四步就已经可以上网了,Android客户端点击小飞机后查看底下的连接状态。

PC端用户会发现,这个时候打开浏览器,依然无法上网。这是由于我们设置了SOCKS5代理,而系统默认未使用代理协议。

那么解决办法很简单,以Chrome为例,我们需要安装一款可以快速切换proxy设置。

我们前往以下地址:

https://github.com/FelisCatus/SwitchyOmega/releases

找到SwitchyOmega_Chromium.crx这个文件进行下载。完成后点击插件进行安装。

注意:在Windows下,需要在chrome地址栏输入chrome://extensions/,在右上角将Developer mode(开发者模式)打开才能安装插件。

完成后,在chrome插件中,找到SwitchyOmega的设置,在左下方点击New profile...新建一个名为shadowsocks的档案,右照下图中的设置填入SOCKS5代理设置:

proxy_switchyomega.png

完成后保存。以后我们在上网的时候,单击Chrome右上方Proxy SwitchyOmega的小圆按钮,点击shadowsocks这个profile即可。不使用的时候,我们点击[Direct]取消代理设置。

proxy-switchyomega.png

好了,这样一来我们就顺利完成了shadowsocks-libev的配置并且使用本地客户端进行了连接。


前面我承诺要讲解ss-manager,那么我会单独在另一篇文章中讲解如何进行多端口的配置。请大家耐心等待。


正在加载验证码......
请先完成验证
2019-05-16 14:58:09 1564297204@qq.com
博主,我想问一下,我按照教程服务器上都配置好了,显示运行,不过现在手机和电脑都连不上不知道啥原因啊,我看了pc端的日志一直提示time out超时,服务器是香港的,安全组5678的tcp和udp都开放了
2019-05-22 17:28:40 eagle.luo@foxmail.com 回复 1564297204@qq.com
检查一下所有步骤,配置文件是否正常,另外如果你一切都正常,尝试配置里把常用的端口换一下
2019-05-06 00:42:34 1905066166@qq.com
感谢博主的无私分享!!
我纯正小白一枚,跟着博主走到第三步 配置参数那儿就走不动了~~
打开/etc/shadowsocks-libev/config.json这个文件(没有的话我们创建一个)
运行 $ vim /etc/shadowsocks-libev/config.json
命令提示找不到 config.json 文件,
这个文件实在没有,怎么创建啊~~
2019-05-07 00:23:10 1905066166@qq.com 回复 1905066166@qq.com
问题解决了,shadowsocks根据文章测试都能正常运行,手机/PC都装了,但就是连接不上~~~
2019-05-07 08:46:19 eagle.luo@foxmail.com 回复 1905066166@qq.com
服务器请确定非国内机房服务器,可以是香港服务器。另外安全组端口放行请确认操作完成。
2019-04-28 13:34:54 foolseward@163.com
> 2019-04-28 13:28:39 ERROR: block all requests from 223.100.28.213
楼主遇到过这个情况吗
2019-04-28 13:37:53 foolseward@163.com 回复 foolseward@163.com
> 2019-04-28 13:28:39 ERROR: block all requests from 223.100.28.213
博主遇到过这个情况吗
223.100.28.213是我电脑的ip地址,设置代理以后,什么网站都打不开
2019-05-07 08:47:17 eagle.luo@foxmail.com 回复 foolseward@163.com
你的错误提示是哪里出现的?