这就是一篇记录文章,纪念一下花了三四个小时折腾的成果,顺便写一些细节性问题。
前言
国内的技术帖多半是亡了,转载来转载去,不标明出处也就算了,还不统一一下格式。要不直接一股脑复制过来看也不看就发布了;有一些好一点的还稍微排了一下版,但是代码部分能不能把人家的行数给删一下(
在这就不点名哪个**DN了嗷。
感谢好友SweetCandy1提供的云服务器w
0.关于项目
说实在的,如果是没有Linux和网络相关知识的小白来说,建议去van一会Hacknet2(doge
Linux对于习惯于Windows环境臭打游戏的大概是有点陌生,但是没办法,谁叫它开源免费、性能占用低、上云还便宜呢(
Frp对于混迹在天朝还用的某动完全申请不到ipv4公网IP的来说应该是不陌生,想要搞个公网IP要不寄人篱下3,要不换家运营商4,不然就是上云用Frp进行端口转发。
而N2N对于游戏玩家来说更不陌生了,虽然咋一看可能没头没脑,但是只要说明这玩意就是P2P的开源组网方案,大概就明白了,毕竟相当一部分联机游戏都是走的P2P。当然了,对于P2P本身的缺点,也是令玩家们也是又爱又恨,而P2P打洞或成为一个相当不错的联机方式。
本项目P2P相关工具来自:梦羽大佬的P2P_Party5;Bug侠大佬的EasyN2N6。
1.从win连接
本例采用SSH连接Linux云,当然也可以使用网页终端或者其他连接方式。
如果Linux开启了SSH功能并开放了22端口7,则可以使用Windows提供的OpenSSH连接Linux云。
OpenSSH客户端默认是不自带的,需手动安装。以Windows10为例,进入「设置」→「应用」→「应用和功能」→「可选功能」,选择「添加功能」,搜索安装OpenSSH即可。
确认安装OpenSSH客户端后,运行CMD或PowerShell,使用ssh指令连接Linux云:
ssh [Username]@[IP]举个例子,假设用户名是root,云服务器IP为127.0.0.1:
#ForExample ssh root@127.0.0.1
登录后会提示输入密码:
[Username]@[IP]]'s password:注意,这个时候键入的任何内容都不会显示,但是退格键大写锁定键都是会响应的,正常键入密码就好了,最好一次性输入不要退格,否则反而增加密码错误的可能。
登录后提示信息长这样:
Last login: [LoginWeek] [LoginMonth] [LoginDay] [LoginTime] [LoginYear] from [LoginIP]
[[username]@[servername] ~]#
#If entered an incorrect password at least once:
Last failed login: [LoginWeek] [LoginMonth] [LoginDay] [LoginTime] [LoginTimezone] [LoginYear] from [LoginIP] on ssh:notty
There was [failcount] failed login attempt since the last successful login.
Last login: Mon Mar [LoginWeek] [LoginMonth] [LoginDay] [LoginTime] [LoginYear] from [LoginIP]
[root@VM-0-13-centos ~]#
[]括起来的均为参数,显示会不相同,例:Last failed login: Thu Jan 01 08:00:00 CST 1970 from 192.168.0.1 on ssh:notty There was 1 failed login attempt since the last successful login. Last login: Thu Jan 01 08:00:00 CST 1970 from 192.168.0.1 [root@VM-centos ~]#
来一个完整登录示例:
PS C:\Users\Administrator> ssh root@127.0.0.1
root@127.0.0.1's password:
Permission denied, please try again.
root@127.0.0.1's password:
Last failed login: Thu Jan 01 08:00:00 CST 1970 from 192.168.0.1 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Thu Jan 01 08:00:00 CST 1970 from 192.168.0.1
[root@VM-centos ~]#至此,连接并登录Linux云成功。
2.熟悉Linux操作
目录访问操作
在上一步中,登录后默认的目录在当前登录用户下,可以使用cd命令回到根目录:
cd /
cd指令后边的参数可以跟一下几种常用目录表示方法:跳转到指定目录
/usr/bin:cd /usr/bin跳转到自己的home目录:
cd ~跳转到上级目录:
cd ..
需要注意的是,在输入指令时,可以看到在指令前面的[]里最后有个~(或其他),这代表着当前目录,可帮助快速定位。
假设登入进系统后,跳转到了目录
/usr/bin,则完整显示会是这样:[root@VM-centos ~]# cd /usr/bin [root@VM-centos bin]#
文件罗列操作
可以使用ls罗列当前目录下的文件或文件夹,会自带颜色对文件类型进行分类,常用默认颜色对应文件类型如下表所示:
ls| 颜色 | 文件类型 |
|---|---|
| 白色 | 普通文件(文本文件,配置文件,源码等) |
| 蓝色 | 目录(文件夹) |
| 红色 | 包(压缩文件,包文件) |
| 绿色 | 程序(可执行文件) |
| 浅蓝色 | 链接文件(类似win的快捷方式) |
| 黄色 | 设备文件 |
| 灰色 | 其他文件 |
文本编辑操作
Linux系统如果不带面板则使用命令行操作,而vi指令就是在命令行环境下的文书编辑器,当然了,对vim熟悉的上手就能用了不是么。关于vi/vim的详细说明可参考菜鸟教程相关文档8,本文只简单说明大概使用流程:
我们假设已经有一个内有如下字符的文本文档test.txt:
Hello World!
This is a test file.当定位到该文本文档目录下后,使用vi指令进入编辑器:
vi test.txt打开编辑器后,Powershell会显示以下内容:
Hello World!
This is a test file.
~
~
~
"test.txt" 2L, 34C由于本站渲染器问题,中间的~应该是蓝色的,表示空,且数量与窗口高度有关,将会填满所有空行。
然后按下键盘i键,当底部一栏变成黄色的-- INSERT --即进入输入模式,即可按正常文本编辑器使用,切记鼠标是无效的。
例如在文本末加入一行文本:lmao
Hello World! This is a test file. lmao< ~ ~ -- INSERT --注:这里使用
<模拟命令行的光标
编辑结束后,按下Esc键退出输入模式,返回普通模式,然后输入:wq,即可保存退出编辑器。
Hello World!
This is a test file.
lmao
~
~
:wq文本查看操作
使用cat或more指令可查看文本文件,其中,cat指令适用于行数较少的文本文件;more指令可以部分显示查看大内容文本,使用空格键向下滚动一屏,Ctrl+B返回上一屏。
例如使用
cat指令查看编辑后的test.txt:[root@VM-centos ~]# cat test.txt Hello World! This is a test file. lmao [root@VM-centos ~]#
文件删除操作
使用著名的rm指令可删除文件。
删除该目录下指定文件:
rm test.txt删除该目录下所有文件(光速删库跑路是吧):
rm *
端口占用查看
使用netstat指令查看各端口和进程的相关情况。
netstat -tunlp这将会显示所有占用端口的进程:
[root@VM-centos ~]# netstat -tunlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN 2012/python3 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1414/nginx: master tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1213/sshd udp 0 0 127.0.0.1:323 0.0.0.0:* 546/chronyd udp 0 0 0.0.0.0:68 0.0.0.0:* 891/dhclient [root@VM-centos ~]#
防火墙的操作
本文仅提供CentOS7的防火墙常规操作,其他Linux发行版本请自行查阅相关文档。
服务部署好后还是连不上的极大可能原因就在防火墙,云服务器不止有服务商提供的实例防火墙,还有系统自带的防火墙,注意放通所需协议的端口。虽然关防火墙确实是一劳永逸的方法,但是相对安全性大大降低。
CentOS7的防火墙可用firewall-cmd指令操作:
查看防火墙状态:
firewall-cmd --state查看某个端口是否开放(以TCP80端口为例):
firewall-cmd --query-port=80/tcp查看已开放端口列表:
firewall-cmd --list-port重启防火墙:
firewall-cmd --reload开启某个端口(以TCP80端口为例):
firewall-cmd --zone=public --add-port=80/tcp --permanent关闭某个端口(以TCP80端口为例):
firewall-cmd --zone=public --remove-port=80/tcp --permanent
关闭进程操作
使用kill指令可以关闭进程,使用附加参数PID即可关闭指定进程。PID为进程唯一识别码。
kill 2012赋予运行权限
如果在运行某个程序出现permission denied报错,则可能没有运行权限,可以使用以下指令赋予最高权限:
chmod 700 [ProcessName]系统信息查看
使用uname指令查看操作系统、内核、CPU等信息:
uname -a例如这样一台机子:
[root@VM-centos ~]# uname -a Linux VM-centos 3.10.0-1160.11.1.el7.x86_64 #1 SMP Thu Jan 01 08:00:00 CST 1970 x86_64 x86_64 x86_64 GNU/Linux [root@VM-centos ~]#就可以得出它的架构是
x86_64的,这对后续安装的服务版本提供了非常必要的关键信息。
文件上传操作
本文只记录利用OpenSSH客户端将文件从Windows系统上传至Linux云服务器。
本操作不在已登录的SSH中运行,而是在Powershell中完成。
scp D:\1.txt root@127.0.0.1:/root上述指令将本地盘符D盘下的文件1.txt上传到Linux云服务器的/root文件夹内。执行指令后会要求输入密码,正确后才能进行上传操作。
完整上传示例:
C:\Users\Administrator>scp D:\1.txt root@127.0.0.1:/root root@8.218.45.147's password: 1.txt 100% 3 0.1KB/s 00:00 C:\Users\Administrator>
注意事项
- 尽量选择root管理员账户登录操作,否则会提示权限不足操作失败(当提示符为
#则处于管理账户)。 Linux的指令可以使用Tab键补全,尤其是键入长文件名的时候尤为高效。
3.部署Frp服务
下载Frp包
使用wget下载,注意选择与服务器相同架构的包,使用系统信息查看方法以确定架构。建议自行访问GitHub9仓库并使用最新版链接替换下载链接:
wget https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_linux_amd64.tar.gz解压包
解压的包名是下载的包名,请按实际情况填写,建议使用ls查看当前目录文件。
tar -xzvf frp_0.48.0_linux_amd64.tar.gz定位目录
定位到解压出来的文件夹目录下:
cd frp_0.48.0_linux_amd64启动Frp服务
建议让Frp处于后台运行并写入日志,这样即使关闭了SSH也可以保存运行:
nohup ./frps -c frps.ini & > frp.log出现以下提示即说明启动成功,进程PID也可查看:
[root@VM-centos frp_0.48.0_linux_amd64]# nohup ./frps -c frps.ini & > frp.log [1] 8865 [root@VM-centos frp_0.48.0_linux_amd64]# nohup: ignoring input and appending output to ‘nohup.out’
放行端口
这步很重要,多数部署完连不上的原因就是没有放行本地系统的防火墙端口,默认监听端口为7000/TCP。
云服务器的话控制台记得放行实例对应的端口。
firewall-cmd --zone=public --add-port=7000/tcp --permanent重启防火墙
这步同样重要,如果不重启防火墙的话,放行端口操作不会生效。
firewall-cmd --reload查询是否成功开启
可以利用上文提到的端口占用查看和防火墙的操作相关内容查询,或者直接找台机子ping该主机端口。
注意事项
- 本例部署的
Frp服务仅可用于TCP协议的端口转发,如需支持其他协议或链接方法请自行查阅相关文档。 - 由于只开放了监听端口,并没有开放转发端口,所以客户端在连接前,需要根据客户端配置开放对应的转发端口。
- 如需调整监听端口,可使用文本编辑操作对文件:
./frp_0.48.0_linux_amd64/frps.ini进行相应修改。
4.部署N2N服务(P2P_Party适用)
下载N2N包
由于梦羽大佬提供的链接为arm架构的包,不适用于绝大多数云服务商的架构,所以本文改为x86_64架构的包,下载前请使用系统信息查看方法以确认系统架构。
wget https://github.com/lucktu/n2n/blob/master/Linux/Old/linux_x64/n2n_v2_linux_x64_v2.6.0_r250_static_by_heiye.zip解压包
文件是零散的建议提前创建一个文件夹。
unzip n2n_v2_linux_x64_v2.6.0_r250_static_by_heiye.zip启动服务
进入程序所在文件夹内运行指令。建议使用nohup后台运行程序。默认端口为7654。
nohup ./supernode -l 7654 &放行端口
这步很重要,多数部署完连不上的原因就是没有放行本地系统的防火墙端口,默认监听端口为7654/UDP。
云服务器的话控制台记得放行实例对应的端口。
firewall-cmd --zone=public --add-port=7654/udp --permanent重启防火墙
这步同样重要,如果不重启防火墙的话,放行端口操作不会生效。
firewall-cmd --reload查询是否成功开启
可以利用上文提到的端口占用查看和防火墙的操作相关内容查询,或者直接找台机子ping该主机端口。
注意事项
- 虽然不知道原因是什么,但是从该仓库下载的包解压不正常,会提示
cannot find zipfile directory,遇到这种情况请自行前往仓库下载,再使用文件上传操作方法将文件手动上传,再解压即可成功解压。 - 启动服务时会出现
Permission denied错误,请使用赋予运行权限方法对软件提权。
5.部署N2N服务(EasyN2N适用)
安装libzstd
yum install libzstd -y下载N2N包
此处下载的包为n2n 3.0.0。
wget https://github.com/ntop/n2n/releases/download/3.0/n2n-3.0.0-1038.x86_64.rpmRPM安装
rpm -i n2n-3.0.0-1038.x86_64.rpm启动服务
端口默认即为7654,其余启动参数见大佬提供的文档10。
supernode -p 7654放行端口
这步很重要,多数部署完连不上的原因就是没有放行本地系统的防火墙端口,默认监听端口为7654/UDP。
云服务器的话控制台记得放行实例对应的端口。
firewall-cmd --zone=public --add-port=7654/udp --permanent重启防火墙
这步同样重要,如果不重启防火墙的话,放行端口操作不会生效。
firewall-cmd --reload查询是否成功开启
可以利用上文提到的端口占用查看和防火墙的操作相关内容查询,或者直接找台机子ping该主机端口。
注意事项
无
写在最后
其实也不是什么高深的有难度的文章,只是被其中的小细节折磨的不轻,遂著文以记之。
应好友SweetCandy1的建议,整理并发布该篇文章,花了不少时间的说,毕竟又在一台新的云服务器上部署了一遍lmao
总算也是摸索出了相对可靠的联机方式,和朋友们玩耍更加方便了w
提一嘴,电信的海外链路感觉不大行?腾讯云海外服务电信或多或少都有丢包,阿里云好像目前香港的电信还可以没有出现丢包,相比之下移动链路反而相当稳定。这是怎么一回事捏(
- 没啥文章还可能会寄的博客链接:SweetCandy233's Blog - 醉后不知天在水,满船清梦压星河 ↩
- 黑客模拟器,但是通关并不能让你成为黑客( ↩
- SakuraFRP yyds! ↩
- 某信申请ipv4动态公网IP应该简单点吧( ↩
- P2P联机工具 P2P Party - 梦之圈 ↩
- 使用N2N搭建虚拟局域网联机游戏(EasyN2N\小黄鸭) | Bug侠 (bugxia.com) ↩
- 这玩意应该是云服务器自带的功能吧? ↩
- Linux vi/vim | 菜鸟教程 (runoob.com) ↩
- Releases · fatedier/frp · GitHub ↩
- EasyN2N 服务端(Supernode)附加参数 | Bug侠 (bugxia.com) ↩


Comments | NOTHING