如何在Linux云上部署Frp和N2N服务


这就是一篇记录文章,纪念一下花了三四个小时折腾的成果,顺便写一些细节性问题。

前言

国内的技术帖多半是亡了,转载来转载去,不标明出处也就算了,还不统一一下格式。要不直接一股脑复制过来看也不看就发布了;有一些好一点的还稍微排了一下版,但是代码部分能不能把人家的行数给删一下(

在这就不点名哪个**DN了嗷。

感谢好友SweetCandy1提供的云服务器w

0.关于项目

说实在的,如果是没有Linux和网络相关知识的小白来说,建议去van一会Hacknet2(doge

Linux对于习惯于Windows环境臭打游戏的大概是有点陌生,但是没办法,谁叫它开源免费、性能占用低、上云还便宜呢(

Frp对于混迹在天朝还用的某动完全申请不到ipv4公网IP的来说应该是不陌生,想要搞个公网IP要不寄人篱下3,要不换家运营商4,不然就是上云用Frp进行端口转发。

N2N对于游戏玩家来说更不陌生了,虽然咋一看可能没头没脑,但是只要说明这玩意就是P2P的开源组网方案,大概就明白了,毕竟相当一部分联机游戏都是走的P2P。当然了,对于P2P本身的缺点,也是令玩家们也是又爱又恨,而P2P打洞或成为一个相当不错的联机方式。

本项目P2P相关工具来自:梦羽大佬的P2P_Party5Bug侠大佬的EasyN2N6

1.从win连接

本例采用SSH连接Linux云,当然也可以使用网页终端或者其他连接方式。

如果Linux开启了SSH功能并开放了22端口7,则可以使用Windows提供的OpenSSH连接Linux云。

OpenSSH客户端默认是不自带的,需手动安装。以Windows10为例,进入「设置」→「应用」→「应用和功能」→「可选功能」,选择「添加功能」,搜索安装OpenSSH即可。

确认安装OpenSSH客户端后,运行CMDPowerShell,使用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

文本查看操作

使用catmore指令可查看文本文件,其中,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.rpm

RPM安装

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

提一嘴,电信的海外链路感觉不大行?腾讯云海外服务电信或多或少都有丢包,阿里云好像目前香港的电信还可以没有出现丢包,相比之下移动链路反而相当稳定。这是怎么一回事捏(


声明:ItsNotch_404|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 如何在Linux云上部署Frp和N2N服务


Despite The Regrets, But Never Regret.