什么是NAT? 为什么需要NAT? 下面我们就详细的了解一下。
为什么需要nat 以为我们的IPv4 地址有限 不可能全世界的人没人分一个也没关系,如果够全世界每人一个 我们就不需要nat了你只要知道我的ip就可以找到我了。 正式给予这种ipv4的局限性,为了节省公网ip 就必须有一种个丝网和公网转换的方式,这种方式就是NAT. 因此大家也就明白了ipv6 为什么可以不走nat 而直接走 route 的原因了吧。 因为他的IP地址够用。 这个在做ipv6的router是就可以在kernel 中不开启ipv6的nat。
ok 清楚了什么是nat 和nat的用途,下来我们了解一下 nat 的类型:
1. 对称行(Symmetric nat)
2. 锥形nat(cone nat)
什么是对称型nat 呢? 就是内网同一ip 和端口发往 不同外网的ipx + port x 时 在route 端(nat)都会映射成ipnat + 不同的端口。 形如下:
内网A + port(2000) ---> nat (5000) ---> 外网 C + port (4000)
内网A + port(2000) ---> nat (5001)---> 外网 D + port (4000)
内网A + port(2000) ---> nat(5002) ---> 外网 C + port (4001)
内网A + port(2000) ---> nat(5003) ---> 外网 D + port (4001)
内网B + port(2000) ---> nat (5004)---> 外网 C + port (4000)
什么时锥形呢? 就是内网同一ip 和端口发往不同的外网的ipx+ port x 时都会在 route端(nat) 都会映射成相同的ip + 相同的端口。形如下:
内网A + port(2000) ---> nat (5000) ---> 外网 C + port (4000)
内网A + port(2000) ---> nat (5000)---> 外网 D + port (4000)
内网A + port(2000) ---> nat(5000) ---> 外网 C + port (4001)
内网A + port(2000) ---> nat(5000) ---> 外网 D + port (4001)
内网B + port(2000) ---> nat (5001)---> 外网 C + port (4000)
但是cone nat 有分为:
1. full cone nat
2. restricted cone nat
3. port restricted cone nat
我们详细的了解一下各cone nat 的不同:
1. full nat 就是 只要是有内网的ip +port 向外网 ipx + portx 发送了包,在nat 上开了映射 natport,之后不管是哪个外网ip 和那个外网的port 只要向 nat port 发包 内网 ip 就会在 port 上收到包。
如下图有下面的映射关系:
内网A + 2000 ---> NAT (5000) ---> 外网 B + 6000
内网A + 2000 ---> NAT (5000) ---> 外网 B + 7000
内网A + 2000 ---> NAT (5000) ---> 外网 C + 6000
当内网A + 2000 ---> NAT (5000) ---> 外网 B + 6000 发包后,无论 B+6000 --> NAT (5000) 还是 B+7000 --> NAT(5000) 还是 C + 6000 -->NAT(5000) 内网A 都可以收到packets,也就是讲full cone nat 不论是那个外网ip 或那个外网的port 只要你向NAT 的 5000 发包 我内网的 A 就可以在 2000口收到包,当然忽视掉firewall 在这里的作用。
2. restricted cone nat 就是ip restricted cone nat 因为内网的收包现在在 发往外网的ip那里, 就是只有在内网向那个外玩的ip 发过报之后 她只能接受从那个外网ip 发来的包 外网的port 没有限制,只要你向nat 的映射port 发就可以了。
如图有如下nat映射关系:
内网A + 2000 ---> NAT (5000) ---> 外网 B + 6000
内网A + 2000 ---> NAT (5000) ---> 外网 B + 7000
内网A + 2000 ---> NAT (5000) ---> 外网 C + 6000
当内网A + 2000 ---> NAT (5000) ---> 外网 B + 6000 发包后,无论 B+6000 --> NAT (5000) 还是 B+7000 --> NAT(5000)内网A 都可以收到packets,但是C + 6000 -->NAT(5000) 也就是讲restricted cone nat 不论是那个port 只要是我发送的目的ip + 任意port (必须有nat 映射关系)向NAT 的 5000 发包 我内网的 A 就可以在 2000口收到包,当然忽视掉firewall 在这里的作用。
3. port restricted cone nat 是更严格的 cone nat 他比restricted 更严格不仅要求 是ip 必须是内网通讯的dest ip 还要求port 是内网的通讯的port。向nat 的通讯port 发包 内网的 才能收到包。
如图有如下nat映射关系:
内网A + 2000 ---> NAT (5000) ---> 外网 B + 6000
内网A + 2000 ---> NAT (5000) ---> 外网 B + 7000
内网A + 2000 ---> NAT (5000) ---> 外网 C + 6000
当内网A + 2000 ---> NAT (5000) ---> 外网 B + 6000 发包后,只有 B+6000 --> NAT (5000) 发的包内网A 才可以收到packets,无论是B+7000 --> NAT(5000)还是C + 6000 -->NAT(5000) 向nat 法包内网都无法收到。 也就是讲port restricted cone nat 是我发送的目的ip + 外网接受的port (必须有nat 映射关系)向NAT 的 5000 发包 我内网的 A 就可以在 2000口收到包,当然忽视掉firewall 在这里的作用。