欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

FRP+NPS+Zerotier 与 NAT 服务器测试的内联网渗透工具比较

最编程 2024-03-01 09:03:08
...

上文中展示了私有云盘的搭建方式,但仅能本地访问肯定无法满足有私有云用户的需求,于是笔者尝试了多个流行的内网穿透工具,首先说明一下笔者目前的配置情况,可道云是通过树莓派挂载的,到达公网前至少有两次NAT,服务器有一个香港的普通服务器和两个江苏的NAT服务器,笔者将分别在两种服务器上使用三个软件,并介绍安装和注意事项

首先解释一下NAT服务器,与普通服务器不同的是,NAT服务器是共用IP的,仅能使用十个至几十个端口,有的是直接划分好端口段(OLVPS),服务器上用防火墙打开对应端口即可使用,有的可以自行设定端口映射(CloudIPLC),但是在公网上只能打开1万以上的端口号

FRP和NPS的原理都相近,一个主(Server)多个从(Client),通过一个端口(TCP复用)使多个从服务器的端口映射到主服务器上,使得访问主服务器端口时,能获得访问从服务器对应端口的目的。以本文的需求为例,加入我在树莓派的5000端口上挂载了一个网页服务,想通过公网访问,则可以将树莓派的5000端口映射到公网服务器的6000端口,然后访问公网服务器的6000端口即可访问网页,其他的可以一一映射,如5100到6001,5200到6002,如下图所示

NAT服务器稍有不同,即多了一层映射,需要将NAT服务器的内网端口映射到公网端口上,假设需求和上图相同,则需要将5000、5100和5200端口映射到6000、6001、6002,数据沟通则填写37000,然后用户通过访问36000、36001和36002获得相同效果,如下图所示

那么进入部署阶段

FRP

一个由go语言实现的内网穿透工具,优点是下载即用,不需要安装,可以在不同服务器间拷贝,直接运行即可,缺点是官方提供的WebUI非常鸡肋,可以直接忽略,本文使用的是 0.34.1版本

https://github.com/fatedier/frp

普通服务器

Server端

笔者一般习惯先部署 Server 端,因为调试逻辑会更加简单,首先去官网下载 Release 包,注意区别服务器系统版本,解压压缩包之后给予 frps 文件执行的权限,当然最简单的方式就是整个目录递归给 777 权限,修改 frps.ini ,笔者使用的设置为

[common]
bind_port = 7000
kcp_bind_port = 7000
token = 服务器间通信密码
dashboard_port = 7001
dashboard_user = 用户名
dashboard_pwd = WebUI密码
log_file = /root/log/frps.log
log_level = info
log_max_days = 7

其中含有 dashboard 的几个变量都是和 WebUI 相关的,不使用该功能的话可以直接删掉,然后切换到目录下运行看是否报错(记得先创建log文件夹),如果未正常开启可以在 log 文件中查看日志并修正

./frps -c ./frps.ini

Client端

解压后修改配置文件 frpc.ini,注意和上面的区别,别修改或运行错了

[common]
server_addr = 服务器ip
server_port = 7000
token = 服务器间通信密码
protocol = kcp
log_file = /root/log/frpc.log
log_level = info
log_max_days = 7
[ssh] type
= tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000 [web] type = tcp local_ip = 127.0.0.1 local_port = 80 remote_port = 6001

将服务器 ip 和密码设置好后就可以运行了,如果使用的是 kcp 协议,需要放行通信端口(如上文中的7000)的 udp ,也可以使用默认的 tcp 协议,下方的 type 不需要更改

./frpc -c ./frpc.ini

这时建议先两边都用 ssh 直接运行命令开启服务并验证是否可以连通,如果一切正常再使用其他方式后台运行,如果无法连接,下面列出了几个常见的解决思路

1、查看log日志的报错信息,其中log日志所在的目录需要提前创建,然后根据错误信息来排查问题
2、查看是否端口已经被占用 netstat -lnp|grep 端口号
3、查看两侧防火墙是否均放行所有相应的端口的tcp,其中kcp需要放行沟通端口(如上文中的7000)的tcp+udp
4、从外部查看是否开放端口(测服务器的),http://coolaf.com/tool/port

NAT服务器

Server端

和上面完全相同,如果是手动开启映射的服务器,记得在使用 kcp 协议的时候,增加一条 udp 的映射

Client端

稍有不同的是需要将 server_port 改为映射后的端口,如上图中的 37000 ,server_addr 实测支持填写域名

NPS

一个有更好 WebUI 的穿透工具,并且可以直接操作 Server 端就能完成映射,在增减映射的时候不用重启服务,避免了想重启服务但关闭服务导致 ssh 掉线然后服务无法开启因此失联的尴尬局面,当然,为了更保险起见,笔者同时开了 FRP 和 NPS 服务,防止掉线后无法重连的尴尬,当然,后面加入了 ZeroTier 实现了三重保险,本文使用的是 0.26.9 版本

https://github.com/ehang-io/nps

普通服务器

Server端

下载Release包,解压然后进入目录,安装

./nps install

默认情况下,服务已经安装到  /etc/nps  文件夹中,编辑配置文件  /etc/nps/conf/nps.conf  

一般情况下修改这四行内容即可

http_proxy_port=未被占用的端口
https_proxy_port=未被占用的端口
web_username=用户名
web_password=密码

因为很可能服务器的80和443端口已经用来开启其他服务了,所以直接运行会报错,因此需要修改成未被占用的端口,并填写用户名和密码,在放行 8080 端口后开启服务就可以访问到后台了

nps start

点击  客户端 - 新增 - 新增  使用默认配置新增一个服务器,可以自行选择是否加密和压缩,然后点击  隧道 - 新增  新增一个映射,以上图为例,则  服务器端口  填写 6000 , 目标 (IP:端口)  填写  ip:5000  或者  127.0.0.1:5000 

然后返回  客户端列表  点击服务器左侧加号,可以得到一条如下所示的  客户端命令  ,复制后配置客户端时使用,记得放行防火墙端口

./npc -server=服务器IP:端口(默认8024) -vkey=自动生成的密钥 -type=tcp

如果需要修改默认端口8024,可以修改  bridge_port  后重启生效(理论上),卸载可以执行  nps uninstall  后通过  whereis nps  找到残留文件删除即可

Client端

首先防火墙放行相应端口,然后解压压缩包然后进入目录并执行上面复制的  客户端命令 ,理论上,刷新后台即可看到客户端状态均变为绿色,因为是直接用 ssh 执行的命令,因此如果未正常连接,可以通过日志来查错和修正,基本的排查错误的思路和 FRP 相同

NAT服务器

Server端

和上面完全相同

Client端

稍有不同的是需要将  客户端命令  改为映射后的端口,如上图中的 37000 , 服务器IP  实测支持填写域名

ZeroTier

如果阅读了上面两个工具的 Github 页面或者官方文档,就会发现,里面都提到了一个 P2P 的方式,但是尝试后会发现很多时候甚至无法连接,那么,有没有一个专门做 P2P 连接的服务呢,这个就是了,本文使用的是 1.4.6 版本

https://github.com/zerotier/ZeroTierOne

Leaf节点

这里面的概念发生了一些变化,因为这个的目的是将所有用户连接起来形成一个局域网,因此所有用户都是平等的,也就没有服务端和客户端的区别了,增加一个用户相当于增加了一个 Leaf 节点,可以使用一件安装包, Windows 用户去下载 exe 文件即可,如果 debian 系统下提示没有 sudo 同时又在 root 用户下,去掉 sudo 即可

curl -s https://install.zerotier.com | sudo bash

如果安装时提示  NO_PUBKEY 1657198823E52A61  ,则需要添加公钥,这种情况一般是使用了第三方的镜像导致的,比如清华源、阿里源

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1657198823E52A61

安装完后就可以通过  zerotier-cli  配置服务器了,首先,开启服务并设置开机自启

systemctl start zerotier-one
systemctl enable zerotier-one

打开官网创建账号然后新增网络

https://my.zerotier.com/network

然后获得一个  Network ID  ,所有节点加入网络都使用相同的命令,Windows 下就使用 CMD 来执行

zerotier-cli join ID

如果成功则会返回

200 join success

打开防火墙的 9993 的 udp

然后在官网中打开该网络的设置页面,在  Members  中就会多出一个成员,即 Leaf 节点,左侧打钩即可同意加入网络,当有超过两个节点之后,就可以通过内网IP  Managed IPs  相互连通了,这个页面似乎是会进行 ajax 刷新的,所以不需要手动刷新

Moon节点

但如果连接国外 Planet 服务器的效果不够好怎么办,可以自行搭建 Moon 节点当中转站,首先,将 Moon 节点按上面方法加入网络,然后新增 Moon 配置

cd /var/lib/zerotier-one
zerotier-idtool initmoon identity.public > moon.json

修改配置文件  moon.json  ,在括号内填入公网 ip 和端口,注意需要双引号,同时复制一个类似  ["id": "18fasd2319"] 的 ID ,后面让其他 Leaf 节点加入时使用 

"stableEndpoints": ["公网IP/9993"]

在该目录下生成 Moon 文件,文件名类似于 00000018fasd2319.moon

zerotier-idtool genmoon moon.json

新增 moons.d 文件夹,即  /var/lib/zerotier-one/moons.d/  ,然后将 00000018fasd2319.moon 文件移入,然后重启服务

systemctl restart zerotier-one

其他节点加入的方式都是输入以下命令, ID 需要改为实际值

zerotier-cli orbit 18fasd2319 18fasd2319

重启服务后查看是否添加成功

zerotier-cli listpeers
zerotier-cli listmoons

listpeers 列出了局域网内所有的节点,包括官方的行星中转节点Planet、所有用户的叶子节点Leaf以及自建的月亮中转节点Moon,一行为一个节点,如果没有看到 Moon 节点则添加失败, listmoons 如果返回为空则失败

当然可以新建目录  /var/lib/zerotier-one/moons.d/  ,然后复制 moon 文件到文件夹下,重启服务后查看是否生效

Windows下的默认目录在  C:\ProgramData\ZeroTier\One\moons.d  ,新建文件夹然后复制进去,重启(停止然后启动)服务(打开开始菜单然后搜索服务即可找到)即可,Windows 下会自动开启防火墙端口,不需要更多的设置,如果执行 zerotier-cli 的命令时出现 missing authentication token ,则需要用管理员身份启动 CMD ,如果出现了服务不正常的情况,可以尝试手动重启服务

两个 Leaf 节点如果打通则速度取决于两端的带宽和延时,与中转节点无关,如果两个 Leaf 节点之间未能成功打通,则会走服务器中转

NAT服务器对比

CloudIPLC

https://www.cloudiplc.com/

需要实名认证,仅能开启一个服务器,电信移动联通均有,最便宜的 1C+384M+4G+600G ,价格为30元一个月,这个大小的内存如果重装纯净版,仅能安装 Debian9 , CentOS 和 Debian10 都是装不上的,512M 的内存可以装 Debian10 ,具体的重装教程请阅读下一篇文章

需要手动映射内网端口到公网端口上,TCP和UDP分开映射,考虑 ssh 端口占用一条,则可以开额外十条映射

如果使用 FRP 的 KCP 模式,通信端口占用 TCP + UDP 两个映射,则可以映射 8 个额外的端口,

如果使用 NPS ,通信和 WebUI 占用两个端口,同样有额外 8 个端口可用,如果使用纯文本配置,则多一个,但是会麻烦很多,用 NPS 就是看上了他的 WebUI,如果使用

如果使用 ZeroTier,emmmmmm,为什么一个中转服务器要开这么个服务器啊淦,随便开个普通的服务器就好了

不过不太能够理解的是,因为不明原因,在穿透可道云的时候,加载含大文件的文件夹时百分百会出现  Ajax Error ,无法打开  AriaNG ,在重装清华源 Debian9 、开启 BBR 、检查 MTU 、手动部署 Nginx-1.14.2 、手动部署 PHP7.3-FPM 、提高所有超时和大小限制之后问题依旧,于是只能放弃,不过在下载时,速度比较稳定,能长期维持 5MB/s 的速度,因为百兆是进出口带宽,在中转的时候同时进出,所以满速就是 5MB/s 左右,如果有 dalao 能解决上述问题,欢迎评论区留言和讨论

OLVPS

https://olvps.com/

不需要实名认证,能开启多个服务器,电信移动联通均有,最便宜的仅有 256M 内存,考虑到上面的经历,尝试了下 512M 内存的服务器,价格稍贵,读者可以尝试更便宜的那一款,进去后成功重装清华源的 Debian10 

固定开启一个端口段,需要在使用的时候将端口改到相应的端口段内,不过好处是 TCP 和 UDP 可以同时开启,直接在防火墙上放行即可,因此最多有 10 个端口(20 条规则映射)

测试可道云穿透和 AriaNG 穿透均正常,不过速度不是很稳定,经常会掉到几百 K ,在开启 BBR 之后情况依旧,那么,有什么理由让我不使用 ZeroTier

感谢

ZeroTier-One配置moon心得
https://blog.****.net/coldboy258/article/details/93133860
centos查看实时网络带宽占用情况方法
https://www.cnblogs.com/agang-php/p/6210900.html

原文地址:https://www.cnblogs.com/Pyrokine/p/13847413.html