2024最新部署安装NPS高性能反代服务器详细教程和避坑指南

wavemap 2024-07-27 13:37:01 阅读 82

前言

内网穿透是一种将内网服务映射至公网的技术,使我们能从外网访问处于NAT/防火墙之后的内网服务。作为运维人员,不管是远程维护服务器还是调试局域网设备,内网穿透都是一个好用的利器。

本章将介绍最新(2024)部署NPS高性能反代服务器详细教程和避坑指南,将你的内网服务器暴露在公网,当然还为大家准备好玩的玩法,让你的Windows笔记本无论何时只要在联网后就能通过远程桌面控制,不受内网限制,是不是特有意思?快来看看具体如何实现的吧!

原文链接:2024最新部署安装NPS高性能反代服务器详细教程和避坑指南 | BOBO Blog | 波波博客 (soulcloser.com)

icon-default.png?t=N7T8

https://www.soulcloser.com/3951/

关于NPS

关于NPS主要特点:

跨平台支持:支持Windows、Linux、MacOS等多种操作系统平台,可移植性强。协议支持:支持tcp、udp流量转发,可支持任何TCP、UDP上层协议(访问内网网站、本地支付接口调试、SSH访问、远程桌面,内网dns解析等等)资源占用小:整个程序只有几MB大小,对服务器资源占用极小,非常轻量级。使用简单:基于客户端-服务端模式,部署和使用非常简便,不需复杂配置。支持多种工作模式:支持TCP和KCP两种传输模式,可根据网络环境选择合适的模式。Web UI管理:提供Web管理界面,可在线可视化添加、删除、管理内网穿透通道。多层级身份验证:提供vkey和其他身份验证措施,一定程度上保证了安全性。免费开源:NPS基于MIT协议开源免费,可以根据实际需求进行二次开发和修改。

NPS Web UI

部署服务端:NPS

服务器部署环境

一台有公网IP的服务器,操作系统为Linux或Windows。这里以生产环境使用较多的操作系统Centos为例,步骤都一样,只是命令不同罢了。如果是你使用的其他的操作系统可以复制命令让AI给你“翻译”一下。

下载服务端程序

首先,需要在GitHub NPS项目的Releases页面找到对应平台的服务端(server)程序:Release v0.26.10 · ehang-io/nps · GitHub 简单这里就不贴图了。找到之后,右键复制它的下载链接,在终端使用命令下载到当前目录。接下来演示的是基于 x86-64 架构的LInux发行版的命令,如果你是ARM架构的服务器需要改一下下载的链接,命令都一样,安装过程需要root权限。下载安装包命令为:(Centos、Ubuntu、Debian都可以用wget + 安装包链接下载)

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

下载后,使用命令解压缩。解压缩命令这三个操作系统也是一样的

tar -zxvf linux_amd64_server.tar.gz

安装NPS,命令也是一样的。这里也附上了nps的管理命令,比较简单

./nps install #安装nps

nps start|stop|restart|uninstall|update or nps-update update #管理nps

由于内容比较简单这里就不过多贴图片了。安装完成后,需要编辑nps的配置文件<code>nps.conf

配置文件说明

文件的位置: /etc/nps/conf/nps.conf

名称 含义
web_port web管理端口
web_password web界面管理密码
web_username web界面管理账号
web_base_url web管理主路径,用于将web管理置于代理子路径后面
bridge_port 服务端客户端通信端口
https_proxy_port 域名代理https代理监听端口
http_proxy_port 域名代理http代理监听端口
auth_key web api密钥
bridge_type 客户端与服务端连接方式kcp或tcp
public_vkey 客户端以配置文件模式启动时的密钥,设置为空表示关闭客户端配置文件连接模式
ip_limit 是否限制ip访问,true或false或忽略
flow_store_interval 服务端流量数据持久化间隔,单位分钟,忽略表示不持久化
log_level 日志输出级别
auth_crypt_key 获取服务端authKey时的aes加密密钥,16位
p2p_ip 服务端Ip,使用p2p模式必填
p2p_port p2p模式开启的udp端口
pprof_ip debug pprof 服务端ip
pprof_port debug pprof 端口
disconnect_timeout 客户端连接超时,单位 5s,默认值 60,即 300s = 5mins

服务端配置文件说明

编辑nps.conf配置文件

使用编辑器编辑文件,看服务器是什么编辑器了,没有则需要安装

vim /etc/nps/conf/nps.conf #使用vim编辑

这里给出我的配置文件,并标出一些主要需要修改的地方,诸位可根据自己的情况更改

<code><span style="color:#3a4f66"><code>[root@BOBO ~]# cat /etc/nps/conf/nps.conf

appname = BOBO-Blog

#Boot mode(dev|pro)

runmode = dev

#HTTP(S) proxy port, no startup if empty

#http_proxy_ip=0.0.0.0

#http_proxy_port=80

#https_proxy_port=443

#https_just_proxy=true

#default https certificate setting

#https_default_cert_file=conf/server.pem

#https_default_key_file=conf/server.key

#上面这段http打头的是默认的http配置,可全注释<strong>

</strong>

##bridge

bridge_type=tcp #客户端与服务端连接方式kcp或tcp,如果你不清楚kcp则建议默认tcp

bridge_port=8080 #通过此端口连接到nps服务器,不在防火墙放行客户端无法连接到服务器

bridge_ip=0.0.0.0

# Public password, which clients can use to connect to the server

# After the connection, the server will be able to open relevant ports and parse related domain names according to its own configuration file.

public_vkey=123 #客户端使用此内容连接

#Traffic data persistence interval(minute)

#Ignorance means no persistence

#flow_store_interval=1

# log level LevelEmergency->0 LevelAlert->1 LevelCritical->2 LevelError->3 LevelWarning->4 LevelNotice->5 LevelInformational->6 LevelDebug->7

log_level=7

#log_path=nps.log

#Whether to restrict IP access, true or false or ignore

#ip_limit=true

#p2p

#p2p_ip=127.0.0.1

#p2p_port=6000

#web

web_host=127.0.0.1 #本地服务器IP

web_username=BOBO #web管理端登录用户名

web_password=admin #web管理端登录密码

web_port = 30300 #web管理端访问端口,不在防火墙放行端口你是无法打开web的

web_ip=0.0.0.0

web_base_url=

web_open_ssl=false

web_cert_file=conf/server.pem

web_key_file=conf/server.key

# if web under proxy use sub path. like http://host/nps need this.

#web_base_url=/nps

#Web API unauthenticated IP address(the len of auth_crypt_key must be 16)

#Remove comments if needed

#auth_key=test

auth_crypt_key =1234567812345678 #获取服务端authKey时的aes加密密钥,16位

#allow_ports=9001-9009,10001,11000-12000

#Web management multi-user login

allow_user_login=false

allow_user_register=false

allow_user_change_username=false

#extension

allow_flow_limit=false

allow_rate_limit=false

allow_tunnel_num_limit=false

allow_local_proxy=false

allow_connection_num_limit=false

allow_multi_ip=false

system_info_display=false

#cache

http_cache=false

http_cache_length=100

#get origin ip

http_add_origin_header=true

#pprof debug options

#pprof_ip=0.0.0.0

#pprof_port=9999

#client disconnect timeout

disconnect_timeout=60 #客户端连接超时时间,单位 5s,默认值 60,即 300s = 5mins</code></span>

检查配置无误后,保存退出。并执行命令启动nps

nps start

现在你应该可以通过服务器IP+web端口访问你的nps web管理端了。无法打开检查防火墙是否放行端口

NPS Web login

安装客户端:NPC

在内网服务器上下载NPC客户端程序,与服务端保持同版本,不同版本会导致无法连接这里的版本指的是:v0.26.10。(你问我怎么知道🙂避坑)这里我的内网客户端是Linux(根据自己的服务器架构选择),下载到本地并解压缩。地址还是刚才那个:Release v0.26.10 · ehang-io/nps · GitHub

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

tar -zxvf linux_amd64_client.tar.gz

无配置文件模式

解压后,就可以开始连接nps服务器了。有两种模式,此模式的各种配置在服务端web管理中完成, 客户端除运行一条命令外无需任何其他设置。这里我在内网安装了一个nps截图演示(所以你看到的是内网IP)在你的web管理端创建新客户端并获取连接命令

NPS web setting

NPC 连接命令获取

获取连接的命令,粘贴到刚刚的npc终端,运行即可。无法连接请先检查防火墙端口设置。

注册到系统服务(开机启动、守护进程)

上面第一种方法无配置文件模式在生产环境中不太常用,关闭终端后也就断开了连接,每次还要手动执行命令,多麻烦。NPC支持注册到系统服务,开机自启动。这里我从web管理中复制的客户端命令为

./npc -server=172.17.33.53:8024 -vkey=test1234 -type=tcp 现在我要把它注册到系统服务开机自启动,命令为:

./npc install -server=172.17.33.53:8024 -vkey=test1234 -type=tcp 。可以看出来,在后面添加install参数就行了,是不是很好理解😎现在你就可以去web设置TCP隧道等功能了,添加后即生效,你的内网服务就映射出来了。

sudo ./npc install 其他参数(复制的-server等后的内容) #注册

sudo npc start #启动

sudo npc stop #停止

./npc uninstall #如果需要更换命令内容需要先使用此命令卸载,再重新使用install注册

如果你的客户端安装了docker,也可以通过下面这条命令实现相同的功能。参数释义:

<code>docker run: 这是运行一个新容器的基本命令。-d: 这个参数使容器在后台以分离模式(detached mode)运行,不会直接输出容器日志到终端。--name=npc: 给运行的容器指定一个名字为 npc。你可以通过这个名字来管理容器。--restart=always:这个参数告诉 Docker,如果容器退出,无论是正常还是非正常退出,都要自动重启容器。--net=host: 这个参数让容器使用主机的网络堆栈,而不是创建容器专用的网络命名空间。通过这种方式,容器可以直接访问主机上的所有端口和网络接口。ffdfgdfg/npc: 这是要运行容器的镜像名称。如果本地没有这个镜像,Docker 会自动从 Docker Hub 上拉取。-server=172.17.33.53:8024 -vkey=test1234 -type=tcp 💡需要替换为实际的值,也就是你复制的后面那一段,并不是一定是这些选项和内容!

docker run -d --name=npc --restart=always --net=host ffdfgdfg/npc -server=172.17.33.53:8024 -vkey=test1234 -type=tcp

对于Windows,在GitHub找到对应的包,下载并解压,使用管理员运行cmd,进入解压后的文件夹,命令的使用把 ./npc 替换为npc.exe 就行了,像这样:

npc.exe install 其他参数(复制的-server等后的内容) #注册

npc.exe start #启动

npc.exe stop #停止

npc.exe uninstall #如果需要更换命令内容需要先使用此命令卸载,再重新使用install注册

注册到服务后,日志文件windows位于当前目录下,linux和darwin位于/var/log/npc.log

穿透Windows远程桌面服务

npc可以部署在Windows上,并且npc支持注册到系统服务设置开机自启动,这样就可以实现无论笔记本身在何处,只要电脑开机且联网的情况下即可通过服务器映射的IP地址访问,实现了向日葵,raylink等远程桌面软件实现的功能,可npc才几MB……详细步骤:

确保你的服务端NPS服务运行正常,并且可以连接且在web能看见客户端上线。NPS的部署步骤就不重复演示了。这里主要演示windows npc端如何设置。

①下载并解压缩文件,进入conf文件夹,编辑npc.conf文件。内容根据你设置的点对应相对的值修改就行了。

编辑npcconf文件

②现在返回上级目录,双击运行npc.exe程序,提示成功连接!没有任何问题的,能在web看到相关客户端信息。

查看npc客户端

接下来就可以关闭cmd窗口了,这一步的作用是检查配置是否有问题

③没有问题就可以通过 .\npc.exe install 注册到系统服务。

以管理员权限运行CMD(非此权限会提示访问拒绝),进入npc.exe目录中(如果你不知道cmd如何切换目录的话那就先百度一下)执行命令npc.exe install (web管理复制的-server等后的内容)。重启电脑。此操作是必须的,npc.exe只会在下次重启时生效,这样就🆗了

④接下来就到最简单的一步,添加TCP隧道。我们想穿透的时远程桌面服务,对应的端口3389端口,具体验证服务器是否开启Windows远程桌面、或你想要修改远程桌面的端口,请看这篇文章:Windows远程桌面一站式指南 | BOBO Blog (www.soulcloser.com)

左侧选项卡,单击“TCP隧道”,点击“新增”模式选择“TCP隧道”,添加“客户端ID”,“服务端端口”,“本地IP和端口服务”需要在防火墙放行服务端端口!!!

添加RDP TCP隧道穿透

完成!现在你就可以运行远程桌面程序,输入你的公网IP地址,在Internet上连接到你的电脑了!对此有疑问可以参考Windows远程桌面一站式指南。

总结

此文章每一步,每一点我在编写文章时都同步操作过❤️,如果你遇到了问题欢迎在评论区留言。如果你需要免费的支持,邀请你进入我的论坛网站https://bbs.soulcloser.com,注册后与管理员BOBO取得在线联系!😍

版权声明:原创不易,本文不允许在未获取作者同意的情况下以任何形式复制其内容、摘编、转载。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。