NPS内网穿透

前言

很多群晖玩家没有公网IPV4,只能用群晖自带的QuickConnetc,但是这个东西的带宽有限,流量小还能用,想传个大文件那就不行了,而且哪天服务器宕机,那就没得玩了。别的一些内网穿透服务带宽也不大价格还贵,和群晖自带的QickConnetc差不多速度,甚至还不如群晖qc,再大点带宽价格更恐怖,尤其是那个蒲公英的价格超贵,博主刚接触群晖时也是为公网IP犯愁,虽然有群晖自带的QC,但是不想受制于人,后来知道了有内网穿透这项技术,然后就查找相关资料,最早接触的是frp,当时完全不懂linux命令行操作,天天在网上学习也没学出来个毛,后来在一个博主的指导下,用QQ连续两晚上,磕磕绊绊的弄成了frp的配置文件,但是只能照搬,有点毛病就整不了,而且只能在这个群晖上使用,换别的地方就不会了。在不会用NPS之前也就是磕磕绊绊的用FRP,直到后来出来这个NPS,有web界面学习成本减少,再后来申请下来了公网IP,后来就没有使用FRP。博主喜欢能独立的就独立,不受制于人。而且这个NPS支持很多平台来满足大家需要。

获取NPS

首先前往NPS的GITHUB项目下载对应的客户端和服务端。

安装并管理NPS服务端

把NPS的服务端上传到公网服务器并解压。然后进入解压后的文件夹执行以下命令来安装NPS。

				
					sudo ./nps install
				
			

管理客客户端。

				
					启动
sudo nps start
停止
sudo nps stop
重启
sudo nps restart
				
			

配置服务端

首先要打开服务器的8024和8080端口,8024是服务端与客户端通信端口,8080是web接口,如不打开8080就使用命令行操作。nps默认http和https使用端口分别是80,443,如果服务器上没有网站,就不用修改http和https的使用端口,如果有网站那就修改成别的。如果是使用阿里云的轻量服务器这种有额外的端口控制功能的服务商也需要打开相对应端口。比如我的服务器上有网站了避免冲突就修改了nps的http和https的端口。修改有两种操作,一是在服务器端解压出来进入解压后的文件夹,进入conf文件夹,再找到nps.conf修改配置,然后再执行安装命令,这样启动后就会使用修改后的配置来安装启动,还有一种就是安装后进入安装后/etc/nps/conf文件下的nps.conf文件来修改配置。红框标注的就是安装后的文件位置。

修改NPS默认http监听端口为:7788。

然后打开浏览器输入服务器的IP:8080打开NPS的WEB界面。默认用户名是:admin,密码是123。

在左边栏的客户端栏里添加添加客户端。备注写个自己分得清的名字,唯一验证密钥里可以自己随便填,或者不管,添加后会自己生成一个。

添加完客户端后,复制“唯一验证密钥”下的密钥备用。

安装并管理NPS客户端

进入解压后的客户端文件夹执行以下命令进行安装注册。

				
					sudo./npc install 其他参数(例如-server=xx -vkey=xx或者-config=xxx)
				
			

管理客户端。

				
					启动
sudo npc start
停止
sudo npc stop
重启
sudo npc restart
				
			

配置客户端

● 无配置文件 

把NPS的服务端上传到内网服务器并解压。然后进入解压后的文件夹执行以下命令来启动NPS客户端。-vkey填写刚才复制的密钥。

				
					./npc -server=服务器IP:8024 -vkey=客户端的密钥

				
			

看到有显示Successful即为连接服务器成功。

服务端显示出来客户端的IP地址。

● 有配置文件启动

				
					 ./npc -config=npc配置文件路径

				
			

配置文件说明

● 全局配置

				
					[common]
server_addr=1.1.1.1:8024
conn_type=tcp
vkey=123
username=111
password=222
compress=true
crypt=true
rate_limit=10000
flow_limit=100
remark=test
max_conn=10
#pprof_addr=0.0.0.0:9999

				
			
含义
server_addr服务端ip/域名:port
conn_type与服务端通信模式(tcp或kcp)
vkey服务端配置文件中的密钥(非web)
usernamesocks5或http(s)密码保护用户名(可忽略)
passwordsocks5或http(s)密码保护密码(可忽略)
compress是否压缩传输(true或false或忽略)
crypt是否加密传输(true或false或忽略)
rate_limit速度限制,可忽略
flow_limit流量限制,可忽略
remark客户端备注,可忽略
max_conn最大连接数,可忽略
pprof_addrdebug pprof ip:port

● 域名代理

				
					[common]
server_addr=1.1.1.1:8024
vkey=123
[web1]
host=a.proxy.com
target_addr=127.0.0.1:8080,127.0.0.1:8082
host_change=www.proxy.com
header_set_proxy=nps

				
			
含义
web1备注
host域名
target_addr内网目标,负载均衡时多个目标,逗号隔开
host_change请求host修改
header_xxx请求header修改或添加,header_proxy表示添加header proxy:nps

● tcp隧道模式​

				
					[common]
server_addr=1.1.1.1:8024
vkey=123
[tcp]
mode=tcp
target_addr=127.0.0.1:8080
server_port=9001

				
			
含义
modetcp
server_port在服务端的代理端口
tartget_addr内网目标

● udp隧道模式

				
					[common]
server_addr=1.1.1.1:8024
vkey=123
[udp]
mode=udp
target_addr=127.0.0.1:8080
server_port=9002

				
			
含义
modeudp
server_port在服务端的代理端口
target_addr内网目标

更多参考官方文档

使用

● 域名解析

域名解析模式为反向代理.。这里分两种情况,一是服务器上没有安装网站,没有Nginx或者宝塔来使用80和443端口,这种不需要修改NPS的默认http和https监听端口。还有一种就是安装了Nginx和宝塔,这种就需要修改NPS的监听端口。比如修改http为7788,https为7743。
首先在你的域名解析dns里把自定义域名指向你的安装NPS的服务器IP。

第一种情况,没有安装Nginx或者宝塔,没有程序使用80和443端口,这种情况直接使用NPS的默认HPPT和HTTPS的监听端口:80和443即可。

添加完后,直接访问添加的主机地址的域名,就会跳转到内网内容。

第二种情况,服务器上有网站80和443已被占用,首先修改NPS默认的http端口,如果需要https就一样修改,避免和nginx或者宝塔冲突,比如我HTTP修改成7788。然后在宝塔里新建一个网站,然后在网站里设置反向代理,目标URL填写你在域名解析的域名,比如我设置的是nps.xxx.com。然后在后面加上你修改的nps监听的http端口,即http://nps.xxx.com:7788。也就是宝塔反代一次,NPS再反代一次。

以宝塔为例:创建站点。

设置反向代理,发送域名就是你在手机或者电脑上要访问的域名,目标URL就是你的域名加上NPS的监听端口7788。

然后在nPS里添加域名解析模式。我是安装在群晖上的所以我就直接写的端口。

这样你访问你的http://nps.xxx.com就会打开你的内网服务。

他的流程应该是:访问nps.xxx.com,然后dns服务器查询域名对应IP就是你安装nps的服务器的IP,然后通过IP到达目标服务器,因为有宝塔存在,监听的80端口,宝塔会看到你的访问域名是nps.xxx.com,而且有反向代理,然后再把你的请求交给反向代理的目标地址,而目标地址其实就是它所在的服务器加上7788端口,而7788端口又是NPS监听的http端口,NPS一看收到的域名是nps.xxx.com,再读取相对应的客户端IP地址和对应端口最后呈现出来。这样就可以用它实现免端口来访问内网服务。比如我想使用我的域名免端口来访问内网群晖,总加端口号很不好看,使用nps的域名解析就可以实现免端口访问。

● tcp隧道

如果你没有域名,也可以不修改NPS的监听端口,直接使用TCP隧道模式。TCP模式就是不使用NPS的反向代理功能。
这个就是不使用NPS反向代理的域名解析模式,如果直接访问此配置的地址就会显示添加的端口号。如果想实现不加端口号访问那就必须得使用域名解析模式。TCP隧道模式其实就是域名解析中的第二种情况的另一种解决方案。第二种情况需要改监听端口,宝塔或者其他程序反代一次再加一层NPS反代,很麻烦。而TCP隧道可以在没有域名的情况下使用。如果单纯使用TCP隧道进行配置,需要每个服务配置一个端口,如果想只想使用一个端口则需要在其他反代软件中做好反代,或者在没有其他反向代理时直接用NPS的域名解析模式。

端口里填写安装着NPS服务器上需要使用访问的端口号,目标填写内网服务器的IP加端口。(再说一下,我的客户端是安装在目标服务器群晖上的所以不用写群晖IP,如果是安装在路由上需要填写目标服务器IP加端口号)。

通过NPS服务器IP加端口号访问内网服务器。

● udp隧道

这个就是在需要使用UDP协议来传输内容的穿透模式,比如使用内网DNS服务器进行DNS解析,和其他需要UDP协议的服务。假设场景: 内网有一台DNS,IP和端口分别为10.1.50.102:53,NPS服务器IP为1.1.1.1,在非内网环境下想使用该内网DNS。添加一条UDP隧道,填写监听的端口987,内网目标ip和目标端口53。到时候根据你实际填写的来使用。然后在需要使用的DNS的设备上填写上1.1.1.1,这样你使用的DNS服务器为1.1.1.1时,就相当于使用的是10.1.50.102:53作为DNS服务器。(为什么说是使用DNS地址为1.1.1.1就是使用的10.1.50.102:53DNS服务器,因为我的NPS服务器的53端口被占用,所以我没办法添加53端口,所以就没办法截图做演示,而DNS默认使用端口就是53,就和访问网站一样,比如你访问baidu.com就相当于访问百度服务器的80端口,只是不用添加不显示而已,而DNS只填IP不填端口就是相当于访问主机的53端口。)

就说一下这几个常用功能,其它功能请参考官方文档

0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论!x