网络应用

内网穿透工具nps使用教程(一)

nps简介

与ngrok、frp等老牌内网穿透工具相比,nps可以算是一匹黑马。其优势主要有两点:一是强大的网页管理面板,nps可以在服务端通过网页管理所有用户行为以及映射记录;二是它集成了多种协议,包括tcp/udp隧道,socks5以及p2p,可以满足多种需求。点击前往开发者网页

视频教程

服务端安装

首先,我们需要一台拥有静态公网IP的服务器。国内推荐使用腾讯云阿里云,国外推荐Linode以及hostus。不熟悉服务器租用流程的,可以直接在天猫搜索阿里云官方店铺向客服咨询开通流程。

服务器选购方面,建议购买Linux系统(推荐CentOS6/CentOS7),用作内网穿透的话对CPU性能、内存、以及硬盘容量都没有要求,选择最便宜的即可。网络带宽速度则取决于使用场景,可以大致参考以下表格


应用名称  |协议       |推荐服务器带宽|网络延迟(本地ping服务器)
远程桌面  |tcp/udp隧道|>5mbps      |<50ms
游戏开服  |tcp/udp隧道|无要求       |<80ms
个人云端  |p2p连接    |无要求       |无要求
         |tcp/udp隧道|越快越好     |无要求
游戏串流  |socks5    |>10mbps     |<30ms
网站调试  |http/https|无要求       |无要求



按自身需求购买服务器后,请从供应商处获取ssh登陆信息。Windows系统推荐下载PuTTY[官网下载|直接下载]或WinScp[官网下载|直接下载]进行ssh连接,Mac系统可直接在终端中输入指令连接

ssh -p <服务器ssh端口,默认为22> root@<服务器IP地址>



ssh连接成功后,就可以开始配置服务端了。
首先请确保防火墙开放了所有端口,检查方式如下

iptables -L -n

如果得到以下结果则证明端口已全部开放
iptables_check.png

否则可以使用以下命令关闭防火墙

CentOS6:
systemctl stop iptables
systemctl disable iptables
CentOS7:
systemctl stop firewalld
systemctl disable firewalld

如果你使用的是其他Linux发行版,或以上命令无效,请自行搜索Linux如何关闭防火墙。
另外,如果你使用了腾讯云或阿里云的服务器,则需要前往网页控制台配置防火墙,详细情况可咨询客服或搜索腾讯云/阿里云如何开放全端口。

确保全端口开通后,我们可以前往GitHub页面下载内网穿透软件nps了。请选择和自己系统对应的release版本,本篇教程使用Linux系统服务器,所以选择linux_amd64_server.tar.gz。右键复制下载链接,在ssh窗口中输入以下指令下载


wget --no-check-cetificate <下载链接>

下载完成后,可在ssh窗口输出"ls"查看当前目录下的文件,确认刚刚下载的压缩包是否存在
ls.png
确认无误后,开始解压缩

tar -zxf ./<压缩包名称>

解压后,可以用"ls"看到目录下多出了一个nps文件夹,进入这个文件夹

cd ./nps

并编辑配置文件

vi ./conf/nps.conf

按下"i"开始编辑,编辑完成后按"Esc"退出编辑模式,在输入":wq"保存并退出。自带配置文件比较复杂仅供参考,以下为我自行精简过的配置文件,可用于替换原本的配置文件。标注的地方请按自身情况修改


appname = nps
#Boot mode(dev|pro)
runmode = dev

##bridge
# 底层通信协议,默认tcp,可选用kcp
bridge_type=tcp
# 底层通信端口,默认8024,如已被占用请指定其他端口
bridge_port=8024
bridge_ip=0.0.0.0

# 当客户端以配置文件模式启动时会用到的验证密钥,可自行设置,本教程不会使用到
public_vkey=<你的通信密钥>

#web
web_host=<服务器IP或域名>
web_username=<设置用户名>
web_password=<设置密码>
web_port = <网页面板端口>
web_ip=0.0.0.0

详细的配置参数,请参考开发者网站说明

编辑完成并保存退出后,请使用以下命令启动nps服务


./nps start  /* 后台启动服务 */
./nps stop  /* 结束后台进程 */
./nps reload  /* 重新加载配置 */
./nps  /* 前台启动服务 */

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

客户端配置

首先,在内网设备中下载对应的nps客户端,下载地址与服务端下载地址相同。本教程使用Windows10(64位)设备做演示,所以下载win_amd64_client.tar.gz(32位系统请下载i386的版本)。下载完成后,放在合适的目录并解压缩。

与传统内网穿透软件不同,nps最大的特点就是可以在网页面板完成所有对客户端的配置和管理,完全无需在客户端编辑配置文件(当然,如果你愿意,也可以在客户端完成所有配置而不去理会网页管理面板)。本篇教程将会演示如何使用网页进行配置。首先,登录管理面板"<服务端IP或域名>:<面板端口>",在左侧导航栏找到"客户端",并选择添加一个客户端
add_client.png
add_client2.png
添加完成后,可以在列表中看到客户端信息,且客户端处于offline状态(因为我们还未在内网设备上输入指令连接服务端)。点击左侧按钮查看详细信息,我们可以看到系统生成(或手动指定)的通信密钥,以及客户端连接服务端的命令。
add_client3.png
Windows下使用的命令与面板中显示的有所不同,请把"./npc"部分替换为"npc",
前往存放nps客户端的目录并启动cmd(PowerShell是否可用还未测试),
在打开的窗口中输入网页面板显示的连接指令

npc -server_addr=<服务端IP或域名>:8024 vkey=<验证密钥> type=tcp

如果没有报错,可以访问网页管理面板查看客户端是否变为online状态。如进入online状态,则可以前往下一篇教程添加内网穿透规则。
pc_online.png

回复 / 取消回复

  1. muwne muwne
    Chrome 63 10

    如果报错了怎么办,端口也开放了,还是显示“[E] [client.go:57] The connection server failed and will be reconnected in five seconds, error dial tcp 【 IP地址:端口】: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.”

    1. maizer maizer
      Safari 13

      查看服务端log,或者把服务端掉到前台运行,再尝试连接,看报错时服务端出现了什么问题

  2. liu liu
    Firefox 72 10

    ./nps start 这一步报错怎么办 Failed to start nps内网穿透代理服务器: exit status 5

    1. 诺欢. 诺欢.
      Chrome 80 10

      ./nps install

  3. Len Len
    Chrome 80 10

    配置文件不生效怎么办?
    我修改了您提供的文件之后,重启然后 reload提示fail。

    1. maizer maizer
      Edge 17 10

      尝试使用./nps stop ./nps start来重启。如果还是不行,有可能是nps版本更新导致的。请把配置文件更改会原来的,在逐一修改参数(结合本教程,按实际情况修改)

      1. yy yy
        Chrome 63 7

        所以最新版本该怎么启动

  4. peng peng
    Chrome 79 10

    启动的时候报 -bash: ./nps: 无法执行二进制文件 这种错误应该怎么处理啊,大佬们

  5. beidaomitu beidaomitu
    Chrome 74 10

    2020/02/23 01:02:28.407 [I] [nps.go:178] the version of server is 0.26.2 ,allow client core version to be 0.26.0
    2020/02/23 01:02:28.408 [I] [connection.go:36] server start, the bridge type is tcp, the bridge port is 8024
    2020/02/23 01:02:28.410 [I] [server.go:200] tunnel task start mode:httpHostServer port 0

    2020/02/23 01:03:29.339 [I] [bridge.go:172] The client 111.58.111.87:11610 version does not match
    2020/02/23 01:03:38.229 [I] [bridge.go:172] The client 111.58.111.87:11626 version does not match

    配置都对了,但是就是启动不了。。。访问web8080没反应,8024就出现上面这两行。

  6. kenuacu kenuacu
    Chrome 79 10

    这个博客是自己搭的吗?好棒啊,我刚买了个域名,准备自己搭一个玩玩嘿嘿

  7. Erroraaah Erroraaah
    Chrome 80 10

    大概nps启动成功了,但是进不去网页管理面板怎么破

  8. James Zim James Zim
    Chrome 80 10

    [E] [nps.go:131] Valid actions: ["start" "stop" "restart" "install" "uninstall"]
    Failed to start nps内网穿透代理服务器: exit status 5

  9. Leonard Leonard
    Edge 18 10

    Failed to start nps内网穿透代理服务器: exit status 5
    前面的终于都没什么问题了,最后一步start的时候启动失败了,请问是什么原因?

    1. qiuqiu qiuqiu
      Chrome 80 7

      [E] [nps.go:131] Valid actions: ["start" "stop" "restart" "install" "uninstall"]
      Failed to start nps内网穿透代理服务器: exit status 5

      使用命令 ./nps install /* 安装nps服务 */

      在使用命令 ./nps start /* 后台启动服务 */

  10. cc cc
    QQ 10 10

    e 213 求告知

  11. CandleViod CandleViod
    Chrome 84 10

    我在最后的客户端配置中,用的windows自带的powershel运行的命令,出现了以下情形2020/07/22 16:41:46.531 [I] [npc.go:231] the version of client is 0.26.8, the core version of client is 0.26.0
    2020/07/22 16:41:46.551 [I] [control.go:97] Loading configuration file conf/npc.conf successfully
    2020/07/22 16:41:48.560 [E] [control.go:111] dial tcp 127.0.0.1:8024: connectex: No connection could be made because the target machine actively refused it.

    描述好像是端口拒绝了访问,客户端方面我关闭了防火墙,服务端方面,是阿里云的服务器,我开放了所有的端口。请问一下,这要怎么解决?

  12. ubsoftserver ubsoftserver
    夸克

    omv和nps一起装在debian里为啥都打不开了,dalao求解惑

  13. daze daze
    Chrome 78 10

    楼上启动有问题的,楼主的配置文件不用直接用了,改自带的就行

  14. mchotdog mchotdog
    Chrome 86 10

    Sever已新增完毕,允许客户端通过配置文件连接否,其他两个是,按理说应该没问题了
    但是Client执行npc -server=ip:port -vkey=xxx -type=tcp时提示
    [E] [client.go:63] The connection server failed and will be reconnected in five seconds, error dial tcp ip:port: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
    PS.使用cmd非powershell

  15. [...]感谢开源软件开发者,github链接https://github.com/cnlh/nps/感谢maizer制作图文版的教程[...]

  16. 不会设名字的我 不会设名字的我
    Chrome 106 10

    我搞了个半自动的安装脚本(不搞全自动是要确认选项)
    详见https://www.bilibili.com/read/cv19113871
    一键下载并打开脚本:yum -y install wget && wget --no-check-certificate https://download.starxvei.cn/NPS_Setup.sh && chmod 777 NPS_Setup.sh && sh ./NPS_Setup.sh

  17. jujuju jujuju
    Chrome 120 10

    博主 你好,请问内网的站点 怎么配置https呢,有没教程,一直报错

This is just a placeholder img.