• home > theory > CST > network >

    再谈端口转发与端口映射—内网穿透学习笔记

    Author:zhoulujun Date:

    个人宽带用户也想将自己的服务发布到公网IP上,在公司想做渗透测试的时候,在家里远程访问公司电脑等需求,都是需要内网穿透的。

    基于墙国特殊性,内在的互联网其实就是个大的局域网。无论是电信、联通、移动,给你的都是一个内网NAT ip 地址,而是不公网IP。公司内的电脑,也会使用NAT技术将大量的内网IP通过一定规则映射到公网IP上。而最常见的其中一种技术就是NAPT,也叫“网络端口地址转换”。因为一般一个服务都是通过一个端口来提供,因此通过这种方式可以将特定的服务通过特定的规则开放到少量的公网IP上。

    NAT(Network Address Translation)

    NAT(Network Address Translation)即网络地址转换,NAT能将其本地地址转换成全球IP地址。

    内网的一些主机本来已经分配到了本地IP地址(如局域网DHCP分配的IP),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。

    通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用的IP地址空间的枯竭。NAT不仅能解决了lP地址不足与共享上网的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。

    NAT的实现方式:

    • 静态转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一。

    • 动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的。

    • 端口多路复用(Port address Translation,PAT),内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,目前网络中应用最多的就是端口多路复用方式。

    • 应用程序级网关技术(Application Level Gateway)ALG:传统的NAT技术只对IP层和传输层头部进行转换处理,ALG它能对这些应用程序在通信时所包含的地址信息也进行相应的NAT转换。


    NAPT原理

    简单来说,在NAT网关上会有一张映射表,表上记录了内网向公网哪个IP和端口发起了请求,然后如果内网有主机向公网设备发起了请求,内网主机的请求数据包传输到了NAT网关上,那么NAT网关会修改该数据包的源IP地址和源端口为NAT网关自身的IP地址和任意一个不冲突的自身未使用的端口,并且把这个修改记录到那张映射表上。最后把修改之后的数据包发送到请求的目标主机,等目标主机发回了响应包之后,再根据响应包里面的目的IP地址和目的端口去映射表里面找到该转发给哪个内网主机。这样就实现了内网主机在没有公网IP的情况下,通过NAPT技术借助路由器唯一的一个公网IP来访问公网设备。

    具体原理我到网上找了一张图片

    v2-8c765ffb7026423db8cd9210fd33c821_720w.jpg



    什么是端口映射

    端口映射:端口映射就是将内网中的主机的一个端口映射到外网主机的一个端口,提供相应的服务。当用户访问外网IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。

    比如:

    什么是端口映射

    我们在内网中有一台Web服务器,但是外网中的用户是没有办法直接访问该服务器的。于是我们可以在路由器上设置一个端口映射,只要外网用户访问路由器ip的80端口,那么路由器会把自动把流量转到内网Web服务器的80端口上。并且,在路由器上还存在一个Session,当内网服务器返回数据给路由器时,路由器能准确的将消息发送给外网请求用户的主机。在这过程中,路由器充当了一个反向代理的作用,他保护了内网中主机的安全。

    什么是端口转发

    端口转发:端口转发(Port forwarding),有时被叫做隧道,是安全壳(SSH) 为网络安全通信使用的一种方法。

    比如:

    v2-0fa0ba4cb1d155305de9018c611d00af_720w.jpg

    我们现在在内网中,是没有办法直接访问外网的。但是我们可以通过路由器的NAT方式访问外网。假如我们内网现在有100台主机,那么我们现在都是通过路由器的这一个公网IP和外网通信的。那么,当互联网上的消息发送回来时,路由器是怎么知道这个消息是给他的,而另外消息是给你的呢?这就要我们的ip地址和路由器的端口进行绑定了,这时,在路由器中就会有一个内网ip和路由器端口对应的一张表。当路由器的10000端口收到消息时,就知道把消息发送给他,而当20000端口收到消息时,就知道把消息发送给你。这就是端口转发,其转发一个端口收到的流量,给另一个主机。

    端口映射与端口转发的区别

    这里举个例子方便大家就理解了:

    • 端口转发:转发的重点在“转”上面。送快递的过来,把所有快递都交给门口保安,保安再根据每件快递上的收件人来分发。

    • 端口映射:就是在大门口给每个人装个柜子,送快递的直接按收件人名字,把快递放到对应的柜子里面。


    内网穿透

    现在国内的互联网其实就是个大的局域网。无论是电信、联通、移动,给你的都是一个内网NAT ip 地址,而是公网IP。所以我们要做穿透。这个小米路由器就的动态域名就可以搞定。

    但是在公司,接入移动网络,都是好几层内网的了。这个可以用花生壳、IP盒子等搞定。

    具体参看:小米路由端口映射不成功!花生壳动态域名解释失败

    网上推荐的ngrok,没有试过。个人直接用ProjectV的,ProjetV(2):SSH和ShadowSocks是如何防止中间人攻击的?

    直接用v2Ray,完全没有问题。


    参考文章:

    【干货】什么是端口转发?什么是端口映射?如何设置端口映射? https://zhuanlan.zhihu.com/p/75648110

    一分钟实现内网穿透(ngrok服务器搭建) https://blog.csdn.net/zhangguo5/article/details/77848658?utm_source=5ibc.net&utm_medium=referral



    转载本站文章《再谈端口转发与端口映射—内网穿透学习笔记》,
    请注明出处:https://www.zhoulujun.cn/html/theory/ComputerScienceTechnology/network/2017_1221_8320.html