内网穿透 - 搭建L4D2服务器(Linux FRP)
1 前言
内网穿透可用于解决搭建游戏服务器时没有公网ip的问题,l4d2是以UDP协议传输游戏数据的,因此使用内网穿透工具进行UDP穿透即可
本文主要内容分为两大部分,第一部分(即第2章节)是使用github上的开源项目frp配合云服务器实现内网穿透,第二部分(即第3章节)是使用樱花FRP(SakuraFrp)提供的免费隧道实现内网穿透
第一部分(云服务器+frp)不具有实用性,因为市面上的大多数的云服务器性能都足够运行l4d2游戏服务器且自带公网ip;第二部分(使用SakuraFrp)的穿透效果也很难令人满意,毕竟免费的内网穿透工具不能保证网络的稳定性,而这一点对游戏体验影响很大,使用付费的内网穿透工具又不如直接加钱买云服务器。但是,如果有一台性能很弱但网络很好的云服务器就可以用到第一部分的方法;如果能找到性价比很高的内网穿透工具的话也可以使用第二部分的方法
传送门:
在CentOS 7系统下搭建L4D2服务器的方法:点击跳转
在Debian-11.5系统下搭建L4D2服务器的方法:点击跳转
注:
本文初版是含有csgo的,但经测试csgo不支持frp技术进行内网穿透,所以本文于2023.2.28删去了csgo相关内容。csgo作为竞技性很强的射击游戏,通过内网穿透总会大大增加游戏延迟从而影响游戏体验,因此还是建议使用直连csgo服务器的方式游玩

2 云服务器+frp 实现内网穿透
2.1 准备工作
2.1.1 一台云服务器(自带公网ip),安装CentOS_7.x x64版本的系统
注:
① 假设云服务器的公网ip为:106.123.123.123
② 不是必须要装CentOS系统,在常见的linux系统下frp的使用方法都一样
2.1.2 一台电脑,作为l4d2的游戏服务器,安装Debian_11.5 x64版本的系统
注:
① 假设游戏服务器的内网ip为:192.168.0.111
② 不是必须要装debian系统,在常见的linux系统下frp的使用方法都一样,在CentOS系统下也可以搭建l4d2游戏服务器
2.1.3 一台能玩l4d2的电脑,作为玩游戏的设备
2.1.4 从github下载最新版的frp安装包,选择64位的linux版
frp下载网址:https://github.com/fatedier/frp/releases
当前最新版本号为0.46.0,下载frp_0.46.0_linux_arm64.tar.gz
为求方便,将解压后的文件夹重命名为frp,复制为两份,一份传到CentOS系统的合适位置,另一份传到debian系统的合适位置
假设CentOS里的路径为/home/steam/frp,debian里的路径是/home/aaa/frp
注:
① 路径里的steam和aaa都是linux系统的用户名,不是指V社的steam游戏平台
② frp文件夹中,文件名带c的是frp客户端所需文件,文件名带s的是frp服务端所需文件
因此CentOS这边删除frpc、frpc.ini、frpc_full.ini,保留frps、frps.ini、frps_full.ini、LICENSE
而debian这边删除frps、frps.ini、frps_full.ini,保留frpc、frpc.ini、frpc_full.ini、LICENSE
2.2 配置frp服务端
frps_full.ini中展示了frp所有可用的配置项,相当于frp的使用说明书,我们从中挑选出需要的配置项写到frps.ini中即可
将frps.ini修改为以下内容(#代表注释内容,可以不写)
注:
① 配置中使用的7000、7500端口号,以及令牌、用户名和密码,都可以根据个人喜好进行修改,为安全起见不建议用默认的参数
② 配置中使用到的两个端口号,在CentOS的防火墙设置中要开放对应的端口的tcp协议,这点非常重要
2.3 配置frp客户端
frp的客户端和l4d2的服务器端都安装在debian系统中,与frp服务端的配置方法相同,需要将frpc.ini修改为以下内容(#代表注释内容,可以不写)
注:
① 配置中的端口号7000和令牌要与frp服务端保持一致
② 内网ip可以写路由器分配的ip,例如:192.168.0.111,也可以写通用的127.0.0.1
③ local_port是否是27015,这个取决于搭建l4d2服务器时是否有指定端口号,没有指定的话就填默认的27015。在debian的防火墙设置中一定要开放这个端口的tcp和udp协议,这点非常重要
④ remote_port就是玩家连接游戏服务器时要用的端口号,它会指向内网中的local_port端口,因此这个6000可以按个人喜好修改,但在CentOS的防火墙设置中一定要开放这个端口的tcp和udp协议,这点非常重要
2.4 启动frp服务端
在CentOS中,打开frp所在路径,命令:cd /home/steam/frp
启动frp服务端,命令:./frps -c frps.ini
关闭方法:键盘【Ctrl+C】
2.5 启动frp客户端
在debian中,打开frp所在路径,命令:cd /home/aaa/frp
启动frp服务端,命令:./frpc -c frpc.ini
关闭方法:键盘【Ctrl+C】
2.6 检查udp穿透是否成功
在任意能联网的浏览器中打开frp的网页版管理端口,网址:http://106.123.123.123:7500
输入用户名和密码(见本文2.2章节的配置信息)
网页左侧点击Proxies,再点击UDP,右侧status显示online即代表穿透成功
2.7 日常使用
2.7.1 按照本文2.4和2.5章节分别启动frp服务端和客户端,再按本文2.6章节所述检查udp穿透是否成功
注:可以在网上搜索CentOS系统下将frp设置为开机自启动以及后台保持运行的方法
2.7.2 在debian系统中启动l4d2服务器
2.7.3 任意玩家都可在l4d2的游戏控制台输入connect 106.123.123.123:6000加入游戏
注:内网穿透的本质就是将玩家电脑向106.123.123.123:6000发送的游戏数据转发到内网游戏服务器192.168.0.111:27015,(简化流程:【玩家电脑】-->【云服务器CentOS】-->【游戏服务器Debian】),因为中间多了云服务器的转发环节,玩游戏时的ping通常会比较高

3 SakuraFrp 实现内网穿透
3.1 准备工作
3.1.1 一台电脑,作为l4d2的游戏服务器,安装Debian_11.5 x64版本的系统
注:
① 假设游戏服务器的内网ip为:192.168.0.111
② 不是必须要装debian系统,在常见的linux系统下SakuraFrp的使用方法都一样,在CentOS系统下也可以搭建l4d2游戏服务器
3.1.2 一台能玩l4d2的电脑,作为玩游戏的设备
3.1.3 注册SakuraFrp账号
官网网址:https://www.natfrp.com/

注册后打开管理面板,点击网页上方菜单【用户】-【实名认证】,需要支付1元购买一次实名认证资格,具体流程参考SakuraFrp官方文档:https://doc.natfrp.com/#/faq/realname
3.2 创建隧道
打开SakuraFrp的管理面板上方菜单【服务】-【隧道列表】,按下图所示创建一条免费隧道

注:图中本地IP指的是l4d2游戏服务器的内网ip,例如:192.168.0.111
创建完成后,查看配置文件,如下图所示

然后在弹出的配置文件窗口,点击【下载配置】,得到一个frpc_xxxxxxx.ini文件
3.3 下载SakuraFrp客户端
打开SakuraFrp的管理面板上方菜单【服务】-【软件下载】,按下图所示流程选择合适的客户端软件,下载得到一个frpc_linux_amd64文件

在debian系统的路径/home/aaa/下新建一个文件夹存放SakuraFrp,命令:mkdir /home/aaa/sakura-frp
注:此处的aaa是linux系统的用户名,要将路径里的steam改为你自己的服务器的用户名
使用Sftp、WinSCP等工具将frpc_linux_amd64传输到debian的sakura-frp文件夹中,同时把配置文件frpc_xxxxxxx.ini也传输到debian的sakura-frp文件夹中
3.4 开启内网穿透
通过Xshell、putty等终端工具连接到debian,打开sakura-frp文件夹,命令:cd /home/aaa/sakura-frp
然后启动SakuraFrp客户端,命令:./frpc_linux_amd64 -c frpc_xxxxxxx.ini
启动成功后的效果如下图所示

关闭隧道的方法:键盘【Ctrl+C】
3.5 启动游戏服务器
再打开一个新终端窗口,启动l4d2游戏服务器
3.6 玩家连接游戏服务器
玩家在l4d2的游戏控制台输入:connect 43.249.193.55:xxxxx
注:此处43.249.193.55:xxxxx是本文3.4章节图中红框圈出来的ip和端口号

4 总结
对于现实中在一起的玩家来说,找一个电脑或手机打开热点功能,玩家连上热点后组成局域网进行游戏是最方便的;如果资金充足,目前腾讯、阿里、华为这些都有新用户特惠,性能弱一点的轻量云服务器也能勉强满足需求,内网穿透终究不是最佳解决方案
以我个人为例,我的云服务器是在广州而我人在北方,直连云服务器就有80ms延迟,使用云服务器+frp进行内网穿透后就是双倍延迟,顶着160ping玩射击游戏 emmm……使用SakuraFrp提供的免费隧道进行udp穿透,游戏延迟在150-900ping之间波动,用了两次都是没超过10分钟就因为网络波动断开与服务器的连接,至于付费版的隧道还没有体验过
