全球IPv4有42.9亿地址,因此随着互联网的发展,IPv4地址已不足以满足增长需要。
对于IP地址空间枯竭的问题两种延缓办法:
- 使用子网掩码,将网络分成更小块,提高利用率
- 使用NAT[/latex]gt; 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的四种类型
- 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) - 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:任意端口)发送过包 - 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)发送过包 - Symmetric NAT
变态提升安全性,内网主机相同端口对不同公网主机的映射端口不同,例如内网发包 192.168.1.2:3990[/latex]gt;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[/latex]gt;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穿透原理
- 对于 Full Cone NAT
处于不同内网的主机A和主机B,各自先连接服务器,从而在各自NAT设备上打开了一个“孔”,服务器收到主机A和主机B的连接后,知道A与B的公网地址和NAT分配给它们的端口号,然后把这些NAT地址与端口号告诉A与B;A与B即可连接对方的公网地址和端口直接进行通信。服务器在这里充当“介绍人”,告诉A与B对方的地址和端口号。 - 对于 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即可直接进行通信。 - 对于 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源码
解大佬,被我发现了吧 😀
😯