0%

番外:在CentOS上搭建求生之路2服务器

注意,本文与 Minecraft 三部曲一样,要求阅读者拥有基本的 Linux 系统操作知识。


前言

最近在和朋友愉快地玩一些很不错的三方图,同时也和一些初次接触求生的朋友玩,使用大厅的本地服务器实在是难以连接,而使用最佳可用服务器则总是连到别人的大量魔改服务器,搞得本地文件都变了,单喷都能改成500多发子弹,不检查文件完整性就没法修复,于是干脆自己搭建。

求生2的服务器对硬件要求很低,基本上国内阿里云腾讯云什么的 1 核 2g 已足够,只是硬盘稍有要求,因为服务端本身就不小。

我用的系统是 CentOS 7,但实际操作里因为不同发行版而要有不同操作的地方很少,所以就不着重说了。

具体步骤

像广东人喝茶一样,装新软件之前先洗杯碟更新……

1
yum update

之后安装依赖库

1
yum install glibc.i686 libstdc++.i686

若是使用 root 用户登录的服务器,则需要创建一个新的普通用户。因为下文提到的 SteamCMD 不能在 root 用户下跑。使用adduser blabla就能创建一个名为 blabla 的用户了。再使用passwd blabla就能为 blabla 用户设置密码,密码需要不少于7位。

然后登录为新创建的用户并切换到该用户的根目录。

1
2
su blabla    // 从 root 用户切换到其它用户不用输密码
cd

这里我把新用户名设置为 blabla 是有原因的,当然可以设置成别的,比如「userl4d2」,但最好不要设置成「l4d2」,你会后悔的,最后会说明为什么。

接下来需要安装 SteamCMD,这是一个在命令行下可以运行的 Steam ,实际上他就是没有界面而已。

执行以下命令来下载 SteamCMD 到当前目录:

1
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz

然后解压:

1
tar xvf steamcmd_linux.tar.gz

之后就可以使用 SteamCMD 来下载求生之路 2 的服务端了,先执行 steamcmd.sh:

1
./steamcmd.sh

然后匿名登录:

1
login anonymous

之后指定目录,并下载服务端:

1
2
force_install_dir ./l4d2server
app_update 222860 validate

注意,这里的目录你也可以叫 l4d2 ,只要简单地把第一行指令的目录部分改成「./l4d2」就好了,但还是建议不要,同样在最后说明为什么。

此外,下载需时比较久,毕竟服务端其实也接近 7g ,我使用阿里云的速度不错,也需要下载个十多分钟。

完成之后就退出:

1
exit

这里已经可以执行./srcds_run 这个指令来直接启动超级纯净的服务器了,我跟着别人的不完整教程搭建时也是这样想的:「反正我只是要联机」,但我非常建议安装必备插件以及进行必要的安全防护,是的,你没看错,安全防护。不过在做安全防护之前,先安装一些必须插件,很有必要。

插件

首先我们需要安装 SourceMODMetaMOD,这两个东西除了提供 API 可供开发插件外,也提供了一些基本的功能。

链接都是 stable 的分支。

这里其它教程就开始作妖了,叫你在本地把两个东西捏一起再用什么软件上传,对我就是说 CSDN 那篇东西。

前面都用到 wget 了你为什么要自己折腾……

打开上方两个 MOD 的链接,见到 Download 下面的小企鹅了吗?这些都是直链,右键那个小企鹅,按「复制连结网址」之类的东西,然后切换到我们该用来放插件的目录,在前面打上wget,并下载,就像下面这样。

1
2
3
4
5
cd l4d2game    // 注意:这里切换到你前面使用 SteamCMD 下载游戏时写的目录
cd left4dead2 // 这是真正的游戏目录……我是这么认为的
cd addons
wget https://sm.alliedmods.net/smdrop/1.10/sourcemod-1.10.0-git6454-linux.tar.gz
wget https://mms.alliedmods.net/mmsdrop/1.10/mmsource-1.10.7-git971-linux.tar.gz

这里的下载网址是我写文章时现复制的,总之命令看起来就像这样,当然读者也执行这两条是没有问题的,但我建议替换成新版本的链接。

之后解压:

1
2
tar xvf sourcemod-1.10.0-git6454-linux.tar.gz
tar xvf mmsource-1.10.7-git971-linux.tar.gz

解压完之后这两个包可以直接删掉了:

1
2
rm sourcemod-1.10.0-git6454-linux.tar.gz
rm mmsource-1.10.7-git971-linux.tar.gz

这两个插件除了有基础功能之外,其实就像 Minecraft 的 Forge 和 Rift 一样,可以再安装别的插件,比方说 .smx (不是 Super Mario X) 的插件就要安装到 addons\sourcemod 下。

到这里插件就算是安装完了,一般来说现在应该先开个服试试,检查一下插件是不是正确安装了,但开服参数里也包含着安全防护的东西,现在直接开服会有安全问题,所以请耐心继续阅读。

安全

先到这里创建一个属于你的 Steam 组,创建完成后记下组 ID ,另外,让要一起联机的人都加入这个组。

现在,当前目录应该是在 addons ,那我们向上一层,到 cfg 文件夹去:

1
2
3
cd ..
cd cfg
vi server.cfg

在这里新建一个server.cfg,在里面写点东西。这里我就列出比较重要的。另外,这里写的东西实际上就是开服完成后执行的脚本。

1
2
3
4
5
6
7
8
hostname "Ceplavia's L4D2 Server"    // 这个是服务器开放时,在游戏的右下角(如果你有加入一些组)显示的服务器名称,可以写但没用,下面会提到为什么
sv_allow_lobby_connect_only 0 // 是否允许从大厅选择「组服务器」来连接,建议 0 ,也就是 false
sv_tags hidden // 在浏览服务器的地方隐藏
sv_steamgroup 你的组id // 就是前面你建立的组的 ID
sv_steamgroup_exclusive 1 // 设置组为私有

sm_cvar sv_gametypes coop // 游戏模式为合作
z_difficulty Normal //游戏难度为普通

中间我故意分隔了一下,前面的部分是纯净的服务器就能执行的,下面的两行是安装了那两个插件才会执行的。

对我就故意不写怎么离开编辑状态并保存,vim 应该自己学。

然后到addons/sourcemod/configs这个目录来,修改admins_simple.ini这个文件。

1
2
3
4
5
cd ..    // 现在应该是在 cfg 文件夹里,往上一层
cd addons
cd sourcemod
cd configs
vi admins_simple.ini

在里面以这样的格式写:

1
"STEAM_数字:数字:好多数字"		"99:z"

前面那串是你的 SteamID,可以在这里查找到。

这么一来就差不多了,回到游戏所在的目录:

1
2
3
4
cd ..    // 向上返回到 sourcemod
cd .. // 向上返回到 addons
cd .. // 向上返回到 left4dead2
cd .. // 向上返回到 l4d2server

应该没错……总之要返回到有srcds_run这个东西所在的目录。

然后我们来写一个启动脚本:

1
vi start.sh

写这段东西就好了:

1
./srcds_run -game left4dead2 -insecure +hostport 写个数字嘛 -condebug  +exec server.cfg -nomaster

来具体解释一下,srcds_run 就是启动服务端用的;game 参数不多说了;insecure 是禁用 VAC,一些客户端的 mod 不禁用这个的话容易被制裁,比如说自动 BunnyHop 的 mod;hostport 是端口,默认是27015,建议修改;condebug 是输出 debug 的信息;exec 是执行前面写的server.cfg;nomaster 同样是隐藏服务器用的。

注意,这里使用的端口,请在防火墙或安全组允许双向,TCP 和 UDP 都要。

然后给这个启动脚本加上权限:

1
chmod +x start.sh

这样就可以执行 start.sh 来启动服务器了,建议新增一个 screen 来使用。要停止服务器,只要在 screen 内 Ctrl+C 即可。

三方地图

用 pscp 之类的工具上传到 addons这个文件夹内再开服就行。路径是IP:home/你的用户/游戏文件夹/left4dead2/addons

前面我提到过为什么用户名和下载的文件夹名不要用「l4d2」,这里把路径里部分换成 l4d2 就明白了,真的很容易搞混目录。

插件指令

游戏内可以输入/admin来执行管理员指令,可以进行换图、投票等操作。

要玩三方地图的话,可以切换地图,在选择地图的地方,类似「c1m1_blabla」这样命名的都是官方地图,具体对应什么可以去查,神奇的地方在于不按剧情顺序。如果没有安装三方图,会有一些不是这个格式的地图,我估计是测试场景,我也不敢开。要是有装三方图的话,会列在前面。

进入服务器

游戏内按「~」呼出控制台,输入connect IP:你自己的端口,例如connect 1.2.3.4:56789即可,当然你要是有域名的话,也可以写一个域名解析,这样就不用记 IP 了。

其它游戏的服务端

像别的可以联机的游戏,比如我最近正在玩的 Project Zomboid,也是可以利用同样的方式开服的,在前面下载游戏的地方把 app id 改成不同游戏的便可。


WHY安全?

国内的人在某种程度上真的很犯贱。

求生说起来也有 10 年了吧?说到求生,大家的印象都是「特价的时候才一顿饭的价钱,补个票吧」,而坚持在玩的人,我觉得真的没多少。

而这种 p2p 的联机方式虽然不能说不好,但至少在国内是很难做到的,因此开个服务器来联机也无可厚非。

但就有这么一种贱民,开着收费的求生服,卖 VIP,当你的服务器在公网上暴露,也就是能在游戏里的搜索服务器那访问到,就会有人来尝试连接,一旦发现能连上,你的服务器在稍后就会受到 DDoS 攻击。

只要你不隐藏起来,一开就 D 你。

一个月卖 VIP 能卖多少钱?值得吗?

前面在server.cfg里写的sv_tags hidden以及启动参数里的-nomaster都是把服务器隐藏起来的一种手段。以免遭到这种人的 DDoS。