nat实现方式
- 静态:内网IP <=> 外网IP一一对应
- NATP: 转换IP地址,转换端口。内网IP:PORT <=>外网IP:PORT
NAT的主要类型
完全锥型NAT(Full Cone NAT, FT)
特点:端口和IP不受限
有一个客户端C,使用8080端口提供服务。通过NAT转换之后的公网CIP:CPORT。这时候,有两个客户端A,B。它们都可以访问该ip和端口号。
graph LR NAT-->Client A-->|A IP:PORT,port1,port2....|NAT B-->|B IP:PORT,port1,port2....|NAT C-->|C IP:PORT,port1,port2....|NAT
受限锥形NAT
特点:IP受限,端口不受限。
和FT类似,但是只有相互通讯过的IP才能通讯。
C和A有相互通讯过,不管端口是什么。路由已经存在。这时候A可以访问C的任意端口。但是B没有和A相互通讯过,B的请求不会被记录。
graph LR NAT -->Client A -->|port1,port2,port3...| NAT B-->|x|NAT C-->|x|NAT
端口受限型NAT
特点:ip和端口都受限
比受限型NAT的多了一个端口限制。即相互信任,端口也对应起来。
graph LR NAT -->Client A -->|p1| NAT A -->|x p2| NAT B-->|x|NAT C-->|x|NAT
A可以使用p1端口进行通讯,不能使用p2端口通讯
对称型NAT(Symmetric NAT)
每一个连接都是随机生成的端口号,严格要求双方的ip和端口。
graph LR ClientB-->NAT1 NAT1-->|A IP:PORT|A A-->|IP1:PORT1|NAT1 ClientB-->NAT2 NAT2-->|B IP:PORT|B B-->|IP2:PORT2|NAT2 ClientB-->NAT3 NAT3-->|C IP:PORT|C C-->|IP3:PORT3|NAT3
P2P穿透方法
对称型VS端口限制型/攻破随机端口对称型:生日攻击
预判你生成地端口位置。
- 随机NAT新建socket,朝端口限制型的外网发包。出NAT时被随机映射成不同的洞。
- 端口限制型,随机地向对方不同端口地址发包。然后看,是否有一个目标端口恰好发送给第一步里面随机型NAT映射成地外网地“洞”上。碰对了,新建连接。
- 双方各自发送400个包,穿透率达到80%以上。每个IP,UDP头部,连接ID加上以太网帧头部。50byte * 400 = 20KB
对称型VS对称型
使用UPNP:变Symmetric NAT => Full Cone