最简便的搭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这个网站上的。