内网穿透原理和实现

article/2025/11/11 1:46:53

什么是内网穿透

作者:匿名用户
链接:https://www.zhihu.com/question/63098230/answer/1929852198

希望对你们更易懂要知道这个的意思,需要先来点前菜
1、地球上的电脑设备等要实现通信,都需要有个IP地址才可以实现。
2、IP地址是人为创造的,所以一定有数量限制。
3、最开始没有想那么多,反正就那么点电脑设备,于是直接使用IP地址连在了一起
4、但是后来确实IP地址数量不够,怎么办呢? 聪明的地球人就想了个办法:那就多台电脑共用一个IP地址吧。
5、但这“多台电脑”不可能没有自己的IP地址吧,咋个整? 这个时候就定义了一种“专用网络”,在这个“专用网络”里面可以使用规定的免费IP地址,且所有的免费的IP地址不能作为共用IP地址来使用。
6、这个“专用网络”实际上就是“共用了一个IP地址的多台电脑设备组成的网络”,此时这个“共用的IP地址”就成了“公网IP地址”,而专用网络里面的免费IP地址就是 私有IP地址。
7、但是吧,还是有问题需要解决,对外,信息的传输只会发到共用的IP地址上,那么怎么和它下面的专用网络联系在一起呢?
8、这个问题其实早就有解决方案了,它来自于早期人们发明互联网的时候所规定的“端口”。因为那时候一台电脑把信息发给另一台电脑,如何决定是由那个软件来接收处理 是个待解决的问题。而端口就能解决这个问题,人们可以规定一些端口号,各软件可以持有至少一个端口,然后对方电脑发信息的时候就可以在IP地址后面写上端口,就可以让接收方对应端口的软件来处理信息了。
9、所以,从外面的来的信息,在发到公网IP的时候,它后面一定会有个端口,所以,我们完全可以造个设备,把这个端口转发到专用网络中对应私有IP的端口上,可以通过维护一个对照表来实现。ps:当然,不要端口号也可以,只做地址转换,维护一个地址对照表即可,这样的方式可以叫它静态NAT,如果你在路由器里面看到过DMZ主机这个功能,可以说就很类似,此时就是私有IP地址的全端口暴露给公网。
10、一般情况下,我们的软件会自动的去处理这些,会一层一层的转上去,一直转到公网IP那里。所以,就算你手机或电脑获取的IP不是公网IP,只要对外有个公网IP在,仍旧可以和外面通信。
11、实际上,上面的9、10 就是内网穿透,只是我们一般感觉不到,这种情况下的自动内网穿透存在感比较低。
12、更多的,大家谈及内网穿透的时候,是说的“自定义的内网穿透”
13、默认情况下,软件是自动的在处理专用网络和外面的通信。直到有一天,你想自定义,你想自己定义某软件和外面的通信,此时,内网穿透就老有存在感了。(所以,如果你只是自己上上网看看电影玩玩游戏,这东西基本没啥用处)
14、此时,你得自己去定义端口的转发,把专有网络中某私有IP的端口转发到公网IP上。(他们也会说是映射,其实意思在广义上是差不多的,就是“实现公网IP上的某端口和私有IP的某端口相对应来传输数据)

补充:NAT的概念 每次拨号ip会变 此时只要客户端重新请求 就能重新绑定 而一般有设备连接的时候 是不会乱变的。因而客户端请求服务端一般不会出问题 而两个客户端之间相互 就容易出问题了

HOW TO DO

我们有时候需要访问家中电脑,亦或者不想把网站搭载公有云上,想搭建在自己的电脑上,然后通过外界访问,这个时候内网穿透就应运而生了

家里 Nas 中安装了一系列服务,如果外网访问不了,手机上连不上,就十分不方便。所以我们需要内网穿透,方法主要有两个:动态域名和反向代理,下面对比一下:

动态域名

最早期的方法,要求家中拨号网络有一个外网 ip,每次断线拨号虽然 ip 变了,通过定时请求动态域名提供商的一个接口,把域名指向改成你最新的外网地址,这样其他地方就可以通过域名访问你家里的 IP 了。

一般动态域名路由器都支持设置,不支持也没关系,你家里的服务器的定时请求一次 DDNS 服务商接口即可,比如 no-ip 的 http://ddns.net 域名更新:

https://USER:PASSWD@dynupdate.no-ip.com/nic/update?hostname=test.ddns.net

在家里服务器的 crontab 中设置每 15 分钟 curl 访问一下上面的地址,把用户名密码和hostname替换成你申请的域名,即可更新。

最后家中路由器需配置端口转发,比如把外网 ip 的 443 端口转给内网服务器的 443 端口。

这是最廉价的解决方案,基本没成本,各类 DDNS 服务商也是免费的。唯一问题是当 IP 更新后,最长可能需要 15 分钟才能更新域名指向(更新接口调用快会被 ban),再算上各级 DNS 缓存时间,前后可能会有半小时你无法访问,不过我一周顶多碰到 1-2 次。

如果家里有外网 IP ,这是首选方案,现在越来越多宽带新开户无法得到外网 IP 地址,比如电信。联通还好,曾经不经我允许把我换成内网 IP,然后我打电话去骂,骂来了一个外网ip。但随着 IPv4 资源减少,IPV6 普及以前,外网 IP 肯定越来越少,所以我们需要反向代理。

反向代理

家中没有外网 IP 时,如果你有一台固定 IP 的外网 VPS,那么可用它做跳板访问家里内网端口。在 VPS 上启动一个反向代理服务,同时在家里内网服务器上启动另外一个映射服务,那么链接外网 VPS 的 443 端口,可以被反向代理转发到内网的 443 端口上。

最简单的方案是 ssh -R 反向代理,比如我想把内网另外 192.168.1.3:443 端口暴露给 VPS ( 202.115.8.1 )的 8443 端口,可以在任意一台内网机器上运行:

ssh -R 0.0.0.0:8443:192.168.1.3:443 user@202.115.8.1

这样会让远端(-R )创建一个新端口( 8443 ),并把该端口的数据通过 ssh 链接传回来给我,我再把它转发给我能访问的 192.168.1.3:443。在 vps 修改下 /etc/ssh/sshd_config:

GatewayPorts yes

这样连接外网 vps 上的 8443 端口相当于连接内网 192.168.1.3 的 443 端口了。

该方法没有断线重连,连接断了 ssh 进程就会退出,需要额外写脚本来检测重启,或者用 autossh 保活。正儿八经长期用的话,推荐使用专业程序来提供更加稳定高效的方向代理。

补充

ipv6就不存在内网穿透的问题,因为终端设备获取的几乎都是可以直接访问的IPV6地址,所以,我自家服务器使用的IPV4转发穿透+IPV6;IPV6无法访问的时候(访问设备也要支持IPV6)就用IPV4访问。
手机也是linux 可以做内网穿透 变成移动服务器 软件ksweb
软件QPython OH
Sunyun-Ngrok都可 ngrok有免费的套餐


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

相关文章

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

内网穿透技术,简单理解就是将内网的服务映射到公网中,这样可以随时随地访问。 那什么是内网?什么是公网?先从这个基本概念来简单介绍吧 1. 公网、内网和外网 首先声明,公网、内网和外网这几个概念,不是专…

内网穿透工具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 按钮打开…