内网穿透工具nps使用教程 - 来自内部交流群
Posted Rudon滨海渔村
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内网穿透工具nps使用教程 - 来自内部交流群相关的知识,希望对你有一定的参考价值。
内网穿透工具nps使用教程.docx
内网穿透工具nps使用教程
感谢
感谢开源软件开发者,github链接https://github.com/cnlh/nps/
感兴趣的去star下吧~
视频教程
https://www.bilibili.com/video/av74707117;https://www.bilibili.com/video/av76554314
nps简介
与ngrok、frp等老牌内网穿透工具相比,nps可以算是一匹黑马。其优势主要有两点:一是强大的网页管理面板,nps可以在服务端通过网页管理所有用户行为以及映射记录;二是它集成了多种协议,包括tcp/udp隧道,socks5以及p2p,可以满足多种需求。
做微信公众号开发、小程序开发等----> 域名代理模式
想在外网通过ssh连接内网的机器,做云服务器到内网服务器端口的映射,----> tcp代理模式
在非内网环境下使用内网dns,或者需要通过udp访问内网机器等----> udp代理模式
在外网使用HTTP代理访问内网站点----> http代理模式
搭建一个内网穿透ss,在外网如同使用内网vpn一样访问内网资源或者设备----> socks5代理模式
服务端安装
A 源码安装
- 安装源码 go get -u ehang.io/nps
- 编译
服务端go build cmd/nps/nps.go
客户端go build cmd/npc/npc.go
首先,需要一台拥有静态公网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
如果得到以下结果则证明端口已全部开放
否则可以使用以下命令关闭防火墙
CentOS6/Debian:
systemctl stop iptables
systemctl disable iptables
如果你使用的是其他Linux发行版,或以上命令无效,请自行搜索Linux如何关闭防火墙。
另外,如果你使用了腾讯云或阿里云的服务器,则需要前往网页控制台配置防火墙,详细情况可咨询客服或搜索腾讯云/阿里云如何开放全端口。
确保全端口开通后,可以前往GitHub页面下载内网穿透软件nps了。请选择和自己系统对应的release版本,本篇教程使用Linux系统服务器,所以选择linux_amd64_server.tar.gz。右键复制下载链接,在ssh窗口中输入以下指令下载
B release安装 https://hub.fastgit.org/ehang-io/nps/releases 下载链接
wget --no-check-cetificate <下载链接>
下载完成后,可在ssh窗口输出"ls"查看当前目录下的文件,确认刚刚下载的压缩包是否存在
确认无误后,开始解压缩
mkdir nps
cd nps
tar -zxf nps.*
解压后,可以用"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或域名>或直接使用0.0.0.0
web_username=<设置用户名>
web_password=<设置密码>
web_port = <网页面板端口>
web_ip=0.0.0.0
编辑完成并保存退出后,请使用以下命令启动nps服务
./nps start /* 后台启动服务 */
./nps stop /* 结束后台进程 */
./nps reload /* 重新加载配置 */
./nps /* 前台启动服务 */
启动后,可以访问网页管理面板(在浏览器中输入"<你服务器的IP或域名>:<网页面板端口>"),如果能打开网页并成功登陆,则说明服务端配置完成。
注册到系统服务(实现开机启动、守护进程),nps和npc的方式相同,nps不需要参数
# 操作命令 开始/停止/重启/配置文件重载/卸载服务/安装服务
nps start/stop/restart/reload/uninstall/install
# 服务端更新
nps-update update (请更新前停止服务)
对于linux、darwin
- 注册:./npc install 其他参数(例如-server=xx -vkey=xx或者-config=xxx)
- 启动:npc start
- 停止:npc stop
- 如果需要更换命令内容需要先卸载./npc uninstall,再重新注册
注册到服务后,日志文件位于/var/log/npc.log
对于windows,使用管理员身份运行cmd
- 注册:npc.exe install 其他参数(例如-server=xx -vkey=xx或者-config=xxx)
- 启动:npc.exe start
- 停止:npc.exe stop
- 如果需要更换命令内容需要先卸载npc.exe uninstall,再重新注册
注册到服务后,日志文件windows位于当前目录下
nps执行文件移动到/usr/bin
conf文件夹移动到/etc/nps/
服务端web管理
进入web界面,公网ip:web界面端口(默认8080),密码默认为123
进入web管理界面,有详细的说明
服务端web管理页面使用https
如果web管理需要使用https,可以在配置文件nps.conf中设置web_open_ssl=true,并配置web_cert_file和web_key_file
客户端配置
首先,在内网设备中下载对应的npc客户端,下载地址与服务端下载地址相同。本教程使用Windows10(64位)设备做演示,所以下载win_amd64_client.tar.gz(32位系统请下载i386的版本)。下载完成后,放在合适的目录并解压缩。
与传统内网穿透软件不同,nps最大的特点就是可以在网页面板完成所有对客户端的配置和管理,完全无需在客户端编辑配置文件(当然,如果愿意,也可以在客户端完成所有配置而不去理会网页管理面板)。本教程将会演示如何使用网页进行配置。首先,登录管理面板"<服务端IP或域名>:<面板端口>",在左侧导航栏找到"客户端",并选择添加一个客户端。
添加完成后,可以在列表中看到客户端信息,且客户端处于offline状态(因为还未在内网设备上输入指令连接服务端)。点击左侧按钮查看详细信息,可以看到系统生成(或手动指定)的通信密钥,以及客户端连接服务端的命令。
Windows下客户端使用的命令与面板中显示的有所不同,请把"./npc"部分替换为"npc",前往存放npc客户端的目录并启动cmd,在打开的窗口中输入网页面板显示的连接指令
npc -server_addr=<服务端IP或域名>:8024 vkey=<验证密钥> type=tcp
如果没有报错,可以访问网页管理面板查看客户端是否变为online状态。如进入online状态,则可以添加内网穿透规则
客户端启动及自启命令:增加登入日志log文件
./npc -server_addr=服务端IP或域名:8024 vkey=验证密钥 type=tcp >> nps.log &
nohup ./npc -server=服务端IP或域名:8024 vkey=验证密钥 type=tcp >> nps.log &
tcp/udp隧道
使用场景
Windows远程桌面,ssh连接,vnc连接,游戏开服,内网架设dns服务器等
配置方法
以Windows远程桌面为例,其默认使用3389端口。假设局域网内有一台IP为192.168.1.100的Windows设备,那么,在同一局域网下,只要访问192.168.1.100:3389即可连接。但如果想要从外网连接,则必须添加一条tcp转发规则,把内网设备的3389端口,映射到服务端的某个端口,这里假设使用服务器的10000端口。假如服务器IP为100.1.1.68,那么,映射完成后,外网访问100.1.1.68:10000的请求会全部被转发到192.168.1.100:3389,也就是说,访问100.1.1.68:10000即可连接内网的windows设备。
具体配置如下:
首先登录网页管理面板,查看并记住客户端id(例子中id是9)。选择左侧导航栏的tcp隧道,点击新增并输入参数
完成后,尝试通过 服务器IP:外网端口 连接内网windows设备,如可以成功连接,则内网穿透成功。
添加udp隧道的方式与tcp类似,udp可用于映射内网dns服务器,根据自身需求配置即可。
P2P连接
使用场景
大文件传输,如在内网架设NAS,流量不经过服务器转发
要求
目标内网设备与访问端都需要运行npc,且二者NAT类型不能同时为对称型网络
配置方法:必须在nps.conf文件中将p2p部分的注释取消,启用p2p功能
首先,需要编辑内网穿透服务器的配置文件,让服务器支持p2p穿透。先通过./nps stop停止服务,打开nps/conf/nps.conf,在末尾添加以下代码
#p2p
p2p_ip=<服务器公网IP,不要填域名,不要填127.0.0.1>
p2p_port=<默认使用6000端口,可自行配置>
注:若p2p_port设置为6000,请在防火墙开放6000~6002(额外添加2个端口)udp端口
请确保p2p_ip准确的填写了服务器的静态公网IP,否则会导致p2p穿透失败。编辑完成后保存并退出,使用./nps start重新启动服务。之后,前往网页管理面板添加一条p2p转发记录,用于作为被访问端
需要注意的是,唯一验证密钥既被作为连接密码,也被作为目标端的身份标识。如果有多条p2p记录,请保证唯一验证密钥不要重复。完成后,可以在记录下看到访问端需要输入的命令。
如果访问端为windows设备,请把"./npc"替换为"npc"。此项记录的意思是,把访问端的本地端口(默认2000,可在命令后添加"-local_port=xxx"指定;当客户端使用配置文件时,也可在npc.conf文件中增加p2p本地端口)绑定到目标内网设备的目标端口3389。
只要在访问端输入127.0.0.1:2000就能连接目标设备的3389端口了。如果访问端和目标端的NAT类型都符合要求,那么二者就可以直接通信,流量不需要再走服务器转发了。反之,如果NAT类型不符合要求,npc会报告p2p穿透失败,并继续使用服务器转发流量。
访问端出现以下问题,更换被访问端的端口即可:
bind: Only one usage of each socket address (protocol/network address/port) is normally permitted
值得注意的是,手机、平板等无法运行npc的设备是无法直接使用p2p的。如果想使用p2p连接,则要保证同网段下至少有一台能运行npc的设备(假设该设备内网IP为192.168.1.10),然后再用手机平板访问192.168.1.10:2000(或自定义本地端口)来访问目标设备。
服务端配置文件
/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 server增强功能
使用https
方式一: 类似于nginx实现https的处理
在nps.conf配置文件中将https_proxy_port设置为443或者其他希望配置的端口,和在web中对应域名编辑中设置对应的证书路径,将https_just_proxy设置为false,然后就和http代理一样了
此外: 可以在nps.conf中设置一个默认的https配置,当遇到未在web中设置https证书的域名解析时,将自动使用默认证书,另还有一种情况就是对于某些请求的clienthello不携带sni扩展信息,nps也将自动使用默认证书
方式二: 在内网对应服务器上设置https
在nps.conf中将https_just_proxy设置为true,并且打开https_proxy_port端口,然后nps将直接转发https请求到内网服务器上,由内网服务器进行https处理
与nginx配合
有时候还需要在云服务器上运行nginx来保证静态文件缓存等,本代理可和nginx配合使用,在配置文件中将httpProxyPort设置为非80端口,并在nginx中配置代理,例如httpProxyPort为8010时
server
listen 80;
server_name *.proxy.com;
location /
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8010;
如需使用https也可在nginx监听443端口并配置ssl,并将本代理的httpsProxyPort设置为空关闭https即可,例如httpProxyPort为8020时
server
listen 443;
server_name *.proxy.com;
ssl on;
ssl_certificate certificate.crt;
ssl_certificate_key private.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location /
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8020;
web使用Caddy代理
如果将web配置到Caddy代理,实现子路径访问nps,可以这样配置.
假设想通过 http://caddy_ip:caddy_port/nps 来访问后台, Caddyfile 这样配置:
caddy_ip:caddy_port/nps
##server_ip 为 nps 服务器IP
##web_port 为 nps 后台端口
proxy / http://server_ip:web_port/nps
transparent
nps.conf 修改 web_base_url 为 /nps 即可
web_base_url=/nps
关闭代理
如需关闭http代理可在配置文件中将http_proxy_port设置为空,如需关闭https代理可在配置文件中将https_proxy_port设置为空。
流量数据持久化
服务端支持将流量数据持久化,默认情况下是关闭的,如果有需求可以设置nps.conf中的flow_store_interval参数,单位为分钟
注意: nps不会持久化通过公钥连接的客户端
系统信息显示
nps服务端支持在web上显示和统计服务器的相关信息,但默认一些统计图表是关闭的,如需开启请在nps.conf中设置system_info_display=true
自定义客户端连接密钥
web上可以自定义客户端连接的密钥,但是必须具有唯一性
关闭公钥访问
可以将nps.conf中的public_vkey设置为空或者删除
关闭web管理
可以将nps.conf中的web_port设置为空或者删除
服务端多用户登陆
如果将nps.conf中的allow_user_login设置为true,服务端web将支持多用户登陆,登陆用户名为user,默认密码为每个客户端的验证密钥,登陆后可以进入客户端编辑修改web登陆的用户名和密码,默认该功能是关闭的。
用户注册功能
nps服务端支持用户注册功能,可将nps.conf中的allow_user_register设置为true,开启后登陆页将会有有注册功能,
监听指定ip
nps支持每个隧道监听不同的服务端端口,在nps.conf中设置allow_multi_ip=true后,可在web中控制,或者npc配置文件中(可忽略,默认为0.0.0.0)
server_ip=xxx
代理到服务端本地
在使用nps监听80或者443端口时,默认是将所有的请求都会转发到内网上,但有时候的nps服务器的上一些服务也需要使用这两个端口,nps提供类似于nginx proxy_pass 的功能,支持将代理到服务器本地,该功能支持域名解析,tcp、udp隧道,默认关闭。
即: 假设在nps的vps服务器上有一个服务使用5000端口,这时候nps占用了80端口和443,想能使用一个域名通过http(s)访问到5000的服务。
使用方式: 在nps.conf中设置allow_local_proxy=true,然后在web上设置想转发的隧道或者域名然后选择转发到本地选项即可成功。
客户端配置文件
基本使用
无配置文件模式
web界面创建客户端时关闭允许客户端使用配置文件连接
此模式的各种配置在服务端web管理中完成,客户端除运行一条命令外无需任何其他设置
./npc -server=ip:port -vkey=web界面中显示的密钥
客户端更新
首先进入到客户端二进制文件目录
请首先执行npc stop或者npc.exe stop停止运行,然后
对于linux
npc-update update
对于windows
npc-update.exe update
更新完成后,执行执行npc start或者npc.exe start重新运行即可完成升级
如果无法更新成功,可以直接自行下载releases压缩包然后覆盖原有的npc二进制文件