前言
为了理解内网穿透我们先来了解以下几个概念:
IP
内网IP
私有IP
虽然它们不能直接和Internet网连接,但通过技术手段仍旧可以和Internet通讯。(即本文的内网穿透)
外网IP域名
域名转换
内网穿透
NAT穿越(NAT traversal)涉及TCP/IP网络中的一个常见问题,即在处于使用了NAT设备的私有TCP/IP网络中的主机之间建立连接的问题。–Wiki
NAT
NAT网关
NAT的实现方式有:
NAT特点:
网络被分为私网,公网两部分,NAT网关设置私网到公网的路由出口。
网络只能由私网侧发起,公网无法主动访问私网主机(是这样设计的,所以便要穿透它)
NAT网关的存在对通信双方保持透明
NAT网关为了实现双向翻译,需要维持一张关联表,将会话信息保存
内网穿透软件
Ngrok通过在公共的端点和本地运行的Web服务器之间建立在TCP之上的端到端的安全隧道(tunnel),两端的程序在其实现的隧道内透明的进行数据交互,将NAT和防火墙后面的本地服务器暴露给公网。
Ngrok
国内免费的Sunny-Ngrok软件(https://www.ngrok.cc/)是通过反向代理技术(隐藏真实的服务器端)实现内网穿透(准确说它不是NAT穿越技术,而是NAT旁路技术,简单说,就是在NAT网关所在的位置旁边放置一个应用服务器。)
穿透流程
穿透过程简述:
当Ngrok服务端接收到连接,就读取映射表,判断接收的端口对应于哪一个Ngrok客户端,然后向该客户端转发数据。
该客户端和内网服务器建立连接后,向Ngrok服务端返回一个连接,作为转发通道,此时通道建立完毕。
当Ngrok服务端读取到用户发送的请求数据,将通过转发通道转发到已连接的客户端,客户端读取响应并通过转发通道返回给请求。
所以,内网穿透实现了内外网通讯,让外网访问内网服务器不再是距离!