使用nps实现内网穿透

1、介绍

​ 当我们想把内网的一些资源暴露在公网上时,可以使用内网穿透功能。比如公司的内网服务器,部署了平时需要开发的项目,但是回到家中无法访问,就可以使用内网穿透,将公司内网的接口映射到一台公网的服务器上,用这台公网服务器做转发即可实现在家中也能外网访问。这样的就不需要我们在公网上部署一套一模一样的服务了,费时费力,而且还要同步数据。

2、准备工作

​ 想要实现内网穿透功能首先我们需要准备:

  • 一台公网服务器(用作nps的服务端)
  • 一台需要做转发的内网服务器(用作nps的客户端)

3、nps服务端安装及配置

3.1 下载nps服务端

​ 注意nps服务端是安装在公网服务器上的!!!

​ 服务端下载地址:https://github.com/ehang-io/nps/releases

在这里插入图片描述

​ 可以看到有很多版本,我的外网服务器是Linux的,可以输入命令查看服务器架构版本:

arch

在这里插入图片描述

​ x86_64 直接下载 linux_arm64_server.tar.gz 这个版本即可。可以手动下载到本地,然后通过scp命令传到服务器,也可以直接在外网服务器上下载。

​ 通过scp传送到外网服务器命令(如果开放了账号密码登录):

scp -P ssh开放的端口(如果为22,可以不用带此参数) 下载的linux_arm64_server.tar.gz的位置 登录的账号@外网服务器ip:你要拷贝到的外网服务器的位置

​ 如:

scp -P 22 C:\Users\dxc\Downloads\linux_arm64_server.tar.gz root@xxx.xxx.xxx.xxx:/home/nps

​ 按下回车,再输入密码即可(注意大小写)。

​ 通过scp传送到外网服务器命令(只开放了通过证书登录的方式):

scp -i 你证书的位置 -P ssh开放的端口(如果为22,可以不用带此参数) -r 下载的linux_arm64_server.tar.gz的位置 登录的账号@外网服务器ip:你要拷贝到的外网服务器的位置

​ 如:

scp -i C:\Documents\server-pro\ecmarkets-universal.pem -P 22 C:\Users\dxc\Downloads\linux_arm64_server.tar.gz root@81.xxx.xxx.xxx:/home/nps

​ 直接在外网服务器上下载命令:

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

​ 下载完成后解压,输入命令:

tar -zxvf linux_arm64_server.tar.gz

​ 解压完成后,输入指令,查看文件:

ll

​ 我们能看到有如下这些文件:

​ 这样nps就下载解压成功了。

3.2 nps配置

​ 其中 conf 文件夹中的 nps.conf 就是我们服务端的配置文件,我们需要根据自己情况稍作修改。输入命令:

vim nps.conf

​ 默认配置如图:

在这里插入图片描述

​ 我们可以根据自己的场景稍作修改,找到 #web 下的内容,其中:

  • web_username:登录管理端的账号。
  • web_password:登录管理端的密码,默认为123,此处我改为123456。
  • web_port:管理端页面的端口,默认为8080,我服务器的8080端口已被项目占用,因此我此处改为7002。
#web
web_host=a.o.com
web_username=admin
web_password=123456
web_port = 7002
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

​ 修改完成后,按 esc 退出编辑模式,在输入:

:wq

​ 保存并退出。

​ 其余配置说明如下:内容来源于官方文档:https://ehang-io.github.io/nps/#/?id=nps

名称含义
web_portweb管理端口
web_passwordweb界面管理密码
web_usernameweb界面管理账号
web_base_urlweb管理主路径,用于将web管理置于代理子路径后面
bridge_port服务端客户端通信端口
https_proxy_port域名代理https代理监听端口
http_proxy_port域名代理http代理监听端口
auth_keyweb 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_portp2p模式开启的udp端口
pprof_ipdebug pprof 服务端ip
pprof_portdebug pprof 端口
disconnect_timeout客户端连接超时,单位 5s,默认值 60,即 300s = 5mins

注意:如果你先进行了 install 操作,然后再去修改 conf 文件夹下的 nps.conf 文件,那么修改将不会生效。因为当我们 install 后默认的配置文件将会在 /etc/nps 下面的 nps.conf ,此时你需要去修改此处的配置,然后在切换到nps的安装目录输入 nps restart 重启即可生效!!!

3.3 nps服务端启动

​ 输入启动命令,启动nps服务端,如果你和我一样修改了管理端的端口,那么启动服务端将会占用80、8024、7002端口。如果你存在某些端口被占用,请到配置文件自行修改即可。

./nps install
nps start

​ 此时,我们打开浏览器输入:

xxx.xxx.xxx(你的外网服务器ip):你配置的web_port端口

​ 即可看到如下登录界面:

在这里插入图片描述

​ 输入配置的账号密码,默认为admin/123,点击登录,进入仪表盘:

在这里插入图片描述

​ 此时nps的服务端我们就配置完毕了,接下来开始配置客户端。

4、nps客户端配置

4.1 管理端添加客户端配置

​ 此处我们在管理界面点击左侧菜单栏的“客户端”,再点击“新增”按钮进行客户端的新增。

在这里插入图片描述

​ 进入到新增客户端页面:

在这里插入图片描述

​ 其中:

  • 备注:客户端的备注,可填可不填,根据自身情况。
  • Basic认证用户名:不需要填。
  • Basic认证密码:不需要填。
  • 唯一验证密钥:不需要填,让系统自动生成。
  • 允许客户端通过配置文件连接:填“是”即可。
  • 压缩:填“是”即可。
  • 加密:填“是”即可。

​ 填完之后,点击保存按钮,我们即可看到新增的客户端已经出现在列表中。

在这里插入图片描述

​ 此时,我们还需要配置隧道,点击左侧的“TCP隧道”进行新增。

在这里插入图片描述

  • 模式:我们选择TCP隧道。
  • 客户端ID:填写刚刚我们创建的客户端的ID,如果是第一次创建,那客户端ID为2。
  • 备注:不需要填。
  • 服务端端口:该端口表示你的客户端的应用最后被映射到服务器上的访问端口,比如你的客户端应用的端口为3781,服务端端口填写8999,那么 访问服务端的ip:8999 相当于访问 你客户端ip:3781 的资源。
  • 目标(IP:端口):客户端需要被代理的服务的端口。

​ 配置好后点击“新增”即可。如果想在这个客户端配置多个映射,只需要添加隧道即可。

在这里插入图片描述

4.2 nps客户端安装及连接

​ 下载地址:https://github.com/ehang-io/nps/releases

​ 此处我用的是本地电脑作为客户端,本地电脑为win10,64位操作系统,其他操作系统流程几乎一致。

​ 此处我下载 windows_amd64_client.tar.gz 这个版本。

在这里插入图片描述

​ 解压文件,进入 windows_amd64_client 目录:

在这里插入图片描述

​ 直接在当前路径下进入cmd:

在这里插入图片描述

​ 此时我们需要启动客户端,而启动的命令在我们管理端的客户端配置页面,找到我们创建的客户端,点击最前面的“+”号,复制下方的“客户端命令”。注意如果在windows下执行,不要复制前面的“./”!!!

在这里插入图片描述

​ 复制后在cmd窗口中执行,如图:

在这里插入图片描述

​ 看到输出“Successful connection with server xx.xx.xx.xx:8024”,代表连接成功了。我们也可以在管理界面中看到连接变为了“在线”。

在这里插入图片描述

5、测试

​ 到此处,nps的所有配置和启动事项都完成了,接下来我们可以通过访问我们的外网服务器ip + 我们配置的TCP隧道中的端口,就能直接转发到我们的本地服务上了。

​ 我本地启动了一个端口为 3781 的 Java 服务,接下来我访问外网服务器的ip + 我们配置TCP隧道中的端口,能看到穿透成功。如图:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/100422.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++之std::search应用实例(一百八十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

typescript的~~和双感叹号符号使用

(标题不给用“!”) "~~"符号使用 1.对于number类型的值,~~是取整作用 const num: number 3.14; const roundedNum: number ~~num; // 3 2.对于boolean类型的值,~ ~ true还是true,false还是false “!!”…

6.(Python数模)游泳接力指派问题

Python解决游泳接力指派问题 该问题也属于一个线性规划问题 源代码 import pulp # 导入 pulp 库 import numpy as np# 主程序 def main():# 问题建模:"""决策变量:x(i,j) 0, 第 i 个人不游第 j 种姿势x(i,j) 1, 第 i 个人游第 …

javaee spring 静态代理

静态代理 package com.test.staticProxy;public interface IUsersService {public void insert(); }package com.test.staticProxy;//目标类 public class UsersService implements IUsersService {Overridepublic void insert() {System.out.println("添加用户");…

A. Increasing and Decreasing

题目:样例: 输入 3 1 4 3 1 3 3 100 200 4输出 1 3 4 -1 100 150 180 200 思路: 思维题,这里我们看一下规律,我们已知a(1),a(n) ,又因为 数列b 应该是递减的,而观察规律可知 &#x…

无涯教程-Android - Spinner函数

Spinner允许您从下拉菜单中选择一个项目 例如。使用Gmail应用程序时,将显示如下所示的下拉菜单,您需要从下拉菜单中选择一个项目。 Spinner Example 示例 本示例演示计算机的类别,您需要从类别中选择一个类别。 以下是修改后的主要Activity文件src/com.example.spinner/Andr…

opencv-人脸识别

对https://blog.csdn.net/weixin_46291251/article/details/117996591这哥们代码的一些修改 import cv2 import numpy as np import os import shutil import threading import tkinter as tk from PIL import Image, ImageTkchoice 0# 首先读取config文件,第一行…

postman-使用Postman的模拟服务来模拟(mock)后端数据,完成前端模拟API调用

最近项目上比较忙,任务多时间紧,导致后端开发任务繁多,无法及时开发完毕,但是前端同学已经把对应功能开发完成,需要进行前后端联调来验证API及一些交互问题;这不能因为后端的进度来影响前端的工作完成情况&…

python爬虫-Selenium

一、Selenium简介 Selenium是一个用于Web应用程序测试的工具,Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。模拟浏览器功能,自动执行网页中的js代码,实现动态加载。 二、环境配置 1、查看本机电脑谷歌浏览器的版…

【设备树笔记整理7】实践操作

1 使用设备树给DM9000网卡_触摸屏指定中断 1.1 修改方法 根据设备节点的compatible属性,在驱动程序中构造/注册 platform_driver,在 platform_driver 的 probe 函数中获得中断资源。 1.2 实验方法 以下是修改好的代码:第6课第1节_网卡_触摸…

PyTorch深度学习遥感影像地物分类与目标检测、分割及遥感影像问题深度学习优化实践技术应用

我国高分辨率对地观测系统重大专项已全面启动,高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成,将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB,遥感大数据时…

WEBGL(3):鼠标动态绘制点

1 实现思路 绘制单个点鼠标事件监听点击事件将点推送到数组中绘制数组中所有点 2 实现代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge&…

应届生面试指南:如何在缺乏经验的情况下脱颖而出

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

运用Python解析HTML页面获取资料

目录 安装Beautiful Soup库&#xff1a; 解析HTML页面&#xff1a; 怎么获取图片、视频、音频资源 1. 图片资源&#xff1a; 2. 视频资源&#xff1a; 3. 音频资源&#xff1a; 可能遇到的问题 1. 编码问题&#xff1a; 2. 动态内容&#xff1a; 3. 反爬虫机制&#…

关于在香橙派安装mysql时遇到的坑

前言 基础环境&#xff1a;硬件&#xff1a;香橙派5操作系统&#xff1a;openkylincpu架构&#xff1a;arm 过程&#xff1a;最近有个任务&#xff0c;要在新的环境中验证一些服务是否可用。目的时向全国产化靠拢。 需要在香橙派上安装openkylin&#xff0c;一开始尝试的是香橙…

用于设计和分析具有恒定近心点半径的低推力螺旋轨迹研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Oracle报错 PLS-00103: 出现符号 ““在需要下列之一时

在IDEA中执行以下SQL时&#xff0c;报了这个异常 检查了语法&#xff0c;你会发现语法没有任何问题&#xff0c;标点也没有任何问题。 罪魁祸首在这&#xff1a; 换行符为CRLF&#xff0c;我们需要改成LF 即可执行成功

B080-RabbitMQ

目录 RabbitMQ认识概念使用场景优点AMQP协议JMS RabbitMQ安装安装elang安装RabbitMQ安装管理插件登录RabbitMQ消息队列的工作流程 RabbitMQ常用模型HelloWorld-基本消息模型生产者发送消息导包获取链接工具类消息的生产者 消费者消费消息模拟消费者手动签收消息 Work QueuesSen…

控制goroutine 的并发执行数量

goroutine的数量上限是1048575吗&#xff1f; 正常项目&#xff0c;协程数量超过十万就需要引起重视。如果有上百万goroutine&#xff0c;一般是有问题的。 但并不是说协程数量的上限是100多w 1048575的来自类似如下的demo代码: package mainimport ( "fmt" "ma…

机械臂+2d相机实现复合机器人定位抓取

硬件参数 机械臂&#xff1a;艾利特 相机&#xff1a;海康相机 2d识别库&#xff1a;lindmod&#xff0c;github可以搜到 光源&#xff1a;磐鑫光源 软件参数 系统&#xff1a;windows / Linux 开发平台&#xff1a;Qt 开发语言&#xff1a;C 开发视觉库&#xff1a;OpenCV …