多种内网穿透的实现方案

news2024/11/18 17:34:39

1. 内网穿透的应用场景

1.1. 开发调试

比如企业微信、钉钉等开发,需要一个回调地址,开发的时候,希望回调到开发的电脑上,打断点进行调试,这就需要穿透到内网的开发机器。

1.2. 演示测试

有需要演示或测试的系统,可以直接将内网系统地址暴露到外网,短时间内进行演示或测试,不用再买服务器了

1.3. 访问内部系统

有的系统部署在内网,大部分时间在内网访问,偶尔需要进行外部访问。

1.4. 其他

因为真正的内网穿透技术上成功率非常低,基本上都是通过服务器转发,需要服务器、域名和带宽资源,所以免费的都有限制。像免费版花生壳每月1G的流量,速度和稳定性无法保证。1G流量也不太够用。

2. Ngrok

2.1. 注册账号

在ngrok.com,注册一个账号

进入以后拿到token,并且下载客户端

2.2. 身份验证

ngrok config add-authtoken 你的token

执行后,保存到了ngrok.yml文件

2.3. 映射

首先我们在本地开一个Nginx,端口号30080,确保能访问

启动隧道,意思是启动http隧道,转发到本地的30080端口

执行:ngrok http 30080

可以看到已经,给了随机域名

https://30bb-112-232-222-182.ngrok-free.app/

现在我们访问

这样实现了将内网的服务通过隧道暴露在外网。

但是存在2个问题:

1、免费版域名是随机的,每次都不一样,如果尝试用自己的域名,不行,提示升级

这就尴尬了。比如企业微信对域名的验证比较严格,要验证主体一致,也就是随机给的这个域名没法用

当我们尝试自己在阿里云上添加CNAME,指到Ngrok,也报错了

而升级最便宜的需要8美元1个月,够买一个轻量服务器

2.4. 所以:

免费版也明确提出会有带宽和用量的限制。此种方式适合偶尔将内网系统暴露给外网的情况,比如:给客户一个演示地址。短时间的演示一下。

3. FRP

Frp是github上的一个star超过66.8k的项目,功能和Ngrok类似,但是需要自己搭建,这样的好处是完全可控,只要有相关资源就可以

3.1. 前提条件:

1、一台有固定IP的服务器

2、自己可控的域名

但是在下载的时候杀毒软件直接报毒删掉了,查了下,网上也有很多类似情况,还有安装后中勒索者病毒的。暂时还是不尝试了。

4. DDNS+路由端口映射

这个前提是上网的宽带有外网IP,现在IPV4资源紧张,安装的电信宽带就没有外网IP。如果没有,据说可以给运营商打电话要到。如果有外网IP,即便不是固定的,那也很好了。配置也简单,登录路由器(有权限),做一个端口映射,就可以了

5. IPV6

IPV6已经喊了很多年了。但是现实中存在感有点低,来一张图,可以看到普及还需要时间。

我的电信宽带虽然没有给外网的IPV4,但是给了外网的IPV6,虽然经过了多层的NAT,但是我在手机上可以直接访问到我笔记本。非常Nice。但是当我在公司访问的时候,结果却无法访问。这就Nasty了。原因竟是公司的网络设备不支持IPV6。现实就是这样的。还有很多原有的设备没有进行IPV6的升级。现在国内通过手机流量都已经支持IPV6了。运营商的骨干网也已经支持。但是完全脱离IPV4,直接用IPV6,还不太现实。这个方案看着很香,当前还无法实际应用,但是未来可期。

6. SSH 端口转发

6.1. 前提条件:

需要一台有固定IP的服务器,假设IP为:8.8.8.8,用户名:root,密码:password

6.2. 场景一:将内网的web服务器映射出去

先上一张图,流程大概是这样的

解释:

  1. 当小强访问http://8.8.8.8:43001的时候
  2. Nginx将请求转发到本机的42001端口
  3. 这时候sshd正在监听42001端口。监听到后,通过ssh发给内网的192.168.1.1(192.168.1.1和8.8.8.8已经建立了连接)
  4. 内网的接收到数据后,转发到本机的80端口
  5. 数据的相应流程是相反的过程

针对SSH隧道我问了ChatGPT两个问题:

1、ssh客户端也是使用22端口吗

答:

SSH客户端和服务器之间建立SSH连接时,客户端通常是通过将自己的SSH连接请求发送给服务器的22号端口来发起连接。但是,与SSH服务器不同的是,SSH客户端本身并不需要监听或使用22号端口。

换句话说,SSH客户端不会直接使用TCP端口22来进行连接,而只是通过该端口向SSH服务器发送连接请求。实际上,当用户在SSH客户端中执行 ssh 命令时,默认情况下会在本地计算机上创建一个随机的TCP端口来与SSH服务器进行连接,并且随机端口仅用于该次SSH连接

总结下来就是:服务器端用22端口,客户端是随机端口

2、ssh隧道是单独的连接吗?

答:

SSH隧道是通过在一条SSH连接中嵌入其他协议的方法来实现的,因此它不是一个单独的连接,而是在已有的SSH连接之上添加了额外的功能。

在使用SSH隧道时,可以通过在SSH客户端和SSH服务器之间建立一个TCP隧道,将其他协议的数据流量发送到该隧道上。这样,就可以在不直接暴露其他协议的情况下,通过SSH安全地传输数据。

例如,在使用MySQL时,可以通过SSH隧道来加密和保护MySQL的数据传输。为了实现这个过程,可以在SSH客户端中打开一个本地端口,并将其映射到MySQL服务器上的远程端口。然后,在MySQL客户端中连接本地端口,就可以通过SSH安全地传输MySQL数据。

需要注意的是,SSH隧道的性能受到SSH连接的影响,因此在使用SSH隧道时,需要考虑网络环境和SSH连接的稳定性,以确保数据的可靠传输。同时,为了提高安全性,建议使用密钥认证方式进行SSH连接,并设置适当的防火墙和访问控制策略,以防止未经授权的访问

总结下来就是:隧道不是单独的连接。是在已有的SSH连接之上添加的额外功能

具体实现如下

1、服务器上需要安装Nginx,并做如下配置:

server {

listen 43001; #这里监听的为后续访问的云服务器端口,可以设置为任意一个服务器上还不存在的端口号

server_name _; # 这里填你的域名,如果没有域名则填localhost

location / {

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header Host $http_host;

proxy_redirect off;

proxy_pass http://localhost:42001; # 这里的8899相当于一个标识,和后面在本地创建通道相关,可以任意设置一个值

}

}

2、然后内网服务器上执行:

ssh -R 42001:localhost:80 -N root@8.8.8.8

输入密码,也可以用xshell,主页shell连接后也可以

保持连接。xshell有相应的设置。还可以用用AutoSSH来实现稳定的SSH连接

这样我们就建立了隧道:http://8.8.8.8:43001->http://192.168.1.1:80

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kubeadm方式搭建K8s集群【1.26.0版本】

文章目录 一、集群规划及架构二、系统初始化准备(所有节点同步操作)三、安装并配置Containerd容器运行时四、安装kubeadm(所有节点同步操作)五、初始化集群六、Node节点添加到集群七、安装网络组件Calico八、测试CoreDNS解析可用性九、拓展1、ctr和crictl命令具体区别 一、集群…

【c++ 之 多态】

目录: 前言多态认识多态多态的定义与实现构成多态的条件虚函数1.协变(基类与派生类虚函数返回值不同)2.析构函数的重写c11.两个虚函数修饰关键字:final & override 重载、重写、重定义再理解 抽象类抽象类的概念接口继承与实现…

强大的JSON格式化和编辑工具zjson

本文软件应网友 小超 的需求而制作,软件本身已经 2年未更新,请知悉~ 什么是 zjson ? 转杰森(zjson) 是一个强大的 JSON 格式化和编辑工具,支持在线版和 Electron应用安装,使用 MEAN-STACK ( MongoDB Expr…

【ArcGIS】常见问题总结

1 arcgis如何打开*.adf文件 在处理数据时发现,获取到的土地利用类型数据有两个文件夹,一个叫info,另一个叫lucc2010(年份),打开lucc2010里面是一系列的*.adf文件,数据应该如何打开呢&#xff1…

Red Hat Enterprise Linux 9的简介

1.3 Red Hat Enterprise Linux 9的简介 2022年5月,红帽公司(Red Hat)发布了Red Hat Enterprise Linux 9.0(简称RHEL 9.0)正式版。Red Hat Enterprise Linux是全球领先的企业级Linux操作系统,已获得数百个…

重大剧透:你不用ChatGPT,它砸你饭碗

早晨看到路透社报道,盖茨说,与其争论技术的未来,不如专注于如何更好地利用人工智能。 这可能是他对马斯克他们呼吁暂停AI研发6个月的一种回应吧。 有种古语说:天下大势,浩浩汤汤,顺之者昌,逆之者…

ai模型训练生成效果 chilloutmix_NiPrunedFp32Fix.safetensors

模型名称: chilloutmix_NiPrunedFp32Fix.safetensors 关键词 extremely detailed CG unity 8k wallpaper,(masterpiece),(best quality),(ultra detailed),(ultra realistic),(Best character details:1.2),dynamic angle,professional lighting, photon mapping, …

【4. ROS的主要通讯方式:Topic话题与Message消息】

【4. ROS的主要通讯方式:Topic话题与Message消息】 1. 前言1.1 王者解释结点通讯:1.2 通讯小结 2. 灵活的Topic话题图解2.1 话题注意细节2.2 外延补充 3. Message消息图解3.1 消息类型3.2 查看标准消息类型std_msgs 4. 使用C实现Publisher发布者4.1 发布…

自动化工具 WEB 自动化工具

背景 使用自动化测试框架编写用例的时候,维护元素信息以及脚本较为麻烦。对应新手来说,编写脚本的能力有限,使用工具会更容易入手。最重要的是可视化操作让我觉得体验舒服。 演示地址 地址:hippo 账号:test 密码&am…

探索文件世界:用Python创建交互式文件浏览器

目录 引子: 应用场景: 源代码: 源代码说明: 效果如下所示: D:\spiderdocs\previewjpegmdfile.py 引子: 在许多应用程序中,需要方便地查看特定文件夹中的所有图片,例如图库管理器、相册应用…

泛型(一)

泛型:标签(类型参数) 所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。这个类型参数将在使用时(例如,继承或实现这个接口,用这个类型…

Python 数据存储 ---->方式

我的个人博客主页:如果’真能转义1️⃣说1️⃣的博客主页 关于Python基本语法学习---->可以参考我的这篇博客:《我在VScode学Python》 数据存储是指在数据加工处理过程中将产生的临时文件或加工结果以某种格式保存。 常用的数据存储格式包括 TXT、Exc…

Java线程池常见面试题详解

线程池 池化技术 池化技术是一种常见的编程技巧, 把一些能够复用的东西(比如说数据库连接、线程)放到池中,避免重复创建、销毁的开销,在需要时可以重复使用这些预先准备的资源,从而极大提高性能。(提前保存大量资源,…

人生路上就是要不断打破认知边界

2023-4-25分享新知1.多角度看问题,竭尽全力才能找到突破口。结合客户需求解决问题2.新产品&有用的产品对用户提供有价值的产品3.全力就是所有部门都参与开发新产品,好机会就是有时间开发新产品,好产品就是一家企业的底气,产品…

SpringBoot 2.7.X 一套代码适配多种数据库讲解(图文详细)

文章目录 SpringBoot 2.7.X 一套代码适配多种数据库讲解(图文详细)1 简介1.1 概述1.2 环境安装1.3 测试脚本 2 基于Mybatis 方式2.1 添加DatabaseIdProvider配置2.2 在Mybatis的XML中,指定SQL语句的databaseId标签2.3 控制器接口样例2.4 呈现效果 3 基于MP框架Wrapps条件构造器…

AutoGPT也有Web UI了

AutoGPT能够在你的电脑上做任何你想做的事情,并且我们在前面的文章中也介绍了其他的一些类似的应用。 但是AutoGPT最大的一个问题是只能通过命令行界面(CLI)运行,这样就算是专业的技术人员使用起来也很麻烦,想想Stable Diffusion&#xff0c…

关于jeecgboot中遇到的问题及解决方案

1,关于数据权限问题 目的:一个人对应多个部门,部门下可能有子部门,过滤数据权限 解决方案: 方案①(不推荐):如果后台是手写的sql(没有用到mybatis-plus)&…

一文弄懂标识符的规则和instanceof关键字

“世间有吸引法则,在于你有没有价值,价值来于物质资本和精神资本” 标识符的命名规则 标识符的含义:是指在程序中,我们自己定义的内容,例如方法名,变量名或者类名 命名规则:(硬性要…

AlgoC++第六课:BP反向传播算法

目录 BP反向传播算法前言1. MNIST2. 感知机2.1 前言2.2 感知机-矩阵表示2.3 感知机-矩阵表示-多个样本2.4 感知机-增加偏置2.5 感知机-多个输出2.6 总结2.7 关于广播 3. BP4. 动量SGD5. BP示例代码总结 BP反向传播算法 前言 手写AI推出的全新面向AI算法的C课程 Algo C&#xf…

PHP、一:概述

1.概念 2.wampsever安装 百度搜索直接下载 下图是解压后目录,所写文件必须写在www文件夹下。 例:www文件夹下新建1.php,phpinfo()查看当前版本等信息。 使用localhost访问 php版本切换: 鼠标左键点击wampserver,切…