NAT网络地址转换(NetWork Address Translation)

  是1994年提出的。.当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法. 这种方法需要在专用网(私网IP)连接到因特网(公网IP)的路由器上安装NAT软件。 装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址(公网IP地址)。这样,所有使用本地地址(私网IP地址)的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。 NAT能使大量使用内部专用地址的专用网络用户共享全球地址来访问因特网上的主机和资源。

实际案例:

  打个比方公网相当于小区,公网ip相当于楼号,NAT相当于每栋楼的快递中转站,端口相当于快递站的快递号码。内网设备tom访问A时,此时NAT建立了一个->51000的端口映射。也就是快递中转站记录了一下,以后收到51000号快递就送到设备tom 。A收到来自这栋楼51000号的请求,再把数据发回给51000号,快递站自然会把这个来自A的51000号的数据送给设备tom,所以tom可以正常上网。但是如果设备tom没有主动访问A,快递站就不会随便把数据送给设备tom,A无论如何都不能把快递发到tom手上!。这也就导致了从公网无法访问NAT后的设备。

  NAT路由器维护了一个NAT表,其记录了内网IP和NAT动态分配的公网IP的映射,内外网直接进行通信时,外网就是使用NAT路由器对内网主机分配的公网IP映射来通信的。

略微图解:   当内网A主机发送给服务器时步骤   当服务器发送给内网A主机时 PS:大家都知道,一个路由器的公网IP是有限少数个的,而且一个主机也基本不可能只有一个网络应用,所以一般都是IP+端口来映射,这样就有几万之多个映射,绝大多数网络应用都是使用运输层的TCP和UDP来传送数据,因此可以使用运输层的端口号和IP一起转换。这样一个全球IP就可以使多个拥有本地地址的主机和因特网上的主机进行通信了。这种将端口号和IP地址一起进行转换的技术焦作NAPT(网络地址与端口转换 NetWork Address and Port Translation),不过基本思想和NAT大致相同。 (https://www.bilibili.com/video/BV1c4411d7jb?p=56)所讲述的NAT原理非常清晰,非常建议去看看。

内网穿透入门

  NAT这种使用有利也有弊,它保护了内网暴露并且减少了公网IP浪费,但是假如我在家里访问学校的服务器,就要用到内网穿透,内网穿透的思想大致都是基于NAT穿透实现的。 首先是P2P点对点穿透

P2P点对点

(1) 两个需要通过内网穿透进行通讯的内网客户端,分别将自己的外网收发接口注册给一个具有公网ip的中转服务器,如图4所示。

(2) 中转服务器将两个客户端注册的收发接口分别告知给对端,如图5所示。

(3) 一个内网客户端使自己的接收端口作为源地址,向对端的发送端口发送一个udp数据包,这个数据包称为打洞包。发送过这个打洞包后,可以在这个内网的出口路由器上产生一条NAT记录,令后续从对端发送端口发来的数据包都不被丢弃, 而是转发给相应的内网客户端的指定端口,如图6所示。

(4) 发送过打洞包后,对端发送至本端路由器指定接收端口的数据包,就会根据NAT记录转发至本端的内网服务器接收端口,从而实现了内网服务器接收外网数据包的功能,如图7所示。

(5) 另一个内网服务器同样执行上述步骤 (3) 、 (4), 即可实现两端内网服务器相互收发音频数据包的功能。 图4

图5

图6

图7

zerotier软件

  这个软件实现了P2P方式穿透内网,相当于实现了一个虚拟局域网zerotier能让你随时随地连接上内网主机。在手机和nas上同时开启zerotier并且加入到同一个虚拟网络中,手机在大部分地方都可以借助zerotier的内网穿透能力访问到NAS。在网络环境不允许穿透的地方,zerotier会通过一台中转服务器把流量中转给nas,虽然这非常慢但是也是可以用的。如果你愿意花一点钱,买一台国内的vps安装zerotier,然后将中转服务器设置为你的vps这样可以极大提高访问速度。

详情安装方式请访问(https://blog.csdn.net/RadiantJeral/article/details/104150070)这位大佬的博客,这里不再赘述。

隧道技术内网穿透方式

  使用一个中转服务器,中转服务器与主机开通了一个“隧道”,例如FRP,frp可以通过有公网IP的的服务器将内网的主机暴露给互联网,从而实现通过外网能直接访问到内网主机;frp有服务端和客户端,服务端需要装在有公网ip的服务器上,客户端装在内网主机上。FRP服务器上还是存放了内网访问FRP的网络路径信息,会包括NAT相关信息。这种方式与上面P2P不同的是,这里通过代理的方式将内网主机暴露在了公网上,不是P2P那种手机和主机在一个虚拟局域网里通信,而是公网上的手机与主机直接通信。详情关注(https://github.com/fatedier/frp/blob/master/README_zh.md)FRP官方中文文档。类似的工作原理还有向日葵也是这种原理实现的。

结尾

NAT非常深奥,这里只是简单进行入门,NAT有五大穿透方法,想要详细了解请看(https://hsk.oray.com/news/3888.html)这篇文章。