全球IPv4有42.9亿地址,因此随着互联网的发展,IPv4地址已不足以满足增长需要。

对于IP地址空间枯竭的问题两种延缓办法:

  1. 使用子网掩码,将网络分成更小块,提高利用率
  2. 使用NAT-> NAPT

NAT简介

NAT技术

NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了内网IP地址,但又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。 NAT的用法是有一个公网IP地址池,当有内网IP地址要向公网通讯的时候,就随机选一IP地址作为其出口IP。

更常用的NAPT技术

NAPT(Network Address Port Translation,网络端口地址转换)是一种较流行的NAT变体,是<内部地址+内部端口>与<外部地址+外部端口>之间的转换。他只有一个外部IP地址,如果有内部IP地址要出去,他就随机选一个端口来连接Internet,来表示那台内网机器。

NAT的四种类型

  1. Full Cone NAT
    内网请求(例192.168.1.2:3990)映射至路由(例60.220.123.12:45003),公网主机(例201.11.23.1:80)即可与之直接通讯(向60.220.123.12:45003发包即可);另一台公网主机(例102.1.2.3:99)向路由器映射地址(60.220.123.12:45003)发包也可以到达内网主机端口(192.168.1.2:3990)
  2. Restricted Cone NAT
    增加了安全措施,内网机器(例192.168.1.2:3990)需先向公网主机(例201.11.23.1:任意端口)发送过包,NAT路由才会转发公网主机的包,其他主机的包则丢弃;另一台公网主机(例102.1.2.3:99)向路由器映射地址(60.220.123.12:45003)发包不能到达内网主机端口(192.168.1.2:3990),必须内网机器(192.168.1.2:3990)先向公网主机(102.1.2.3:任意端口)发送过包
  3. Port-Restricted Cone NAT
    继续提升安全措施,内网机器(例192.168.1.2:3990)需先向公网主机指定端口(例201.11.23.1:80)发送过包,NAT路由才会转发公网主机80端口的包,其他端口的包则丢弃;另一台公网主机(例102.1.2.3:99)向路由器映射地址(60.220.123.12:45003)发包不能到达内网主机端口(192.168.1.2:3990),必须内网机器(192.168.1.2:3990)先向公网主机(102.1.2.3:99)发送过包
  4. Symmetric NAT
    变态提升安全性,内网主机相同端口对不同公网主机的映射端口不同,例如
    内网发包 192.168.1.2:3990->201.11.23.1:80 映射至路由 60.220.123.12:45003
    此时 60.220.123.12:45003 发包至 60.220.123.12:45003 可接受
    内网发包 192.168.1.2:3990->102.1.2.3:99 映射至路由 60.220.123.12:6033
    此时 102.1.2.3:99 发包至 60.220.123.12:6033 可接受
    但是 102.1.2.3:99 发包至 60.220.123.12:45003 被拒绝

内网穿透

NAT穿透原理

  1. 对于 Full Cone NAT
    处于不同内网的主机A和主机B,各自先连接服务器,从而在各自NAT设备上打开了一个“孔”,服务器收到主机A和主机B的连接后,知道A与B的公网地址和NAT分配给它们的端口号,然后把这些NAT地址与端口号告诉A与B;A与B即可连接对方的公网地址和端口直接进行通信。服务器在这里充当“介绍人”,告诉A与B对方的地址和端口号。
  2. 对于 Restricted Cone NAT 及 Port Restricted Cone NAT
    处于不同内网的主机A和主机B,各自先连接服务器,从而在各自NAT设备上打开了一个“孔”,服务器收到主机A和主机B的连接后,知道A与B的公网地址和NAT分配给它们的端口号,然后把这些NAT地址与端口号告诉A与B;然后主机A发送一个UDP信息到主机B的公网地址上,同时在会话期内主机B也发送一个UDP信息到主机A的公网地址上;A与B即可直接进行通信。
  3. 对于 Symmetric NAT
    处于不同内网的主机A和主机B,各自先连接服务器,服务器收到主机A和主机B的连接后,知道A与B的公网地址,然后把这些NAT地址告诉A与B;但A与B无法知道应该向哪个端口发送包,目前可用的是端口预测打孔,即会话期内主机A发送多个UDP信息到主机B的公网地址:所有端口上,同时主机B也发送多个UDP信息到主机A的公网地址:所有端口上;A与B即可直接进行通信。

常用穿透技术

UPnP协议

Universal Plug and Play,缩写为UPnP,对于一台内网电脑,UPnP功能可以使网关或路由器的NAT模块做自动端口映射,将监听的端口从网关或路由器映射到内网电脑上,同时网关或路由器的网络防火墙模块开始对Internet上其他电脑开放这个端口。

STUN协议

Simple Traversal of UDP over NATs (NAT下UDP的简单穿越)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。一旦客户端得知了Internet端的UDP端口,通信就可以开始了。

UDP打洞

即使用NAT穿透原理完成内网穿透

端口转发

由服务器来转发包(消耗服务器带宽),有正向代理、反向代理等方式,类似于VPN

常用穿透软件

ngork 及各种分支

ngork官网 开源,可以自己搭建

frp

fast reverse proxy 开源,安全,可以自己搭建

花生壳

闭源,收费较贵

PP透 Peergine

商业基础服务

nat123

闭源,收费

DDNS

Dynamic Domain Name Server 是动态域名服务。DDNS定时检测用户的IP地址,然后将其与域名相对应,这样其他主机就可以通过域名来进行直接访问。
我在用的是:阿里云DDNS源码

标签: nat, 内网穿透, Full Cone NAT, Restricted Cone NAT, Symmetric NAT, Port-Restricted cone NAT, NAT穿透, UPnP协议, STUN协议, UDP打洞, ngork, DDNS

已有 2 条评论

  1. 樊先森 樊先森

    解大佬,被我发现了吧 icon_biggrin.gif

评论已关闭