小白学k8s(3)什么是内网穿透
什么是内网穿透
内网穿透
什么是内网穿透呢?
百度百科的描述
内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。
简单来说内网穿透的目的是:让外网能访问你本地的应用,例如在外网打开你本地http://127.0.0.1指向的Web站点。
工作方式
网络地址转换(Network Address Translation,NAT)机制的问题在于,NAT设备自动屏蔽了非内网主机主动发起的连接,也就是说,从外网发往内网的数据
包将被NAT设备丢弃,这使得位于不同NAT设备之后的主机之间无法直接交换信息。这一方面保护了内网主机免于来自外部网络的攻击,另一方面也为P2P通信带来了
一定困难。Internet上的NAT设备大多是地址限制圆锥形NAT或端口限制圆锥形 NAT,外部主机要与内网主机相互通信,必须由内网主机主动发起连接,使 NAT设
备产生一个映射条目,这就有必要研究一下内网穿透技术。
通信的一方处于内网
两台主机进行通信,一方有公网ip,一方没有
一台主机有一个公网 IP,另一台主机有一个内网 IP

我们假定Client:A有内网ip,Client:B有公网ip。
Client:A处于NAT之后,拥有ip(10.0.0.1:8080),Client:B位于 NAT 之前,并拥有IP(138.76.29.7:8080),NAT拥有公网 IP 155.99.25.11。
Client:B有公网ip,所以Client:A可以直接通过TCP连接到(138.76.29.7:8080),但是如果Client:B连接Client:A则会连接不成功,会找不到Client:A。
此时,需要一个公有的服务器辅助进行内网穿透。Client A 和 Client B 向服务器发起登陆请求,并保持一个 TCP 或 UDP 连接,服务器记录其 IP 地址和端口号,
这里服务器对 Client A 是记录其经过 NAT 映射之后的 IP 和端口号。当 Client B 想连接 Client A 时,首先向服务器提出请求,服务器在收到请求后向
Client A 发出打洞命令,并将 Client B 的[IP 地址:端口]对发给 Client A,Client A 根据接收到的 IP地址和端口号向 Client B 发起 TCP 连接
或发送 UDP 数据包。接下来 Client A 和Client B 之间便可以建立数据传输通道。
通信的双方都处于内网
两台主机进行通信,双方处在内网中

两方都处于内网中,直接的通信是不能连通的。这时候就需要借助于,一个位于公网的服务器,来协助双方进行通信。
Client A首先向服务器提出连接请求,服务器将 Client A 的 IP地址和端口号对[155.99.25.11:51200]发给 Client B,并向 Client B 发出连接请求;
Client B 收到服务器的连接请求后首先向[155.99.25.11:51200]发送一定数目的 UDP探测包或 TCP 连接请求,在 NAT B 上记录一下[155.99.25.11:51200]的
连接,Client B 随后向服务器回复连接完成;服务器在收到 Client B 的报告后将 Client B 的公网IP 地址和端口号对[110.10.33.10:5000],此时由于
NAT B 上已经留下了对应于[155.99.25.11:51200]方向的连接,Client A 向[110.10.33.10:5000]发出的数据包或连接请求将不会被丢弃。
NAT穿透的原理
NAT设备(或软件)维护一个状态表,用来把内部网络的私有IP地址映射到外部网络的合法IP地址上去。每个包头中的IP地址和端口信息在NAT设备(或软件)中都
被修改并翻译成一正确的IP地址发往下一级。当一个内网主机通过NAT打开一个“外出”的TCP或UDP会话时,NAPT分配给这个会话一个公网IP和端口,用来接收外网
的响应的数据包,并经过转换通知内部网的主机。这样,NAPT在[私有IP:私有端口]和[公网IP:公网端口]之间建立了一个端口绑定。
UDP内网穿透的实现流程
(1) 两个需要通过内网穿透进行通讯的内网客户端,分别将自己的外网收发接口注册给一个具有公网ip的中转服务器;
(2) 中转服务器将两个客户端注册的收发接口分别告知给对端;
(3) 一个内网客户端使自己的接收端口作为源地址,向对端的发送端口发送一个udp数据包,这个数据包称为打洞包。发送过这个打洞包后,可以在这个内网的出口
路由器上产生一条NAT记录,令后续从对端发送端口发来的数据包都不被丢弃, 而是转发给相应的内网客户端的指定端口;
(4) 发送过打洞包后,对端发送至本端路由器指定接收端口的数据包,就会根据NAT记录转发至本端的内网服务器接收端口,从而实现了内网服务器接收外网数据包的功能;
(5) 另一个内网服务器同样执行上述步骤 (3) 、 (4), 即可实现两端内网服务器相互收发音频数据包的功能。
最后附上一张完整的交互图片

参考
【一分钟实现内网穿透(ngrok服务器搭建)】https://www.cnblogs.com/best/p/7465444.html
【内网穿透】https://baike.baidu.com/item/内网穿透#reference-[1]-2066783-wrap
小白学k8s(3)什么是内网穿透的更多相关文章
- 今天学到的新知识--使用localtunnel实现内网穿透,感觉很神奇哇~~
localtunnel 是一个基于 nodejs 的内网穿透工具.通过简单的安装可以实现将内网里的设备的某个端口暴露在公网中以提供服务. 首先你电脑要有node环境 使用本地隧道,对应本地服务的端口号 ...
- 手写内网穿透服务端客户端(NAT穿透)原理及实现
Hello,I'm Shendi. 这天心血来潮,决定做一个内网穿透的软件. 用过花生壳等软件的就知道内网穿透是个啥,干嘛用的了. 我们如果有服务器(比如tomcat),实际上我们在电脑上开启了服务器 ...
- 聊聊第一个开源项目(内网穿透) - CProxy
文章首发:聊聊第一个开源项目 - CProxy 作者:会玩code 初衷 最近在学C++,想写个项目练练手.对网络比较感兴趣,之前使用过ngrok(GO版本的内网穿透项目),看了部分源码,想把自己的一 ...
- 内网穿透神器(ngrok)服务端部署【分享一台自己的ngrok服务器】【多平台】
Ngrok为何物 “ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道.ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放.”这是百度百科上给Ng ...
- SSH 端口转发+内网穿透
用最直白的语言对本文所有内容进行定义: 端口转发(-L):用A机器(内网)登录B机器(公网), 在A机器打开端口,将收到的所有请求转发到B机器的某个端口 (在代理机上执行) 内网穿透(-R):用A机器 ...
- Ngrok 内网穿透利器
Ngrok是什么 Ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道.Ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放 为什么要使用Ngrok ...
- Ngrok 内网穿透神器(转载)
mac上配置web服务: http://note.rpsh.net/posts/2013/11/27/osx-10-9-apache-server-php-mysql/ Ngrok 内网穿透神器 由于 ...
- SSH的内网穿透
SSH的内网穿透 1.内网: ssh -N -f -R 2222:127.0.0.1:22 lienzh@我的PC的IP2.外网: ssh -p 2222 root@localhost ...
- ngrok内网穿透(微信调试:只试用于微信测试账号)
一.简介 ngrok:https://ngrok.com 功能:就是把外网地址映射到本地的内网地址 缺点: 1.免费版生成的域名是随机的(由于我是用于调试,就没什么关系,如果是正式生产环境可能需要一个 ...
- 内网穿透&UDP打洞
这两天找度度重新回忆了一下关于内网穿透的事情,在百度文库上找到了两三篇写的比较通俗易懂的文章,把内网穿透做个简单总结. 首先文章建议 Cone NAPT 还有希望,要是 Symmetri NAPT 就 ...
随机推荐
- Axure 多平台自适应
步骤一:设置自适应视图 1.新建两个页面分别命名为"PC版"和"移动版" 2.启动自适应视图: 条件为大于等于,宽为1024,继承于基本视图3.新建自适应视图& ...
- django中间件需要了解的方法 importlib模块 csrf校验策略 csrf相关装饰器
目录 django中间件三个需要了解的方法 process_view process_exception process_template_response 基于django中间件实现功能的插拔式设计 ...
- c#-微软
1)使用c#编写第一个程序简介: c#编程语言允许你构建多种类型的应用程序,例如: 用于捕获,分析和处理数据的业务应用程序 可从Web浏览器访问的动态Web应用程序 2D和3D游戏 金融和科研应用程序 ...
- ME2N增强
一.ME2N增加字段 二.结构中添加扩展字段 附加结构中添加同名这些字段时会报错,原因是MEREP_OUTTAB_DOWNPAY等结构已存在该字段,导致冲突 三.添加逻辑代码 包含文件LMEREPI0 ...
- L2-016 愿天下有情人都是失散多年的兄妹 (25分) (简单递归判断)
L2-016 愿天下有情人都是失散多年的兄妹 (25分) 呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你帮助一 ...
- 服务降级,限流等--sentinel(SpringCloud Alibaba)
一. 介绍Sentinel,中文翻译为哨兵,是为微服务提供流量控制.熔断降级的功能,它和Hystrix提供的功能一样,可以有效的解决微服务调用产生的"雪崩"效应,为微服务系统提供了 ...
- 七、mycat-ER分片
系列导航 一.Mycat实战---为什么要用mycat 二.Mycat安装 三.mycat实验数据 四.mycat垂直分库 五.mycat水平分库 六.mycat全局自增 七.mycat-ER分片 一 ...
- 【RK3399】1.RK3399开发板基础配置
最近在小黄鱼入手了一个RK3399的开发板,RK的芯片我也是第一次使用.FireFly配套提供了完善的教程,可以在他们的WIKI上找到.上面有的内容就不在本文叙述了,大家可以参考教程https://w ...
- java进阶(7)--Object类-toString()/equals()/finalize()/hashCode()
一.object类介绍 object类这个老祖宗中的方法,所有子类通用,直接或间接继承. 学习常用方法即可 列表 prtected object clone() //对象克隆 ...
- 每天学五分钟 Liunx 110 | 存储篇:RAID
RAID RAID 是廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks)的意思.通过它可以将较小的磁盘组成较大的磁盘. RAID 模式 RAID 有几种模 ...