前言
在之前的文章中,我们介绍了两种内 穿透工具frp和zerotier。frp可参照《利用frp工具实现内 穿透、随时随地访问内 服务》,zerotier可参照《ZeroTier实现内 穿透、异地组 》。
应当说各个工具均有其各自的优缺点。zerotier的缺点主要集中在:①安全性比较低;②免费版连接数量有限制;③每个终端均需要安装客户端。frp虽然避免了连接数量限制、每个终端安装客户端的麻烦,但其存在:①连接稳定性不够,比如长时间不使用后,客户端与服务端会出现连接超时的情况;②访问端自建立连接后、间隔一段时间再访问服务会出现响应较慢的情况;③管理界面不够友好,无法手动配置。
那么有没有一种工具可以同时解决以上问题呢,答案就是:NPS。实际上,NPS这款工具我也是在上一篇frp文章分享的底部评论中首次听说,这几天趁着空闲时间,研究了一下,果然非常强大!今天就带着实操案例和大家简单分享一下。
一、NPS简介
1.关于NPS
一款轻量级、高性能、功能强大的内 穿透代理服务器。支持tcp、udp、socks5、http等几乎所有流量转发,可用来访问内 站、本地支付接口调试、ssh访问、远程桌面,内 dns解析、内 socks5代理等等……,并带有功能强大的web管理端。
NPS项目地址:
https://github.com/ehang-io/npsNPS中文文档:
https://ehang-io.github.io/nps/#/?id=npsNPS下载地址:
https://github.com/ehang-io/nps/releases/
2.NPS常见用途
- 想在外 通过ssh连接内 的机器,做云服务器到内 服务器端口的映射,—-> tcp代理模式
- 在非内 环境下使用内 dns,或者需要通过udp访问内 机器等—-> udp代理模式
- 在外 使用HTTP代理访问内 站点—-> http代理模式
- 搭建一个内 穿透ss,在外 如同使用内 vpn一样访问内 资源或者设备—-> socks5代理模式
3.NPS特点
二、安装部署
NPS提供了多种安装方式,分别为安装包安装、源码安装以及docker安装。我们这里选用的是安装包安装。
1.个人需求
1)远程桌面
在家中的Windows电脑上访问公司的Windows办公电脑。
2)访问指定内 服务
在任意可以访问互联 的终端设备的浏览器上访问公司内 服务器部署的gitlab、jira、Jenkins等内 服务,满足出差或居家办公需求。
2.部署规划
部署NPS同样需要一台带有公 IP地址的服务器,用于与内 服务的端口之间建立映射关系,IP地址假设为1.1.1.1;
服务器 |
地址 |
用途 |
公 服务器 |
1.1.1.1 |
部署服务端 |
内 服务器1 |
192.168.1.123 |
部署客户端 |
内 Windows办公电脑 |
192.168.1.131 |
部署客户端 |
其他Windows或Mac设备 |
– |
能上 即可,用于访问内 服务 |
2.安装服务端
1)下载解压安装包
下载对应的系统版本即可,服务端和客户端是单独的,因此需要下载多份文件。
将下载下来的服务端压缩包上传到公 服务器上并解压:
2)目录解读
解压成功后,会得到以下文件及目录:
2)安装NPS
3)启动NPS服务
如果发现没有启动成功,可以使用nps(.exe) stop,然后运行nps.(exe)运行调试,或查看日志(Windows日志文件位于当前运行目录下,linux和darwin位于/var/log/nps.log)
4)前台访问
http://公 ip:8080访问nps登录页面:
使用用户名和密码登陆(默认admin/123,正式使用一定要更改,可以通过conf/nps.conf文件修改)
5)新增客户端
在web管理页面–客户端,点击“新增”创建一个客户端,填写内容如下:
创建,点击客户端前面的+ ,会自动展开并展示客户端命令,复制此条命令,后面会用到。
创建Windows和Linux客户端步骤一样,没有任何区别,只要设置的唯一验证密钥不一致,并且你能区分开哪个是Linux的、哪个是Windows的即可。
3.Linux安装客户端
1)下载解压安装包
将下载下来的客户端上传到内 服务器,随后进入文件所在目录并解压:
2)连接服务端
在客户端终端上执行前面复制的命令,连接服务端(linux直接执行即可,windows将./npc换成npc.exe用cmd执行)。其中vkey就是我们前面创建客户端时设置的唯一验证密钥。
注意,如果出现如下图所示的连接超时情况,很可能是服务端所在的云服务器的安全组或防火墙没有放开8024端口
需要到安全组设置中放开8024端口:
再次执行连接命令,即可连接成功:
此时,web管理端中该客户端的连接就会处于在线状态:
3)注册到系统服务(可选)
上述在终端命令行执行连接命令,连接成功后一直处于前台执行,其他什么也做不了,一旦Ctrl+C就会强行终止,带来诸多不便,除非另开一个终端窗口。此时可以将其注册到系统服务,从而实现后台运行:
4.Windows安装客户端
1)下载解压安装包
将下载下来的客户端复制到需要穿透的内 Windows电脑,随后进入文件所在目录,使用解压工具进行并解压,解压成功后会得到以下文件及目录:
注意:npc-update.exe是后面启动客户端成功后生成的,不是一开始解压出来的。
2)连接服务端
在客户端终端上执行前面复制的命令,连接服务端(windows将./npc换成npc.exe用cmd执行)。其中vkey就是我们前面创建客户端时设置的唯一验证密钥。
此时,web管理端中该客户端的连接就会处于在线状态:
3)注册到系统服务(可选)
此时在NPC已注册到Windows系统服务列表中,且处于正在运行状态:
注意: 如果需要更换命令内容需要先卸载npc.exe uninstall,再重新注册 。
三、配置穿透服务
我们本次的主要目的是通过TCP隧道实现远程桌面以及jira等内 服务的远程访问,所以会重点讲解TCP隧道的配置过程。
1.远程桌面(TCP隧道)
场景:想通过访问公 服务器1.1.1.1的6000端口,连接内 Windows个人办公电脑的3690(Windows远程桌面默认端口),实现远程桌面的连接。
1)创建TCP隧道
服务端端口填写6000,内 端口填写3690,可以不带ip地址,前提是客户端ID要是Windows那台设备对应的ID,另外公 服务器的安全组中需放开6000端口。
2)访问远程桌面
特别注意:被远程访问的电脑,需要提前在设置中打开允许被远程访问。
① 在其他可以访问互联 的Windows电脑上,通过win+R键调出运行窗口,输入mstsc回车
② 随后在弹出的远程桌面连接窗口中输入公 IP地址:6000,并点击连接。需注意用户名填写正确。
③ 填写该用户的访问密码,即锁屏密码
④ 用户名及密码正确,连接后会显示远程桌面的内容
2.内 服务映射(TCP隧道)
场景: 想通过访问公 服务器1.1.1.1的8888端口,连接内 机器192.168.1.123的8888端口,实现内 8888端口所在服务的访问。具体步骤如下:
1)创建TCP隧道
在刚才创建的客户端隧道管理中添加一条tcp隧道,填写监听的端口(8888)、内 目标ip和目标端口(192.168.1.123:8888),保存。
如下图列表所示,我在多台服务器上分别安装了客户端,并配置了多个内 服务(指定端口)的隧道转发
2)访问内 服务
① 访问mayfly-go
在之前的文章中分享过mayfly-go,详情可参照《一站式Linux&数据库管理平台mayfly-go》。访问公 服务器ip:8888,就相当于访问内 192.168.1.123:8888,访问页面如下:
通过穿透后的mayfly-go,即可随时随地在web端的ssh终端操作管理内 服务器以及内 服务器了,nice!
② 访问jira
jira部署在内 的211服务器上,端口为8088,访问公 IP:8088,也就相当于访问192.168.1.211:8088。
如果因为疫情居家办公,bug库部署在内 上,而恰好又需要提单或修复bug,通过这种内 穿透进行访问bug库倒也不失为一种好的选择。尽管受限于公 服务器的带宽限制,访问速度可能会稍微慢一些,不过聊胜于无。
小结
以上就是NPS的简单介绍,以及利用NPS实现远程桌面与内 服务穿透访问的全过程。总体来说,NPS比zerotier更加安全,没有连接数量上的限制;比frp反应速度更快,且支持可视化配置,省去因修改客户端配置而导致的来回重启客户端的麻烦。
除了上述提到的TCP转发外,NPS还提供了多种内 穿透模式:
由于时间仓促,我还没有来得及一一试用,大家感兴趣的可以对照官方文档自行体验。也欢迎留言与我交流!
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!