当前位置: 首页 > news >正文

【工具】NPS 内网穿透搭建

背景

在日常开发中经常会涉及到使用公网某个端口进行开发调试的情况,但我们日常开发的机器IP是非公网IP,所以需要使用内网穿透的手段,使我们的服务在公网上能被访问到。
常用的内网穿透工具分两大类,一类是付费/免费服务,即人家已经搭建好了,我们需要通过某种方式进行配置就可使用,该方式下我们无需自有公网IP,类似工具有花生壳;另一类为开源工具,如FRP、NPS等工具,这类工具需要我们具备一台有公网IP的机器。
本教程基于docker、immortalwrt配置,其中服务端通过docker启动,客户端为immortalwrt,注:其他客户端也类似,需要去https://github.com/ehang-io/nps 下载相应的客户端,另外这里指的公网也不一定要真的公网,取决于实际需求,能够相互访问即可。

NPS配置

假如现有公网服务器A(IP:123.123.123.123),为了简化安装过程,在该服务器安装上docker、docker compose,参考docker官网。

启动NPS服务

使用如下docker-compose.ymal

version: '3.6'
services:nps:image: zhangsean/npsrestart: alwayscontainer_name: npsprivileged: trueenvironment:NPS_MODE: serverNPS_BRIDGE_TYPE: tcpNPS_BRIDGE_PORT: 8024 # 与后面开放的端口对应,该端口是客户端与服务端通信端口NPS_PUBLIC_VKEY: # 自己给定一个vkeyNPS_HTTP_PROXY_PORT: 8085 # 与后面开放的端口对应,该端口是反向代理与nps通信端口,可直接绑定80/443端口NPC_CONN_TYPE: tpcports:- "8024:8024"- "8085:8085"- "8080:8080"  # 默认的web管理端口volumes:- ./nps/conf:/conf # 这里将配置文件挂载到宿主机上,防止因为重启导致配置丢失

有了上述docker-compose 文件,使用docker compose up -d将服务拉起,就完成了服务端的启动,如果有防火墙,需要将暴露端口放行,其中 web 管理端口为了安全,只需某种方式能访问即可,不一定要公网直接访问。

配置NPS服务端

进入NPS服务端进行配置,使用服务器A(IP:123.123.123.123)的地址进入服务端,这里即8080端口,如果公网暴露,其url应该是http://123.123.123.132:8080,进入后会得到如下界面,然后使用用户名、账号登陆nps
nps界面
来到客户端这边,我们需要新增一个客户端
新增客户端
填入客户端信息
新增客户端
在添加客户端成功后,我们可以得到如下信息,其中【客户端命令】是在github下载的客户端的情况下使用的,如下载了一个windows、linux、macos客户端,就可以直接用该命令连到nps上,但这里是在路由器上配置,只需要记住这里的【唯一验证密钥】即可
在这里插入图片描述
至此,服务端配置完成了一半,等客户端上线后,参考后续配置,接下来需要配置客户端。

客户端配置

客户端安装

登陆到我们的路由系统中,通过如下操作安装
在这里插入图片描述
在弹出的提示中点击安装
在这里插入图片描述

客户端安装完成截图
在这里插入图片描述
安装完成后,需要重启一下
在这里插入图片描述
重启后再次登陆路由系统,根据提示输出下面三部分内容,其中vkey为上面服务器生成的【唯一验证密钥】,这里的配置与服务端的客户端配置保持一致即可
在这里插入图片描述
至此,客户端配置完毕,后续继续配置服务端

穿透配置

客户端连接成功后,服务端可以看到如下信息,即客户端当前已经在线
在这里插入图片描述
假如我们的局域网网段为【192.168.3.0/24】,路由器IP为192.168.3.1,现在局域网内有台设备B的IP为 192.168.3.10,需要将设备B的8000端口暴露到公网上使其能够访问,这里有两种方式,一种是域名访问,一种是端口访问。

端口访问

在这里插入图片描述
添加上述配置后,就能使用123.123.123.123:8090 来访问 服务(192.168.3.10:8000)

域名访问

该方式下需要提前配置域名解析,可以通过修改hosts文件方式实现,也可以通过域名解析实现,此处略过。
在这里插入图片描述
完成配置后,即可通过访问你自己的域名地址来访问到内网服务了。

http://www.lryc.cn/news/338630.html

相关文章:

  • 【数学】主成分分析(PCA)的详细深度推导过程
  • 微信跳转页面时发生报错
  • 8:系统开发基础--8.1:软件工程概述、8.2:软件开发方法 、8.3:软件开发模型、8.4:系统分析
  • 【简单讲解下Symfony框架】
  • [Linux基础]ln硬链接和ln -s软链接的方法参数及区别
  • 开源博客项目Blog .NET Core源码学习(15:App.Hosting项目结构分析-3)
  • 【muzzik 分享】3D模型平面切割
  • SCI一区 | Matlab实现OOA-TCN-BiGRU-Attention鱼鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测
  • nodejs安装常用命令
  • 使用 Prometheus 在 KubeSphere 上监控 KubeEdge 边缘节点(Jetson) CPU、GPU 状态
  • OSI七层网络模型 —— 筑梦之路
  • 状态模式:管理对象状态转换的动态策略
  • 【论文阅读】MCTformer: 弱监督语义分割的多类令牌转换器
  • FMix: Enhancing Mixed Sample Data Augmentation 论文阅读
  • 2024蓝桥A组A题
  • Linux journalctl命令详解
  • 恢复MySQL!是我的条件反射,PXB开源的力量...
  • Storm详细配置
  • linux redis部署教程
  • 【Java】隐式锁(synchronized):如何解决餐厅等座的并发难题
  • 科技论文和会议录制高质量Presentation Video视频方法
  • Spring高手之路17——动态代理的艺术与实践
  • 如何在Unity中使用设计模式
  • 基于springboot+vue+Mysql的旅游管理系统
  • vue3+ts中判断输入的值是不是经纬度格式
  • python常用知识总结
  • 常用的启发式算法
  • 应该如何进行POC测试?—【DBA从入门到实践】第三期
  • 通过Clojure中的集合与序列谈谈抽象的重要
  • Rust---模式(Pattern)匹配