目录
前言
简单来说内网穿透的目的是:让外网能访问你本地的应用,例如在外网打开你本地(localhost)指向的Web站点。可以分配给你一个域名让你本地的web项目提供给外网访问,特别适合向别人展示你本机的web demo 以及调试一些远程的API (比如的开发)
为了理解内网穿透我们先来了解以下几个概念:
IP
IP 地址是 IP 协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
内网IP:ifconfig 查出来的是你本机的 IP 地址,也就是内网私有地址
内网IP公网上的路由器都是屏蔽掉了此类私有地址,仅能在局域网使用,不能联通外网,这是因为私有IP本来就是人为保留出来专供私有网络通信用的(RFC 1597中描述)。
私有IP虽然它们不能直接和Internet网连接,但通过技术手段仍旧可以和Internet通讯。(即本文的内网穿透)
公网IP:百度查出来的地址是你上网的公有地址,也许并不是你主机的地址,而是电信,移动或联通分给你的地址,用于连接互联网。
外网IP域名
域名是IP的别名,域名最终通过DNS(Domain Name System)解析成IP地址。
域名转换IPv4是一个32位的数字,IPv6有128位,要记住一串毫无意义的数字非常困难,域名解决了这个问题。而DNS作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
内网穿透
内网穿透即 NAT 穿越,通俗说就是个人计算机都处在局域网环境中,也就是内网,那么互联网相对来说就是外网。内网的一些主机本来已经分配到了本地IP地址(如局域网DHCP分配的IP),但现在又想和互联网上的主机通信(并不需要加密)时,如何找到目标计算机呢?这时候就要询问挡在目标机和互联网之间的 NAT。
NAT穿越(NAT traversal)涉及TCP/IP网络中的一个常见问题,即在处于使用了NAT设备的私有TCP/IP网络中的主机之间建立连接的问题。--Wiki
NAT
网络地址转换(Network Address Translation),也叫做网络掩蔽或者IP掩蔽,就是替换 IP 报文头部的地址信息。NAT 通常部署在一个组织的网络出口位置,通过将内部网络 IP 地址替换为出口的 IP 地址提供公网可达性和上层协议的连接能力。也就是说 NAT 是实现公网和局域网直接数据传输的关键环节。
在互联网终端急剧增长的今天,公网ip已经成为稀缺资源,对于国内垄断的电信运营商来讲,更是不可能随便免费给你一个公网ip。NAT设备(如路由器)会在IP包通过时会修改其源/目标IP地址,有时还会修改TCP/UDP协议的端口号,从而实现多台设备使用同一外网IP进行互联网通讯。通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用的IP地址空间的枯竭,节省了大量的ip资源。
但NAT与此同时也带来一些弊端:首先是,NAT设备会对数据包进行编辑修改,这样就降低了发送数据的效率;此外,各种协议的应用各有不同,有些协议是无法通过NAT的,这就需要通过穿透技术来解决。
NAT网关NAT的实现方式有:
静态转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一。
动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的。
端口多路复用(Port address Translation,PAT),内部网络的所有主机均可共享一个合法外部IP地址实现对互联网的访问,从而可以最大限度地节约IP地址资源。同时又可隐藏网络内部的所有主机,有效避免来自互联网的攻击。因此,目前网络中应用最多的就是端口多路复用方式。
NAT特点:
网络被分为私网,公网两部分,NAT网关设置私网到公网的路由出口。
网络只能由私网侧发起,公网无法主动访问私网主机(是这样设计的,所以便要穿透它)
NAT网关在两个访问方向上完成两次地址的转换,出口替换源地址,入口替换目的地址
NAT网关的存在对通信双方保持透明
NAT网关为了实现双向翻译,需要维持一张关联表,将会话信息保存
内网穿透软件
Ngrok通过在公共的端点和本地运行的Web服务器之间建立在TCP之上的端到端的安全隧道(tunnel),两端的程序在其实现的隧道内透明的进行数据交互,将NAT和防火墙后面的本地服务器暴露给公网。
Ngrok国内免费的Sunny-Ngrok软件()是通过反向代理技术(隐藏真实的服务器端)实现内网穿透(准确说它不是NAT穿越技术,而是NAT旁路技术,简单说,就是在NAT网关所在的位置旁边放置一个应用服务器。)
穿透流程穿透过程简述:
当Ngrok服务端接收到连接,就读取映射表,判断接收的端口对应于哪一个Ngrok客户端,然后向该客户端转发数据。
本机的Ngrok客户端收到数据,读取本地映射表,判断对应哪个内网地址,向内网地址的服务器发起连接。
该客户端和内网服务器建立连接后,向Ngrok服务端返回一个连接,作为转发通道,此时通道建立完毕。
当Ngrok服务端读取到用户发送的请求数据,将通过转发通道转发到已连接的客户端,客户端读取响应并通过转发通道返回给请求。
所以,内网穿透实现了内外网通讯,让外网访问内网服务器不再是距离!
注:本文为Yolo原创,未经许可不得在任何平台转载,侵权必究。如需转载,可关注:技术训练营,在后台留言,与作者联系,取得许可才能转载~
扫一扫,发现更精彩。