评论

收藏

[通信技术] 网络穿透神器NPS的使用

网络安全 网络安全 发布于:2021-07-22 14:24 | 阅读数:378 | 评论:0

穿透是指将内网中的软件服务通过网络代理方式暴露给广域网用户。可以实现穿透的方式很多,比如通过防火墙硬件、网络穿透软件来进行实现。本文主要介绍通过NPS软件实现典型的穿透。
NPS介绍nps是一款轻量级、高性能、功能强大的穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还支持内网http代理、内网socks5代理、p2p等,并带有功能强大的web管理端。
其官方网站为:https://ehang-io.github.io/nps
其官网文档对软件的安装、使用描述的非常完整,基本根据官方文档就可以进行顺利安装与使用。
基本概念了解该软件的使用,首先需要了解一个基本的穿透使用场景。

  • 服务器端,一般安装在公网服务器上,是所有内网资源对外的统一入口。
  • 客户端,一般安装在内网服务器上,是内网服务器与公网服务器的桥梁。
  • 客户端连接端口,客户端使用该秘钥连接服务端连接端口建立长连接,用于将公网服务器请求信息转发至对应客户端,对应客户端也通过该端口返回相关信息。
  • 客户端秘钥,在服务端部署完成后,需要建立客户端秘钥,并在客户端连接时需要使用该秘钥进行连接。
一个服务器端,可以对应多个客户端。在服务器端的不同端口,可以映射在不同客户端的对应本地端口之上。
典型场景本文我们设计一个最常见的场景,来说明整个软件的使用过程。我们设定基本需求如下。

  • 我们有一台具备公网IP的服务器,服务器名称为public-server,操作系统为linux
  • 我们有两台内网服务器inner-server1(linux)、inner-server2(windows)
  • 我们将公网服务器的8081端口,映射至inner-server1:80;8082端口映射至inner-server2:80端口。
  • 两个代理协议均为TCP协议
操作步骤
公网服务器public-server(linux)服务端nps安装

  • 首先,需要登录其github项目发布版本页面 (https://github.com/ehang-io/nps/releases ) 下载对应版本服务端nps软件。根据public-server的情况这里我们下载,linux_amd64_server.tar.gz版本。
  • 通过ssh登录public-server,并将文件上传至对应安装目录,需要首先进行解压缩。(假定文件上传至目录/usr/nps)
tar -xzvf linux_amd64_server.tar.gz

  • 解压缩完成后进入解压目录,需要执行对应安装命令,以保障我们可以将nps相关命令与加载至bin资源下
sudo ./nps install

  • 之后我们需要启动相关服务端软件,并在控制台查看是否启动成功。
sudo nps start
配置网络代理并开启publiic-server WEB服务端端口

  • 在启动成功后,我们需要打开防火墙8080端口,使得可以通过浏览器登录其管理台。同时需要打开8024端口,使得客户端可以连接到服务端通讯端口。
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --permanent --add-port=8024/tcp
sudo firewall-cmd --reload

  • 使用浏览器登录相关端口,提示用户名称与密码。使用如下默认用户名密码进行登录。
admin/123

  • 登录成功后一定要修改相关密码,修改配置文件 nps.conf
sudo vim /etc/nps/conf/nps.conf
web_username
web_password

  • 重新启动相关服务并尝试重新登录
sudo nps stop
sudo nps start
通过web管理台配置客户端接入信息

  • 使用浏览器登录相关端口,提示用户名称与密码。使用如下修改后用户名密码进行登录。
  • 点击 客户端 -> 新增 ,依次填写 备注(inner-server1)允许客户端通过配置文件连接(是)压缩(是)加密(是),不填写Basic 认证用户名Basic 认证密码唯一验证密钥
  • 点击 客户端 -> 新增 ,依次填写 备注(inner-server2)允许客户端通过配置文件连接(是)压缩(是)加密(是),不填写Basic 认证用户名Basic 认证密码唯一验证密钥
  • 新建完成后查看客户端清单,保存好两台服务器自动生成的唯一验证密钥客户端ID备用,在这里我们假定其分别为“client-key”、"client-id"

内网服务器inner-server1安装npc(linux)客户端并连接

  • 需要登录其github项目发布版本页面 ( https://github.com/ehang-io/nps/releases ) 下载对应版本客户端nps软件。根据public-server的情况这里我们下载,linux_amd64_client.tar.gz 版本。
  • 通过ssh登录inner-server1,并将文件上传至对应安装目录,需要首先进行解压缩。(假定文件上传至目录/usr/npc)
tar -xzvf linux_amd64_client.tar.gz

  • 解压缩完成后进入解压目录,需要执行对应安装命令,以保障我们可以将npc相关命令与加载至bin资源下,同时设置服务器ip地址端口以及连接秘钥(上一步新建客户端时自动生成并备用的信息)
sudo ./npc install -server=public-server:8024 -vkey=client-key

  • 之后我们需要启动相关服务端软件,并在控制台查看是否启动成功。
sudo npc stop
sudo npc start
内网服务器inner-server2安装npc(windows)客户端并连接

  • 需要登录其github项目发布版本页面 ( https://github.com/ehang-io/nps/releases ) 下载对应版本客户端nps软件。根据public-server的情况这里我们下载,windows_amd64_client.tar.gz 版本。
  • 通过ssh登录inner-server1,并将文件上传至对应安装目录,需要首先进行解压缩。(假定文件上传至目录D:\npc)
tar -xzvf windows_amd64_client.tar.gz

  • 解压缩完成后进入解压目录,需要执行对应安装命令,同时设置服务器ip地址端口以及连接秘钥(上一步新建客户端时自动生成并备用的信息)。
npc.exe install -server=public-server:8024 -vkey=inner-server2唯一验证密钥

  • 之后我们需要启动相关服务端软件,并在控制台查看是否启动成功。
npc.exe stop
npc.exe start
公网服务器public-server(linux)服务端端口映射配置

  • 使用浏览器登录相关端口,提示用户名称与密码。使用如下修改后用户名密码进行登录。
  • 在此需要使用到上文谈到创建客户端后自动生成的客户端ID
  • 选择TCP 隧道->新增 ,依次填写 模式(TCP)、客户端ID(client-id)、备注(inner-server1-80)、**服务端端口(8081)、目标(127.0.0.1:80)
  • 选择TCP 隧道->新增 ,依次填写 模式(TCP)、客户端ID(client-id)、备注(inner-server2-80)、**服务端端口(8082)、目标(127.0.0.1:80)
  • 打开public-server相关防火墙
sudo firewall-cmd --permanent --add-port=8081/tcp
sudo firewall-cmd --permanent --add-port=8082/tcp
sudo firewall-cmd --reload

  • 测试访问public-server:8081/8082端口并观察服务端、客户端日志进行验证转发是否成功。

总结
至此,我们基于nps完成了最常见的穿透配置,其实nps所支持的协议、操作系统非常多,大家可以根据官方文档进行逐步学习、验证即可。整体系统的可用性非常好,我部署了一年没有出现过任何问题。



关注下面的标签,发现更多相似文章