最简便的搭shadowsocks服务器的办法是用Docker,一行命令就可以运行一个随着系统自启动的容器,这基本上不需要操心软件运行的环境,依赖关系,配置文件等等。

这一行就是下面这个命令,其中大写字母的部分是可以更改的部分,最好把这一行命令存成.sh结尾的脚本文件,以免以后忘记:

docker run -d ‌‌–name SS1234 ‌‌-e PASSWORD=”YOURPASSWORD” ‌‌-e METHOD=”aes-256-cfb” ‌‌-p YOURPORT:8388 ‌‌-p YOURPORT:8388/udp ‌‌–restart unless-stopped ‌‌-d shadowsocks/shadowsocks-libev

这个脚本会从Docker Hub上获取最新的shadowsocks-libev映像,然后基于你给的参数,运行一个容器。shadowsocks-libev是一个用c语言编写的ShadowSocks程序。

当然,如果你还没有Docker的话,首先得安装Docker。这个方面的教程很多,去Docker网站上找一下就好。最省事的是用Docker的脚本:

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh

以管理员权限执行一个从网站下载的脚本,有点吓人,需要检查一下内容,不要 rm -rf /

 

运行ShadowSocks容器有些注意事项:

1. 首先,大写字母的端口不要和默认端口一样。默认端口8388太出名了,很容易被封,把YOURPORT换成一个其它的随机数字,要在1024~65535之间。这个端口会映射到容器内部的8388端口。

运行起来之后,从主机上,执行 telnet 127.0.0.1 YOURPORT 试试,如果连不上,就说明没有程序在侦听这个端口。如果连得上,就进入下一步。

2.  确认你的主机允许入站通讯,一般要看你的主机在哪里,大多数云服务器都在防火墙后面,如果你用了Azure之类的服务器,就把本机的入站YOURPORT这个端口打开,其它的值都不做限制。

打开防火墙之后,在你的客户端的电脑上,运行 telnet YOURHOST:YOURPORT ,跟上面一样,通了就说明是好的。

3.  配置你的ShadowShadowSocks客户端,ShadowSocks的官网上面列了各种客户端,还有一些其它的客户端没有列在上面,比如iPhone上的Wingy。

https://shadowsocks.org/en/download/clients.html

 

客户端配置的四个要素就是服务器地址,端口,密码和加密手段,这些要和服务器一致。

如果配置完之后不能科学上网,首先检查密码和加密手段,客户端和服务器的设置要一致,这里很容易出错。

其次,看看容器日志,如果你的容器有个固定的名字就很好,上面例子里,叫SS1234。如果你没给容器取名字,执行 docker ps -a 可以列出所有的容器,最后一栏就是自动生成的名字。执行:docker logs SS1234,可以查看容器里的执行日志,如果有什么身份验证之类的错误,就能看出来。

最后进命令行界面,如果你熟悉Unix/Linux的Shell,可以执行:docker exec -it SS1234 sh,进到容器的命令行界面,这里可以执行的命令就多了。

总之,如果不能自行解决就到这个项目的github上去问:

https://github.com/shadowsocks/shadowsocks-libev/issues

 

一个容器通常是无状态的,也就是说不做任何修改,不要在容器里存东西,容器的参数也不能改,如果要存什么数据,得放到容器之外。这样的话方便大规模的部署,如果有容器坏了,删掉它重新开就好。

所以,如果Docker Hub上这个映像有新版本了,你想要升级服务器的话,就停掉并删除现有的容器,执行: Docker Stop SS1234 (停止容器)和 Docker RM SS1234(删除容器),Docker RMI SS1234 (删除基础镜像文件)这三个命令,这样之后,服务器上就一点痕迹都没有了。再重新执行一遍最上面同样的命令就好,这会自动抓取最新版本的基础镜像文件,并且基于此文件来启动容器。

如果不幸你修改了容器,又想要保留里面的内容,比如你想改个密码,你需要 Docker Commit 这个容器,把它变成一个映像,接下来再执行Docker Run 命令,唯一的变化是,你需要指定你新的映像的位置,因为默认的映像是Docker Hub这个网站上的。

ray

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注