本文环境

  1. CentOS Linux release 7.8.2003
  2. Nps 0.26.9

1. NPS介绍

Nps是一个内网穿透工具,开源。
Github:https://github.com/ehang-io/nps

特征:

  1. 全面的协议支持,与几乎所有常用协议兼容,例如tcp,udp,http(s),socks5,p2p,http代理...
  2. 全面的平台兼容性(Linux,Windows,MacOS,Synology等),仅支持将安装作为系统服务进行。
  3. 全面控制,允许客户端和服务器控制。
  4. Https集成,支持将后端代理和Web服务转换为https,并支持多个证书。
  5. 只需在Web ui上进行简单配置即可完成大多数要求。
  6. 完整的信息显示,例如流量,系统信息,实时带宽,客户端版本等。
  7. 强大的扩展功能,一切可用(缓存,压缩,加密,流量限制,带宽限制,端口重用等)
  8. 域名解析具有诸如自定义标题,404页面配置,主机修改,站点保护,URL路由和全景解析之类的功能。
  9. 服务器上的多用户和用户注册支持。

本文使用的安装材料:
链接:https://pan.baidu.com/s/18COdcy8niyGZLdikNlDXgw
提取码:w6dq

2. 服务端部署

下载安装包并解压:

wget https://github.com/ehang-io/nps/releases/download/v0.26.9/linux_arm64_server.tar.gz

tar -zxvf linux_arm64_server.tar.gz

进入解压后的conf目录,编辑nps.conf配置文件,可修改其中部分配置,本文根据需要修改了如下配置:

# 修改http和https端口号
http_proxy_port=82
https_proxy_port=445

# 修改web的密码和端口占用等信息
web_host=nps.nineya.com
web_username=admin
web_password=123456
web_port=8088

nps安装:
这不是一个必须的步骤,但是安装后nps将被拷贝到/bin目录,其他文件拷贝到/etc/nps目录,修改解压路径的文件将不再生效了。

./nps install

启动:
也许这是当前版本的一个bug,亲测使用nps start命令是无法启动的,但是直接nps是可以启动的。

# 未安装则在解压目录启动
./nps

# 安装后可直接使用命令
nps

3. 进阶部署

nps直接启动时不是后台运行,而且不能输出日志,不能设置为开机自启啥的,不怎么方便。所以本文将nps做成了linux的服务,用于保证开机自启。

为实现将程序输出写入文件功能,编写实现了如下脚本,放在nps根目录:
该脚本实现创建logs目录,每次启动将程序输出写入日志文件功能。

#!/bin/bash
home_dir=$(dirname $(readlink -f "$0"))
logs_dir=$home_dir/logs
if [ ! -d $logs_dir ]; then
  sudo mkdir -p -m 755 $logs_dir
fi
$home_dir/nps >> $logs_dir/run-$(date "+%Y%m%d%H%M%S").log

使用vim创建service文件

sudo vim /etc/systemd/system/nps.service

nps.service内容:

[Unit]
Description=Nps Service
Documentation=https://nps.nineya.com
After=network-online.target
Wants=network-online.target

[Service]
User=root
Type=simple
ExecStart=/bin/bash /www/wwwroot/nps.nineya.com/run.sh
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
StandOutput=syslog

StandError=inherit

[Install]
WantedBy=multi-user.target

4. web配置

打开浏览器,登录nps的web端:
进入客户端选项,点击左上角新增按钮,选择默认配置即可,添加一个客户端。

本文目的是实现windows远程桌面功能,远程桌面的端口是3389,所以本文添加了一个TCP隧道,配置如下:

  • 客户端ID:刚刚添加的客户端的ID
  • 服务端端口:访问nps服务端的端口
  • 目标 (IP:端口):被穿透的目标机子ip和被穿透的端口号,如果是nps客户端所在的机子可以不填写ip
    新增TCP隧道

5. 客户端配置

下载安装包解压,打开cmd,定位到解压路径。

进入web的客户端界面,查看启动命令,将该命令复制到终端执行即可:
查看启动命令

可通过修改conf/npc.conf配置启动参数,无须在启动时添加参数。

同样可以将客户端做成服务用于开机自启,windows本文提供了一个服务制作的工具(SRVINSTW.EXE),在本文提供的压缩包里。