3 月 29 2015
安装配置Shadowsocks Manyuser + SS-Panel
本文共被喵星人侦察过97,759次。。。写在前面:这个坑我挖了好几天了然而懒癌泛滥一直停留在标题阶段。。。
2015-07-06 update:新版ss-panel更新了一些地方,文章下面更新了。
前段时间响应王老板的号召,IEC的一些牛(xian)逼(de)哄(dan)哄(teng)的小伙伴们一起弄了一个清水寺论坛,做这个肯定不是为了自己弄着好玩儿,我们也想着把这个网站推出去,于是我们想着搞一些大新闻,就能增加知名度。然而其中某个环节就是让我来搞一个你懂得的服务来服务大众。一开始想着直接开个页面用户名密码公布出来大家想用就用,后来觉得这样太Low逼了,也显得不够专业。想起了在V2EX上看到过ss-panel这种东西,查了查资料感觉很简单,但是实际部署的时候遇到了坑。。。为了避免自己或者其它的人踩进坑里于是决定写点什么。。。于是就有了这篇文章。。。
SS-Panel是由Orvice写的一款配合ShadowsocksManyuser的前端程序。这货是用世界上最好的语言PHP写成的,所以你需要一个支持php的VPS。由于用了奇怪的新特性所以只支持PHP5.4以上的版本。当然为了存储用户数据还需要mysql的支持。
SS-Panel的安装很简单,下载这个ZIP包(由于作者现在在开发V3版本但是还没有完成,所以旧的链接下载的未完成版本不能使用现有的配置方法,请下载SS-Panel V2使用。)然后解压放到Web目录(绑定个域名或者子目录啥的都行,最好是https的,原因不解释),建立一个数据库和一个用户,赋予权限之后,打开解压的目录,将lib/config-simple.php改名成config.php然后修改下配置。必须改的配置是数据库用户、数据库密码、数据库名和本站URL,其他的站点名称之类的看心情修改。签到数值神马的直接参考配置文件中的注释就可以。然后将sql目录中的所有sql文件都导入配置文件中指定的数据库。没有问题的话这个SS-Panel就搭建好可以访问了。管理地址是<URL>/admin 默认的用户名、密码是admin 12345678 不知道是作者犯懒还是别的神马原因,admin用户的用户名密码想要修改只能去改数据库。。。不过也不是很麻烦啦。具体方法文章后面再介绍。
前端搭建好了,木有后端支持神马都是白搭。后端搭建的方法略微繁琐但是其实也是很简单的。首先需要安装一些依赖。我用的CentOS,于是直接
yum -y install python-pip m2crypto pip install cymysql
就可以啦。然后找个目录把ShadowSocks Manyuser下载下来
git clone -b manyuser https://github.com/mengskysama/shadowsocks.git
之后进入目录shadowsocks/shadowsocks里面,修改Config.py,指定数据库用户、密码、数据库之后就可以咯~运行
python server.py
后端程序就跑起来了~但是这里是坑了我的第一个地方。一开始的时候按照网上的办法给SS-Panel和ShadowSocksManyuser各自建立了一个数据库和一个用户,然后都装好后发现SS-Panel的配置中对于后端的配置只有名称、地址等几项,并没有配置管理地址、密码什么的的地方,让我百思不得其解,后来在V2EX上的某个帖子上发现:这俩货应该用同一个数据库!想想也是,SS-Panel本来就是一个前端的壳子而已,用同一个数据库也是应该的。。。研究了一下发现ShadowSocksManyuser对于用户的端口密码的控制是在user这个表中的,而SS-Panel的user这个表和SSManyuser的结构基本上是一样的。所以配置好SS-Panel之后配置ShadowSocks Manyuser的时候只需要填写SS-Panel的数据库用户密码神马的就搞定了。
第二个坑在于,我配置完SS-Panel和manyuser之后发现,这货注册新用户之后分配的端口是从5开始。。。5 10 15巴拉巴拉。。。当时我就震惊了,这么不人性化的设计,这样迟早会吧80神马的端口都分出去,迟早出问题。。。于是就找SS-Panel或者ShadowSocksManyuser怎么修改分配的端口范围,后来发现问题出在我自己这里,SS-Panel默认的数据库中带有一个用户,这个用户默认的端口是50000,之后新建的用户都会以第一个用户为基准端口号递增。我第一次装完后直接删掉了测试用户,所以端口号就是从0开始递增得了。手动修改数据库或者重新导入数据库,总之吧uid最低的用户的端口设置成为50000或者其他的,之后的用户端口就会依次递增啦。当然这个用户密码还是建议修改一下~
第三个不能算坑的坑,这货admin的用户名密码要手动修改数据库。。。还好数据库中的密码只是简单的MD5了一次而已。所以直接戳开数据库,打开ss_admin表直接诶修改里面的admin_name email和pass就可以了。pass是明文密码一次MD5得到的,很容易算出来。
150706 update: 新版的SS-Panel数据库中不再单独存储Admin用户名和密码,而是和user共用一套用户名和密码。admin这个表中只存了user中作为管理员的user_id,所以想要添加管理员的话就去数据库中增加对应的user_id就可以了。默认ID为1的用户是管理员。
还有一个坑就是如果想用supervisor之类的守护程序来保证ShadowSocksManyuser后端的稳定运行的话,在配置文件的command里面不能只写 python /server.py 我一开始就是这么写的,然后发现后端总是连接不上,看了一下Supervisor的日志发现这货直接error然后退出了。。。仔细看了看wiki之后发现command里面要加一个参数才行。。。所以command一行应该变成类似这样
command = python <PATH>/server.py -c <PATH>/config.json
这样就可以愉快的用Supervisor保证后端持续运行了。config.json里面带一个用户名密码端口,然而不用管它,这个密码和端口连接不上的。如果你要是觉得不保险的话可以把这个也改掉。
有人可能会问,想要配置多节点怎么办?很容易。。。只要mysql里面允许数据库的用户远程登录(建议用一个单独的用户,给比较少的权限),然后然后再配置后端的时候数据库地址填写前端SS-Panel所在的服务器的地址,然后数据库用户名密码什么的和之前的一样就可以了。然后再去SS-Panel配置里面加上这个新节点的名称和地址就可以了。ShadowSocksManyuser会自动去远程数据库中读取用户的端口密码等值。对于同一个用户来说,在所有节点的端口和密码都是相同的。
150706 update: 最新版的ss-panel有一些奇怪的问题,在开发者修复之前可以参考 issue 里面ilazycat和 604542720 提出的几个issue来手动解决一下。以下是链接 1 2 3
12 月 15 2016
配置阿里云ECS支持IPv6
本文共被喵星人侦察过39,792次。。。前几天有个小伙伴的 iOS App 提交给水果审核没通过,水果给出的原因是应用在 IPv6 的环境下无法使用。原来小伙伴用的服务器是阿里云的 ECS ,而这玩意并不支持 IPv6 。。。这里就不得不吐槽一下阿里云这么大的云服务厂商,马上都要2017年了还不支持 IPv6 ,然而考虑一下 IPv6 在中国确实发展的并不怎么样。还好,我们可以用 Hurricane Electric 提供的 IPv6 Tunnel Broker 来让 ECS 支持 IPv6 。本文就以 Ubuntu 为例,来介绍一下具体的操作方法, CentOS 等操作系统都差不多,稍作修改也可以用。
首先,到 https://www.tunnelbroker.net/ 注册一个账户,然后登陆,戳 Create Regular Tunnel 。IPv4 Endpoint (Your side) 这里填你 ECS 的公网 IP 地址, Available Tunnel Servers 这里选一个,一般来说 HK 离大陆近延迟低,不过最近 HE.net 的香港似乎都是绕了一圈美国回来的,所以延迟反而很高,这个看自己情况选就好。然后戳 Create Tunnel ,就完成了。
接下来修改 ECS 里面的系统配置,由于阿里云的网络不支持 IPv6 所以他官方镜像里面相关的设置都是被禁用了的,想要使用 IPv6 就要做一些修改。首先修改 /etc/sysctl.conf ,把下面三项设置都改为0
然后编辑 /etc/network/interfaces ,在下面添加 IPv6 Tunnel的相关信息
其中里面<IPv6> 需要你自己替换成你刚刚申请的 Tunnel 的 Server IPv6 Address,但不包括最后的::1/64。
确定配置没问题之后就可以重启服务器了,重启之后看看 he-ipv6 接口有没有被启用,如果没有的话手动执行 ifup he-ipv6 启用相关接口,然后你就应该可以使用 Tunnel 里面显示的 Server IPv6 Address 来访问你的阿里云 ECS了。
这里有个坑,local 这里一开始我写的是阿里云外网的 IP 地址,然后发现启用了 Tunnel 之后无论是从外面访问阿里云还是阿里云本身访问 IPv6 都无效,在阿里云上 ping6 ipv6.google.com 的时候提示 no route to host,然后又仔细看了一下 HE.net tunnel broker 里面的描述发现了这样一句话:
所以 local 那里应该填的是 ECS 内网的 IP 地址,而不是公网的 IP 地址。。。
By Lazy Cat • 教程, 闲谈 38 • Tags: IPv6, Ubuntu, 阿里云