注意,本文与 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 | su blabla // 从 root 用户切换到其它用户不用输密码 |
这里我把新用户名设置为 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 | force_install_dir ./l4d2server |
注意,这里的目录你也可以叫 l4d2 ,只要简单地把第一行指令的目录部分改成「./l4d2」就好了,但还是建议不要,同样在最后说明为什么。
此外,下载需时比较久,毕竟服务端其实也接近 7g ,我使用阿里云的速度不错,也需要下载个十多分钟。
完成之后就退出:
1 | exit |
这里已经可以执行./srcds_run
这个指令来直接启动超级纯净的服务器了,我跟着别人的不完整教程搭建时也是这样想的:「反正我只是要联机」,但我非常建议安装必备插件以及进行必要的安全防护,是的,你没看错,安全防护。不过在做安全防护之前,先安装一些必须插件,很有必要。
插件
首先我们需要安装 SourceMOD 和 MetaMOD,这两个东西除了提供 API 可供开发插件外,也提供了一些基本的功能。
链接都是 stable 的分支。
这里其它教程就开始作妖了,叫你在本地把两个东西捏一起再用什么软件上传,对我就是说 CSDN 那篇东西。
前面都用到 wget 了你为什么要自己折腾……
打开上方两个 MOD 的链接,见到 Download 下面的小企鹅了吗?这些都是直链,右键那个小企鹅,按「复制连结网址」之类的东西,然后切换到我们该用来放插件的目录,在前面打上wget
,并下载,就像下面这样。
1 | cd l4d2game // 注意:这里切换到你前面使用 SteamCMD 下载游戏时写的目录 |
这里的下载网址是我写文章时现复制的,总之命令看起来就像这样,当然读者也执行这两条是没有问题的,但我建议替换成新版本的链接。
之后解压:
1 | tar xvf sourcemod-1.10.0-git6454-linux.tar.gz |
解压完之后这两个包可以直接删掉了:
1 | rm sourcemod-1.10.0-git6454-linux.tar.gz |
这两个插件除了有基础功能之外,其实就像 Minecraft 的 Forge 和 Rift 一样,可以再安装别的插件,比方说 .smx (不是 Super Mario X) 的插件就要安装到 addons\sourcemod 下。
到这里插件就算是安装完了,一般来说现在应该先开个服试试,检查一下插件是不是正确安装了,但开服参数里也包含着安全防护的东西,现在直接开服会有安全问题,所以请耐心继续阅读。
安全
先到这里创建一个属于你的 Steam 组,创建完成后记下组 ID ,另外,让要一起联机的人都加入这个组。
现在,当前目录应该是在 addons ,那我们向上一层,到 cfg 文件夹去:
1 | cd .. |
在这里新建一个server.cfg
,在里面写点东西。这里我就列出比较重要的。另外,这里写的东西实际上就是开服完成后执行的脚本。
1 | hostname "Ceplavia's L4D2 Server" // 这个是服务器开放时,在游戏的右下角(如果你有加入一些组)显示的服务器名称,可以写但没用,下面会提到为什么 |
中间我故意分隔了一下,前面的部分是纯净的服务器就能执行的,下面的两行是安装了那两个插件才会执行的。
对我就故意不写怎么离开编辑状态并保存,vim 应该自己学。
然后到addons/sourcemod/configs
这个目录来,修改admins_simple.ini
这个文件。
1 | cd .. // 现在应该是在 cfg 文件夹里,往上一层 |
在里面以这样的格式写:
1 | "STEAM_数字:数字:好多数字" "99:z" |
前面那串是你的 SteamID,可以在这里查找到。
这么一来就差不多了,回到游戏所在的目录:
1 | cd .. // 向上返回到 sourcemod |
应该没错……总之要返回到有
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。