内网穿透原理和实现思路介绍

article/2025/11/10 5:35:32

内网穿透技术,简单理解就是将内网的服务映射到公网中,这样可以随时随地访问。

那什么是内网?什么是公网?先从这个基本概念来简单介绍吧

1. 公网、内网和外网

首先声明,公网、内网和外网这几个概念,不是专业名词,而是根据网络情况,给不同的网络定义个名称,是约定俗成的概念。

内网:也叫做局域网,通常指单一的网络环境。例如你家里的路由器网络、公司网络。网络大小不定,内网中的主机可以相互访问,一旦越出这个局域网访问,就无法访问该网络中的主机。

公网:就是我们可以冲浪【多多少少暴露一点年龄】的互联网,例如QQ、微信、爱奇艺,都是在公网的IP上,只要手机电脑有网络,都可以直接访问。

外网:指国外的网络,例如Github、YouTube,通常是无法访问的,个别能访问的,也是响应速度慢,网络带宽极低。

 

请大家做个遵纪守法好青年,这里撇开外网不谈,这里单独聊聊内网和公网。

一个路由器打开wifi功能,就是一个局域网,手机电脑就能链接。

路由器上接入网线,连接到公网,手机电脑就能访问公网。

那路由器是不是公网地址?网线直接接电脑上,那电脑是不是公网地址?

答案:路由器不是公网地址,运营商网线的那头,也是运营商的局域网,不是直接的公网地址。

区分公网和内网的唯一区别,是IP地址。

因为IPv4的物理限制,IP数量不够分,所以运营商通常是给某市某区的某一片区域划分一个IP

虽然IPv6出来了这么多年,奈何展开慢,不然谁愁IP呀。

 

你现在可以去访问百度,搜索IP,会显示你的IP:xxx.xxx.xxx.xx 某某省某某市某某区 xx运营商

一个公网IP划分成很多个局域网,这技术叫做NAT(网络地址转换)。

因为公网IP因为少,所以很宝贵。

因为家庭用的是内网地址,并且运营商封了很多端口,并且下载不满速上载低速,所以家用带宽年费用很低。

相反,公司带宽啥都有,但是需要各种备案,并且费用那是真的贵。

2. 为什么要内网穿透

抛开场景谈需求都是扯犊子,结合场景来理解内网穿透技术的适用范围。

先了解一下,内网有哪些限制?

  1. IP不固定,一段时间会自动切换。

  2. 不能直接访问,只能在同一个网络中访问。

  3. 敏感端口被封,不能用。例如80 443端口。

  4. 网速不稳定,下载不满速,上载低速。

再说一下,公网的优缺点:

  1. 贵,服务器贵,带宽贵,IP贵。

  2. IP固定,端口全开放。

  3. 带宽稳定,BGP多线路融合,响应速度快。

另外还要补充:

  1. 域名的注册和解析

  2. 大陆地区的域名需要ICP备案

  3. 服务器80端口的HTTP协议,web需要

  4. 服务器443端口的HTTPS协议,需要SSL证书

 

现在结合场景来介绍内网穿透的适用范围:

场景1:开发人员本地调试接口

描述:程序员给项目添加服务,例如短信服务,支付服务,需要在本地写代码、调试和测试。

特点:本地调试、网速要求低、需要HTTP或者HTTPS协议。

需求:必须本地,必须HTTP[S]网址。

场景2:远程办公,在家访问公司内部系统和存储服务

描述:疫情原因需要在家工作,又需要访问公司内部的系统。

特点:远程访问、具体协议不固定、远程时间不固定,可长可短。

特殊:出差的时候,手机上看家里电脑上的资料和视频。

场景3:公网访问局域网的私人存储

描述:家有私人存储,映射到公网,随时随地可以存取文件。

特点:网址或者IP地址都行,需要稳定的通道和传输带宽。

场景4:搭建私人游戏服务器,和伙伴开黑

描述:用自己的电脑做服务器,和小伙伴玩魔兽争霸、我的世界

特定:带宽要求不高,响应速度要求高,只需要IP

想起以前大学玩到宿舍熄灯后偷偷接电玩游戏的时光,想想就激动

 

3. 内网穿透原理和常用方法

既然内网主机不能直接访问,那就在公网弄个服务器。

因为内网主机可以访问公网主机,然后将内网主机和公网主机进行连接,并且保持连接。

如果公网主机接收到的请求,通过链接转发给内网主机即可。

将内网服务进行公网映射,服务通常从端口提供服务,例如:

  • ssh服务,端口好似22

  • web服务,端口是80和443

  • 远程桌面服务,端口是3389,win专业版支持远程桌面

  • redis服务,端口是6379

  • jellyfin视频站,端口是8096

  • 我的世界 游戏服务,端口是25565

如下图:

 

这个就是内网穿透的思路。

有了思路,怎么实现?实现的重点是主机连接并且保持长久连接。

实现的方法有几种,这里都来介绍一下:

  1. 基于TCP的Socket连接

  2. 基于SSH的反向代理

  3. 基于WebSocket连接

【当然除此之外,还有其他方法,不过不太了解,就不列出也不介绍。】

1. 基于TCP的Socket连接

Socket连接是计算机网络课程中的基础编程题,你们肯定都做过,《基于TCP的Socket连接做一个命令行版聊天室》

下图是Socket的通信模型

 

基于TCP的Socket连接,是一种可靠的连接形式,适合将两个主机的端口进行绑定并保持连接。

因为Socket需要客户端和服务端,所以Socket做内网穿透,需要客户端。

既然需要做客户端,通常各服务商的操作,是接入更多的处理,例如智能选择节点等,客户使用就更简单更智能。

优点:智能选择节点,操作完全可控

缺点:安装客户端,响应速度慢

2. 基于SSH的反向代理

SSH,全称Secure SHell,一个安全加密协议。

OpenSSH是遵循协议实现的一个免费开源工具,日常说的SSH,指的是这款软件。

几乎所有的Linux和Macos都自带这款软件,Win10和11都自带,Win7需要借助第三方终端。

SSH支持远程控制和代理,代理有正向代理、反向代理、socks5代理。

反向代理的操作,就是让远端启动端口,把远端端口数据转发到本地。

HostA 上启动一个 PortA 端口,通过 HostB 转发到 HostC:PortC上,在 HostA 上运行:

反向代理:

HostA$ ssh -R HostC:PortC:HostB:PortB  user@HostC

使用SSH做内网穿透,好处是无客户端,基本上每个操作系统都内置了SSH。

优点:安全可靠,无客户端,响应速度快

缺点:单一节点

冲这超酷的无客户端,搞一个

 

3. 基于WebSocket连接

WebSocket 协议诞生于 2008 年,在 2011 年成为国际标准,并且 WebSocket 同样是 HTML 5 规范的组成部分之一。

WebSocket 是一种全新的协议。它应用在了 web page 上,从而使通信双方建立起一个保持在活动状态连接通道,并且属于全双工(双方同时进行双向通信)。

WebSocket和Socket的工作模式差不多,不同点是WebSocket工作在Web网页上。

WebSocket和Socket一样,需要客户端配合服务端工作,所以用户需要配置双端,才可以使用。

我当初做内网云也想到了这个,可惜实践的太少,又不想做客户端,所以放弃了.....

 

4. 内网转发的安全问题

有利肯定就有弊,将本地服务器暴露在公网,也有不好的地方。

第一个:公网主机端口被扫描

网络上到处都有爬虫机器人抓数据和扫描接口【抓肉鸡】。

内网主机由于无法访问,所以你开放端口是没啥安全问题的。

但是部署到公网后,就要注意安全问题。

解决方法:

  • 记录端口访问日志并定时检查

  • 端口伪装,例如22->34423, 3306->42887

  • 端口定时更换,或动态端口号

第二个:DDoS攻击

这个是针对服务器来说的,并非某个端口。

何为DDoS?一般来说是指攻击者利用“肉鸡”对目标网站在较短的时间内发起大量请求,大规模消耗目标网站的主机资源,让它无法正常服务。

自由服务器需要考虑下,解决方法很多,如下:

  • 高防服务器,重点提高服务器的流量防御能力。

  • 黑名单,统一封锁大量或区域IP,可能会关闭了正常流量。

  • DDoS清洗,实时检查请求,发现奇怪请求直接关闭链接。


学习知识点的,到此就可以止步了,下面是内网穿透服务介绍,需要请求继续观看,有给大家准备福利


5. 简单易用的内网穿透服务推荐

 

服务:内网云——基于SSH安全协议的内网穿透服务

官网:内网云SSH

体验隧道:ssh -R 80:127.0.0.1:8000 sh@sh3.neiwangyun.net

体验隧道直接用,无密码无客户端,官网都不用去

命令解析:

  • ssh:ssh远程命令

  • -R:逆向绑定远程端口

  • 80:固定端口

  • 127.0.0.1:固定的本机网络

  • 8000:你需要转发的网络端口,自行更改

  • sh:默认匿名账号,不需要密码验证

  • http://sh3.neiwangyun.net:内网云服务器节点的地址,固定值

隧道持久化:

  1. screen + autossh

  2. supervisor + autossh

福利:隧道兑换码 NEW-USER-ONE-PIECE



 


http://chatgpt.dhexx.cn/article/m555tdYT.shtml

相关文章

内网穿透工具frp原理和使用教程

内网穿透(Port Forwarding)是将公网上的IP地址映射到内部网络中的一台计算机的某个端口上,以便外部网络可以访问该计算机中运行的应用程序。内网穿透技术可以通过一些开源工具来实现,其中比较常用的是frp。在本文中,我…

内网穿透原理

前言 内网穿透一般在家庭用户下NAS设备在经常折腾,实际上企业云服务就是典型的内网穿透,只不过方式原理有点不同,家庭网络因为宽带的上传限制和没有公网IP,难度大于企业宽带。实际上内网穿透就是反向代理,域名解析&am…

内网穿透的实现和原理解析

需求场景: 基于微信平台开发服务号,本地移动端测试时,需要在微信平台注册测试号,然后填写接口配置信息,此信息需要你有自己的服务器资源,填写的URL需要正确响应微信发送的Token验证。如何能让外网访问到本地服务器呢&…

MacBook M1 Idea集成SVN

1.检查是否安装SVN svn —version2.检查是否安装了brew brew -v3.安装 brew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)” speed4.记住安装路径 5.配置国内镜像源HOMEBREW BOTTLE 6.svn安装前需要执行 按照/usr/local路径…

IntelliJ IDEA上svn分支管理和使用

IntelliJ IDEA上svn分支管理和使用 从Subversion下载trunk下的代码 选择项目创建分支 右键 Subversion --> branch or Tag … 选择Repository Location:需要创建的项目 选择Any Location 分支的位置和名字 详细查看截图 切换到分支 选择项目右键Subversion --> Update …

vscode / idea 使用SVN及查看历史记录

一、vscode使用 SVN 1、在vscode插件中心搜索svn 进行安装(我这里已经安装完毕了) 注意:插件安装成功,需要重新启动软件。 安装成功后会出现如下的图标: 2、桌面右键使用SVN Checkout… 来检出远程库的代码&#xf…

IDEA之配置SVN

最近在公司的开发项目过程中,发现有关idea2020的svn配置方法都参差不齐,所以整理了有关idea2020整合svn的步骤; 目录 一、SVN配置1.1 下载SVN1.2 安装SVN1.3 配置SVN 二、常见问题2.1 Warning:java: 源值1.5已过时 一、SVN配置 1.1 下载SVN…

IDEA使用svn拉取多模块项目

如果没有安装过svn客户端,安装的时候需要选择安装第二个工具,如下图所示 安装小乌龟, 自行搜索, 注意点是需要选择安装第二个工具 因为默认是不安装的, 而这个组件是集成到IDEA ”必须的” . 如果是已经安装好的, 但是没有选这个的也是有办法的 办法一: 更改小乌龟 在卸载小乌龟…

idea 使用svn出现path to certificate

百度了一会,有说清缓存的,不能使用。 还有配置这个的,也不行。 我记得以前可以,后来发现你拉去代码不用在idea拉,能提交。只要你不选最外层项目。可能是我打开了两个idea,都用的这个链接,只是文…

IDEA SVN 代码合并

IDEA SVN 代码合并 一:安装Subversion 插件 打开settings 设置,搜索svn,点击install,安装成功后重启 二:导入svn项目 打开idea,左下角点击 Subversion, 选择第四个选项卡或者从 View -> Tool Windows -> Sub…

IDEA上使用svn插件

安装后会在安装目录下出现svn.exe字样有用!!! 如果没有svn.exe 原因: 产生这个问题的原因是由于我们在安装svn时,默认缺少一项导致的,我们只需要再重新安装一下即可(不需要卸载) 双击安装文件后,选择Modify 2.勾选command line client tool…

Idea使用SVN常用操作

贴一个有弧度的代码 目录 Idea中配置 检出代码 subversion有许多选项 拉取(更新)/提交代码 ​ Show Diff对比代码, 提交代码注释项必填 查看历史提交 设置文件忽略 拉出新分支 将分支合并到主干 删除分支 更换SVN账号信息 svn结构: 一般习惯性在创建repository仓…

macOS系统升级后idea使用svn报错

昨天升级了 macOS Monterey 更新完后IntelliJ IDEA无法正常使用SVN 报Cannot run program “svn” (in directory “/XXXX/XXXX/XXXX/XXX”): error2!,NO such file or directory 看了一下网上的解决方案 1.command line client中的参数,在代码的svn…

idea使用svn提交代码失败,报错E230001: Server SSL certificate verification failed: certificate issued

IDEA踩坑记一 问题描述 使用SVN提交代码失败,报错E230001: Server SSL certificate verification failed: certificate issued。 在网上搜索了一下,全是下面这样的回答: 实际上这个 ls 是查看目录内容的命令,执行之后会展示目录…

IDEA使用svn进行代码分支合并

svn基础这里就做说明了,只简单说明一下IDEA下svn分支合并的操作 首先打开IDEA下的svn操作界面如图 按步骤点击后会出下如下界面,第一次进入没有配置分支路径是没有红框里面的选项的 那么就点击configure branches进行配置,如图 首次肯定是没有我这里配置的这些东西的按照步骤…

IDEA使用svn提交、检出代码详细步骤

原文地址传送门 ,感谢分享! 1、Idea集成svn 2、查看svn仓库 调出svn视图: 连接svn服务器: 连接后效果如下: 3、忽略上传文件 由于不同的用户使用的环境不同,因此有些文件不用上传到svn服务器,比如有的用…

idea使用svn下载项目并配置项目

idea使用svn下载项目并进行配置,首先安装svn,并在idea中配置svn,安装过程此处省略(注意要勾选command line工具),idea中的配置如下: idea中,设置-版本控制---subversion,这里一定要指定command…

Idea项目配置使用SVN

首先下载svn https://osdn.net/projects/tortoisesvn/storage/1.14.5/Application/TortoiseSVN-1.14.5.29465-x64-svn-1.14.2.msi/ 再下载一个中文包(看个人习惯,不影响使用) https://osdn.net/projects/tortoisesvn/storage/1.14.5/Language…

IDEA如何使用SVN插件

IDEA如何使用SVN插件 下载TortoiseSVN 官网下载最新版 安装时 看图片 如已安装看看有没有svn.exe文件,有就跳过安装没有继续 安装后会在安装目录下出现svn.exe字样有用!!! 然后打开IDEA ,file - setting 按钮打开…

Idea 使用svn创建新分支

1, 使用工具:idea编辑器,svn版本控制工具 2, 打开idea 编辑器,按照下图选择 3, 从主干上拉一个新分支,放在branch目录下 选择trunk 右键选择 branch or Tag...选项 3,设置分支的名…