简单来说内网穿透的目的是:让外网能访问你本地的应用,例如在外网打开你本地http://127.0.0.1指向的Web站点。
一、内网穿透的概要
为了理解内网穿透我们需要先理解以下几个概念。
1.1 IP地址
网络中唯一定位一台设备的逻辑地址,类似我们的电话号码。
在互联网中我们访问一个网站或使用一个网络服务最终都需要通过IP定位到每一台主机,如访问baidu网站:
其中111.13.100.91就是一个公网的IP地址,他最终指向了一台服务器。
IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
内网IP可以同时出现在多个不同的局域网络中,如A公司的U1用户获得了192.168.0.5,B公司的U3用户也可以获得192.168.0.5;但公网IP是唯一的,因为我们只有一个Internet。
1.2 IP地址
域名是IP的别名,便于记忆,域名最终通过DNS解析成IP地址。
IP V4是一个32位的数字,IP V6有128位,要记住一串毫无意义的数字非常困难,域名解决了这个问题。
DNS查询过程如下,最终将域名变成IP地址
1.3 NAT
NAT(Network Address Translation)即网络地址转换,NAT能将其本地地址转换成全球IP地址。
内网的一些主机本来已经分配到了本地IP地址(如局域网DHCP分配的IP),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用的IP地址空间的枯竭。
NAT不仅能解决了lP地址不足与共享上网的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
多路由器可完成NAT功能。
NAT的实现方式:
静态转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一。
动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的。
端口多路复用(Port address Translation,PAT),内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,目前网络中应用最多的就是端口多路复用方式。
应用程序级网关技术(Application Level Gateway)ALG:传统的NAT技术只对IP层和传输层头部进行转换处理,ALG它能对这些应用程序在通信时所包含的地址信息也进行相应的NAT转换
1.4 Proxy
Proxy即代理,被广泛应用于计算机领域,主要分为正向代理与反向代理:
1.4.1 正向代理
比如X花店代A,B,C,D,E五位男生向Candy女生送匿名的生日鲜花,这里的X花店就是5位顾客的代理,花店代理的是客户,隐藏的是客户。这就是我们常说的代理。
正向代理隐藏了真实的请求客户端。服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求,某些科学上网工具扮演的就是典型的正向代理角色。用浏览器访问http://www.google.com时被墙了,于是你可以在国外搭建一台代理服务器,让代理帮我去请求google.com,代理把请求返回的相应结构再返回给我。
当多个客户端访问服务器时服务器不知道真正访问自己的客户端是那一台。正向代理中,proxy和client同属一个LAN,对server透明;
1.4.2 反向代理
拨打10086客服电话,接线员可能有很多个,调度器会智能的分配一个接线员与你通话。这里的调度器就是一个代理,只不过他代理的是接线员,客户端不能确定真正与自己通话的人,隐藏与保护的是目标对象。
反向代理隐藏了真实的服务端,当我们请求 ww.baidu.com 的时候,就像拨打10086一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了,ww.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。Nginx就是性能非常好的反向代理服务器,用来做负载均衡。
反向代理中,proxy和server同属一个LAN,对client透明。
1.5、DDNS
DDNS即动态域名解析,是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候,客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,服务程序负责提供DNS服务并实现动态域名解析。就是说DDNS捕获用户每次变化的IP地址,然后将其与域名相对应,这样域名就可以始终解析到非固定IP的服务器上,互联网用户通过本地的域名服务器获得网站域名的IP地址,从而可以访问网站的服务。
1.6、为什么需要内网穿透
当内网中的主机没有静态IP地址要被外网稳定访问时可以使用内网穿透
在互联网中唯一定位一台主机的方法是通过公网的IP地址,但固定IP是一种非常稀缺的资源,不可能给每个公司都分配一个,且许多中小公司不愿意为高昂的费用买单,多数公司直接或间接的拨号上网,电信部门会给接入网络的用户分配IP地址,以前上网用户少的时候基本分配的都是临时的静态IP地址,租约过了之后可能会更换成另一个IP地址,这样外网访问就不稳定,因为内网的静态IP地址一直变化,为了解决这个问题可以使用动态域名解析的办法变换域名指向的静态IP地址。但是现在越来越多的上网用户使得临时分配的静态IP地址也不够用了,电信部门开始分配一些虚拟的静态IP地址,这些IP是公网不能直接访问的,如以125开头的一些IP地址,以前单纯的动态域名解析就不好用了。
1.7、内网穿透的定义与障碍
简单来说实现不同局域网内的主机之间通过互联网进行通信的技术叫内网穿透。
障碍一:位于局域网内的主机有两套 IP 地址,一套是局域网内的 IP 地址,通常是动态分配的,仅供局域网内的主机间通信使用;一套是经过网关转换后的外网 IP 地址,用于与外网程序进行通信。
障碍二:位于不同局域网内的两台主机,即使是知道了对方的 IP 地址和端口号,“一厢情愿”地将数据包发送过去,对方也是接收不到的。
因为出于安全起见,除非是主机主动向对方发出了连接请求(这时会在该主机的数据结构中留下一条记录),否则,当主机接收到数据包时,如果在其数据结构中查询不到对应的记录,那些不请自来的数据包将会被丢弃。
解决办法:要想解决以上两大障碍,我们需要借助一台具有公网 IP 的服务器进行桥接。
二、内网穿透的主要产品
1.花生壳
花生壳既是内网穿透软件、内网映射软件,也是端口映射软件。规模最大,较正规,完善。
付费,限制端口,限制流量。
官网:http://www.oray.com/
2.nat123
nat123是内网端口映射与动态域名解析软件,在内网启动映射后,可在外网访问连接内网网站等应用。
收费,使用简单
官网:http://www.nat123.com
3.NATAPP
NATAPP基于ngrok的国内内网穿透服务,免费版会强制更换域名,临时用一下可以
收费,使用简单
官网:https://natapp.cn/
三、ngrok
ngrok是一个反向代理,通过在公共的端点和本地运行的Web服务器之间建立一个安全的通道。ngrok可捕获和分析所有通道上的流量,便于后期分析与响应。
开源免费
官网:https://ngrok.com/
源码:https://github.com/inconshreveable/ngrok
四、使用步骤:
1.下载开源免费的Tomcat
这里我用的是tomcat 9的版本。下载完成之后,解压缩之后,进入工作目录,进入bin目录,然后双击运行startup.bat。启动成功如下图所示:
电脑访问成功
2.使用ngrok
在这里注册账号,https://www.ngrok.cc/login
在开通隧道下,往下滑,找到0元的立即购买
开通隧道具体流程
之后复制好隧道ID
3.ngrok本地客户端的使用
下载地址https://www.ngrok.cc/download.html
选择你所需要的版本下载即可。
下载完成之后解压缩即可使用
点击箭头所指的bat文件,输入第二步的隧道ID,回车即可。
开启成功
成功开启之后,我们可以看到有域名指向了我们本地的服务器
4.将项目放入tomcat服务器中
打开tomcat的工作目录,找到webapps的目录
这里我新建了一个LCZ的工程目录,用来存放我的项目,这里我放了一个简单的登录界面。
接下来我们通过我们的域名来访问
http://codingchaozhang.free.ngrok.cc/LCZ/login.html
作者:mind_programmonkey
来源:CSDN
原文:https://blog.csdn.net/Mind_programmonkey/article/details/80285596
版权声明:本文为博主原创文章,转载请附上博文链接!