首页 > 编程知识 正文

内网穿透原理和实现方式,内网穿透 原理

时间:2023-05-04 12:16:03 阅读:239145 作者:2405

什么是内网穿透

作者:匿名用户
链接: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有免费的套餐

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。