失落的方舟(Lost ARK)11月8日韩国公测,暂时不对韩国以外地区提供服务,甚至需要绑定韩国18周岁以上身份证才能试玩。我有同学他们很期待这个作品,500元一个账号购买了9个,配合韩国IP代理从而进行抢先体验。
由于市场上的加速器都是多人共用一台服务器,经常因为共用同一个IP导致被封号。而同学的账号500软妹币一个,被封号了那得多心疼。之前我为了科研的需要搭建过VPN,所以同学让我试着帮忙给搞一个私人的代理服务器。
韩国网络很发达,可是比起日本美国服务器还是相当昂贵的。VPS是买的KDATACENTER家的,价格不是最实惠但是看网上的帖子都说他家是最稳定的。游戏代理不要求高速,稳定性才是第一。所以狠了狠心19刀一个月买下我迄今用的最贵的服务器。
这个前后端以及Web监控游戏加速器搭建过程记录我不打算写特别的仔细,因为里边牵扯的东西太多了,我只记录下来关键点,所以这篇博文更多的意义是给自己的一个搭建记录备份。
开始我打算用PPTP VPN来实现代理,因为我弄过多次轻车熟路,可是国内人反应每隔一段时间会被游戏检测到区域不对,然后被强制退出了游戏。他们让我试试搭建个SSR看看效果怎样,我猜测是游戏客户端通过IP以外的形式检测玩家的真实地理位置,开始我并没有报很大希望。可我实际搭建好测试时候发现效果出奇的好,游戏挂机一天也不再弹出任何出错信息。这是我第一次尝试搭建SSR,配合SSTap来实现游戏加速,所以计划记录一下这个过程,这样之后在此需要搭建加速器时候不需要再去查网上的资料了。
加速器是用的shadowsocks方案。官方的代码仓库由于不可控原因被清空了,现在网上的代码都是之前的备份或者是第三方维护的版本。SSR也是同样的命运。SS服务器端有Shadowsocks-Python, ShadowsocksR, Shadowsocks-Go, Shadowsocks-libev四个版本。用不同的语言来实现相同的功能,他们各有优略,一般常用的是Python和libev版本。通常来讲libev更省资源,而Python版本主打多用户。
开始我使用的是网络上的一键安装命令,确实挺好用的。我用的是 https://segmentfault.com/a/1190000015243145 帖子中的SSR方案。如果作为单用户,这个教程很适合的,我一次安装成功。其中大约需要两三小时编译一些包。我猜测这个版本用的是libev版本的代码。简单稳定,适合服务器就自己一个人用。其中账号可以多终端登陆,从另一个帖子我记得看到过是允许64台设备,没有求证这个数据得真假,可是我自己测试五六个终端同时登陆是没问题的。
由于有好几个同学,最好是给他们分配不同的账号,并且记录各自流量信息。所以刚才那个版本不再适用。
后来了解到有一个ss-panel的项目,可以和Python版本配合从而实现网页端管理加速器用户信息。这个项目有v2和v3 两个版本,其中v3超级强大,有在线支付功能,也就是说可以特别迅速搭建一个商业SSR节点的销售网站。可是我看了很多教程搭建过程就相比v2繁琐了很多,我用不到那些花里胡哨的功能,所以后来我选择了v2版本,通过这个教程搭建成功: https://teddysun.com/486.html/comment-page-1
系统开始选用的是Ubuntu 16.04 LTS,没有用文中一键安装lamp,而是选择了手动装Apahce和MySQL,其中安装数据库时候没有让我输入默认密码,和之前的经验不太一样,所以改root的密码耽误了我一些时间。同时默认MySQL只能本机连接,想要外网连接需要在配置文件/etc/mysql/my.cnf中注释掉 bind-address 127.0.0.1 这一行然后重启MySQL。
当phpmyadmin能成功运行后,新建一个shadowsocks的用户并建立同名数据库以及赋予全部权限。这个数据库用来存SSR账户信息。
ss-panel项目地址:ss-panel 我们用的是v2版本。
本机以及服务器都下载一份,然后本机找到sql文件夹中的5个数据表,通过phpmyadmin导入到数据库中。并且将lib/config-sample.php 改名为config.php 并将里边的内容修改如下:
1 2 3 4 5 6 7 8 9 10 11 | //定义流量 $tokb = 1024; $tomb = 1024*1024; $togb = $tomb*1024; //Define DB Connection 数据库信息 define('DB_HOST','localhost'); //数据库的地址,本机的话是localhost,远程的话是对应地址 define('DB_USER','shadowsocks'); //数据库用户名 define('DB_PWD','shadowsocks'); //数据库密码 define('DB_DBNAME','shadowsocks'); //数据库名 define('DB_CHARSET','utf8'); define('DB_TYPE','mysql'); |
刚才那些表的意义可以从这里了解到: https://doub.io/ss-jc15/
还有一些设置根据需求修改,其中有很多有意思的配置。之后就可以登陆ss-panel后台了: ip/admin 默认账户是 默认密码是1993 看帖子V3版本由于加密方式不一样,密码可能不是这个。
这样前端就弄好了,根据那个帖子安装的后端也是很顺利,可是之后发现通过SSTap连接的时候UDP转发不能通过。网上查很多资料都说Python版本是默认支持UDP转发的,我的不成功很有可能是这个镜像并不是最终版本的代码。
在一个帖子中找到了一个相对新一些的版本解决了这个问题: https://github.com/ToyoDAdoubi/shadowsocksr (前几天还正常,就这一两天这个库就被删了?? https://github.com/WooSoftware/shadowsocksr-origin)
克隆后会有shadowsocksr目录,其中根目录的是多用户版(即数据库版),子目录中的是单用户版。根据Github上边的介绍,执行一些初始化命令:
1 2 3 4 5 6 | cd shadowsocksr # 进入ShadowsocksR根目录 bash setup_cymysql.sh # 安装Cymysql 依赖 //我用的远程MySQL数据库,我应该用不到这个命令 bash initcfg.sh # 初始化ShadowsocksR服务端 |
之后修改配置文件: vim usermysql.json
1 2 3 4 5 6 7 8 9 10 11 12 13 | { "host": "xxx.xxx.xxx.xxx", "port": 3306, "user": "shadowsocks", "password": "shadowsocks", "db": "shadowsocks", "node_id": 0, "transfer_mul": 1.0, "ssl_enable": 0, "ssl_ca": "", "ssl_cert": "", "ssl_key": "" } |
如果像我一样是个远程的数据库,那么这个账户需要是可以远程连接权限的。接下来配置加密方式,协议,混淆相关的信息: vim user-config.json 下边是我的设置,相对很基础,可以说没有用到SSR高级混淆特性,基本上就是SS的基础加密功能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | { "server": "0.0.0.0", "server_ipv6": "::", "server_port": 8388, "local_address": "127.0.0.1", "local_port": 1080, "password": "m", "method": "aes-256-cfb", "protocol": "origin", "protocol_param": "", "obfs": "plain", "obfs_param": "", "speed_limit_per_con": 0, "speed_limit_per_user": 0, "additional_ports" : {}, // only works under multi-user mode "additional_ports_only" : false, // only works under multi-user mode "timeout": 120, "udp_timeout": 60, "dns_ipv6": false, "connect_verbose_info": 0, "redirect": "", "fast_open": false } |
其中大部分也不用改保持默认就行,或者设置成像我一样。现在可以测试代理能不正常工作:python server.py 之后用SSTap建立连接,配置方式如下图:
点击保持并连接,不出意外的话就可以以代理服务器的IP上网了。这个版本作者给准备了一些脚本方便用户:
1 2 3 | ./run.sh 后台运行不记录日志,ssh窗口可关闭 ./logrun.sh 后台运行,将日志存入ssserver.log ./stop.sh 停止运行 |
如果日志太大需要清理,可以通过这个命令清空:
1 | cat /dev/null > ssserver.log |
最后一步我们需要设置开机启动:
vim /etc/rc.local 在 exit 0 前添加bash /root/shadowsocksr/logrun.sh
另一个后台运行以及开机启动的方法:
screen -dmS Shadowsocks python server.py
screen -dmS 用来创建一个处于断开模式的会话,Shadowsocks为session name。
screen -r Shadowsocks 可以恢复指定的会话,忘记了可以用screen -list来查看。
vi /etc/rc.local
编辑添加以下内容:
cd /root/shadowsocks/shadowsocks
screen -dmS Shadowsocks python server.py
另外关于流量定期清零可以参考这个帖子https://doub.io/ss-jc23/
到此游戏代理服务器搭建结束。我们可以通过那个Web端设置账户相关的信息,并通过SSTap连接到服务器进行游戏加速。他们测试效果还是很满意的。
网上的资源特别容易404,即使我就是想安安静静玩个游戏而已。。。于是我将这次搭建用到的所有工具在Github做了一个备份,以免之后我需要再一次配置游戏加速器找不到有效的资源。
https://shuspieler.com/blog/1072/
2018年11月30日更新
同学反馈在高峰期丢包率比较高,建议开启BBR。我使用的kdatacenter没有控制面板,就连硬重启或者重装系统都得联系客服,麻烦了很多。我之前使用的Ubuntu 16.04 LTS默认内核是4.4而开启BBR最低版本要求是4.9。起初我想升级内核版本,这我之前也有过相关经验,可是这家vps的虚拟机模式似乎对于升级内核不友好,我尝试自动或者手动升级都导致kernel panic。并且每次需要联系客服才能解决,麻烦得很。所以后来我决定将系统换成Ubuntu 18.04,刚才查看默认内核是4.15,所以就避开了升级内核这一步。之后的步骤就简单多了,下面的几步在termilal执行一下就可以:
写入配置文件:
1 2 | echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf |
保存配置文件:
1 | sysctl -p |
输入以下命令以检查是否成功
1 | sysctl net.ipv4.tcp_available_congestion_control |
若返回
1 | net.ipv4.tcp_available_congestion_control = bbr cubic reno |
则说明开启成功。
另外几个查询是否开启成功的方法:
1 2 | sysctl net.ipv4.tcp_congestion_control lsmod | grep bbr |
结束。
Reference:
https://segmentfault.com/a/1190000015243145/
https://teddysun.com/486.html/comment-page-1/
https://blog.augustdoit.bid/Shadowsocks-Panel/
https://github.com/orvice/ss-panel/tree/v2/
https://blog.augustdoit.bid/Shadowsocks-Panel/
https://github.com/shadowsocksr-backup/shadowsocksr/
https://www.sockscap64.com/zh-hans/sstap/
https://doub.io/ss-jc15/
https://doub.io/dbrj-5/
https://doub.io/ss-jc33/
https://doub.io/ss-jc14/
https://doub.io/ss-jc13/
https://doub.io/ss-jc11/
https://www.cnblogs.com/Eason1024/p/8177665.html