内网穿透工具NPS安装使用

Posted 幽反丶叛冥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内网穿透工具NPS安装使用相关的知识,希望对你有一定的参考价值。

摘要:在内网部署的 gitlab 同事在出差的时候,导致无法使用,继而重新回到以前使用的 马云gitee 上面。这里记录一下通过 nps 将gitlab 映射到公网,使其可以直接访问。

相关文章


一、nps优势及所需环境

1.1 nps优势

  1. 强大的网页管理面板,nps可以在服务端通过网页管理所有用户行为以及映射记录.
  2. 集成了多种协议,支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),还支持内网http代理、内网socks5代理、p2p等。


在进行安装前可以自行细读官网教程,教程很详细
nps下载地址: https://github.com/ehang-io/nps/releases
nps使用教程: https://ehang-io.github.io/nps/#/?id=nps

1.2所需环境

  1. 一台有公网IP的服务器(VPS)运行服务端(NPS)
  2. 一个或多个运行在内网的服务器或者PC运行客户端(NPC)


实际环境
公网IP服务器:阿里云ESC服务 Centos 7.4
[root@izm5e1om21c063c81zk7k8z ~]# lsb_release -a
LSB Version:	:core-4.1-amd64:core-4.1-noarch
Distributor ID:	CentOS
Description:	CentOS Linux release 7.4.1708 (Core) 
Release:	7.4.1708
Codename:	Core
[root@izm5e1om21c063c81zk7k8z ~]# 

内网分别使用了部署gitlab的 Centos 7.9 及一台 win10测试机


二、服务端安装

此处以安装包直接安装为例

1、关闭防火墙
这里我处理的比较粗暴,直接关闭了防护墙,因为 nps 配置的端口太多了,比较麻烦。

查看防火墙状态,下方表示防火期处于关闭状态

[root@izm5e1om21c063c81zk7k8z conf]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
[root@izm5e1om21c063c81zk7k8z conf]#

确保防火墙开放了所有端口

[root@izm5e1om21c063c81zk7k8z conf]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@izm5e1om21c063c81zk7k8z conf]# 

关闭防火墙

[root@izm5e1om21c063c81zk7k8z conf]# systemctl stop firewalld
[root@izm5e1om21c063c81zk7k8z conf]# systemctl disable firewalld
[root@izm5e1om21c063c81zk7k8z conf]#

2、下载解压安装包
通过自己的电脑,打开 安装包下载地址 选择自己所需要的服务端版本(其中 server 为服务端,解压后为 nps,client 为客户端,解压后为 npc)。下载好后通过 xftp 将压缩拷贝至服务器(这里暂定压缩包及安装地址为 usr/nps 目录)。在拷贝成功后进入压缩包所在位置目录,进行解压。
[root@izm5e1om21c063c81zk7k8z usr]# cd nps
[root@izm5e1om21c063c81zk7k8z nps]# ls
linux_amd64_server.tar.gz
[root@izm5e1om21c063c81zk7k8z nps]# tar -xzvf linux_amd64_server.tar.gz

3、修改 nps 配置文件
[root@izm5e1om21c063c81zk7k8z usr]# cd ./nps
[root@izm5e1om21c063c81zk7k8z nps]# ls
conf  linux_amd64_server.tar.gz  nps  web
[root@izm5e1om21c063c81zk7k8z nps]# cd conf
[root@izm5e1om21c063c81zk7k8z conf]# ls
clients.json  hosts.json  nps.conf  server.key  server.pem  tasks.json
[root@izm5e1om21c063c81zk7k8z conf]# vim nps.conf

nps 的配置在 nps.conf 中,通过 vim开始编辑。


#HTTP(S) proxy port, no startup if empty
#域名代理http代理监听端口
http_proxy_port=6020
#域名代理https代理监听端口
https_proxy_port=6030

##bridge
#服务端客户端通信端口 默认为8024
bridge_port=6050

#web
#服务器IP或者域名
web_host=
#web界面管理用户名
web_username=
#web界面管理密码
web_password=
#web界面管理密码
web_port = 6060

注意:若服务器已占用 80/443 端口,请将 httpsProxyPort&httpProxyPort 更换为其它端口,否则端口冲突将导致面板无法开启。
按下"i"或者“insert”开始编辑,编辑完成后按"Esc"退出编辑模式,在输入":wq"保存并退出。
注意:需要在阿里云的安全规则 出站规则规则中进行放行


切换到包含nps文件的目录下进行启动nps

[root@izm5e1om21c063c81zk7k8z nps]# ls
conf  linux_amd64_server.tar.gz  nps  web
./nps start  /* 后台启动服务 */
./nps stop  /* 结束后台进程 */
./nps reload  /* 重新加载配置 */

如果以上不能正常启用,可以采用以下方式,先安装一下

[root@izm5e1om21c063c81zk7k8z usr]# cd nps
[root@izm5e1om21c063c81zk7k8z nps]# ls
conf  linux_amd64_server.tar.gz  nps  web
[root@izm5e1om21c063c81zk7k8z nps]# sudo ./nps install

...
2022/05/18 11:34:56 install ok!
2022/05/18 11:34:56 Static files and configuration files in the current directory will be useless
2022/05/18 11:34:56 The new configuration file is located in /etc/nps you can edit them
2022/05/18 11:34:56 You can start with:
nps start|stop|restart|uninstall|update or nps-update update
anywhere!

[root@izm5e1om21c063c81zk7k8z nps]# sudo nps start

注意:nps install 之后的 nps 不在原位置,请使用 whereis nps 查找具体目录覆盖 nps 二进制文件

[root@izm5e1om21c063c81zk7k8z conf]# whereis nps
nps: /usr/bin/nps /etc/nps
[root@izm5e1om21c063c81zk7k8z conf]# cd ~
[root@izm5e1om21c063c81zk7k8z ~]# cd ../
[root@izm5e1om21c063c81zk7k8z /]# ls
bin   dev       etc   lib    lost+found  media  NDES  proc  run   srv  tmp  var    zghosTest
boot  dump.rdb  home  lib64  lslnb       mnt    opt   root  sbin  sys  usr  yibin
[root@izm5e1om21c063c81zk7k8z /]# cd ./etc/nps
[root@izm5e1om21c063c81zk7k8z nps]# ls
conf  web
[root@izm5e1om21c063c81zk7k8z nps]# vim ./conf/nps.conf
[root@izm5e1om21c063c81zk7k8z nps]# nps stop
[root@izm5e1om21c063c81zk7k8z nps]# nps start
[root@izm5e1om21c063c81zk7k8z nps]# ps -ef|grep nps
root     31571     1  1 09:02 ?        00:00:00 /usr/bin/nps service
root     31583 27387  0 09:02 pts/0    00:00:00 grep --color=auto nps
[root@izm5e1om21c063c81zk7k8z nps]#

其之前的配置文件也完全的加载到 etc/nps这个目录中


4、进入后台管理 web 页
启动后,可以访问网页管理面板(在浏览器中输入"<你服务器的IP或域名>:<网页面板端口>"),如果能打开网页并成功登陆,则说明服务端配置完成。

三、客户端的安装


1、下载解压安装包
通过自己的电脑,打开 安装包下载地址 选择自己所需要的客户端版本(其中 server 为服务端,解压后为 nps,client 为客户端,解压后为 npc)。下载好后通过 xftp 将压缩拷贝至客户端(这里暂定压缩包及安装地址为 usr/npc 目录)。在拷贝成功后进入压缩包所在位置目录,进行解压。
[root@localhost usr]# cd npc
[root@localhost npc]# ls
linux_amd64_client.tar.gz
[root@localhost npc]# tar xzvf linux_amd64_client.tar.gz

2、管理web添加设备

登录管理面板"<服务端IP或域名>:<面板端口>",在左侧导航栏找到"客户端",并选择添加一个客户端 添加完成后,可以在列表中看到客户端信息,且客户端处于离线状态(因为我们还未在内网设备上输入指令连接服务端)。点击左侧按钮查看详细信息,我们可以看到系统生成(或手动指定)的通信密钥,以及客户端连接服务端的命令。 Windows下使用的命令与面板中显示的有所不同,请把"./npc"部分替换为"npc"
[root@localhost npc]# ./npc -server=xxx.xxx.xxx.xxx:xxxx -vkey=xxxxxxxxxxxxxxxx -type=tcp
2022/05/18 12:20:10.477 [I] [npc.go:231]  the version of client is 0.26.10, the core version of client is 0.26.0
2022/05/18 12:20:10.601 [I] [client.go:72]  Successful connection with server 139.129.117.1:6050
2022/05/18 12:30:17.990 [D] [client.go:216]  new tcp connection with the goal of 127.0.0.1:80, remote address:171.88.65.209:2062
2022/05/18 12:30:17.990 [D] [client.go:216]  new tcp connection with the goal of 127.0.0.1:80, remote address:171.88.65.209:2063
2022/05/18 12:30:18.480 [D] [client.go:216]  new tcp connection with the goal of 127.0.0.1:80, remote address:171.88.65.209:2064

如果没有报错,可以访问网页管理面板查看客户端是否变为在线状态。如进入在线状态,则可以添加内网穿透规则


四、建立gitlab的TCP隧道

以gitlab代码仓库为例,其默认使用80端口。假设局域网内有一台IP为172.16.1.166的Liunx设备,那么,在同一局域网下,只要访问172.16.1.166:80即可连接。但如果想要从外网连接,则必须添加一条tcp转发规则,把内网设备的80端口,映射到服务端的某个端口,这里假设使用服务器的10000端口。假如服务器IP为12.34.56.78,那么,映射完成后,外网访问12.34.56.78:10000的请求会全部被转发到172.16.1.166:80,也就是说,访问12.34.56.78:10000即可连接内网的liunx设备。具体配置如下。

先登录网页管理面板,选择客户端,对对应的客户端右侧点击隧道,就可以快速的创建。 在阿里云的安全规则 出站规则规则中进行放行。 完成后,尝试通过 服务器IP:外网端口 连接内网liunx设备,如可以成功连接,则内网穿透成功。 在gitlab的http克隆链接中,还是对应的局域网地址,需要自己手动在开发工具git配置链接中更换为映射的 ip:prot

五、域名http的配置


六、参考链接

内网穿透工具nps使用教程
NPS - 轻量级且高性能内网穿透工具(安装使用教程)
nps配置http


以上是关于内网穿透工具NPS安装使用的主要内容,如果未能解决你的问题,请参考以下文章

云原生之Docker实战使用Docker部署NPS内网穿透工具

内网穿透工具nps使用教程 - 来自内部交流群

内网穿透工具nps使用教程 - 来自内部交流群

内网穿透nps初始安装-简单记录

内网穿透nps初始安装-简单记录

内网穿透nps初始安装-简单记录