nat_01
title: NAT 四种模式,NAT 穿透以及虚拟机的 NAT
搞虚拟机涉及到宿主机和虚拟机之间的通信,因此研究了一下 NAT,概念我就不说了,这篇文章主要记录一下学到的 NAT 有四种类型,并且记录虚拟机属于哪种类型。
专有名词
这个有必要了解,便于之后好写内容。
- 内部 Tuple: 内部主机的私有地址和端口号所构成的二元组,即发送方的(私有 IP, 虚构端口)
- 外部 Tuple: 外部主机收到经 NAT 转换之后的报文时看到的该报文的源地址和源端口,即发送方的(公用 IP, 真正端口)
- 目标 Tuple: 指外部主机的地址、端口所构成的二元组,即接收方的(IP, 端口)
实际上就是 内部 Tuple X 经过 NAT 转换变成 外部 Tuple Y,发送给目标 Tuple Z。记住这个 XYZ,后面就用这三个字母代表。
四种模式
Full Cone NAT
一个 X 对应一个 Y。这种方式很简单,但是此时如果发送方没有发送消息给接收方,接收方还是可以发报文给发送方的 Y,当然相当于发给 X。这样会不太安全,至于为什么,我也不知道...
Restricted Cone NAT
这个对上一个进行了限制。区别在于只有当发送方的 X 曾经发报文给接收方 Z,接收方此时向 Y 发报文才能被接受,当然相当于发送给了 X。这样就避免处理一个没发过消息的主机发来的信息。
Port Restricted Cone NAT
这个进一步进行了限制。只有当 X 发报文给 Z 后,接收方才能以 Z 为源地址,Y 为目标地址发报文给原来的发送方。其实区别就在于之前不管你端口是什么,但是现在你原来接收方(现在的发送方)的端口必须要是之前的,不能变。
Symmetric NAT
中文译作对称 NAT。上面的三个,都是 X-Y 一一对应,但是对称 NAT 将对应关系涉及到了 Z。
简单一句话就是 X-Y-Z 都是一一对应的。比如 X 发送给 (Z_ip_1, Z_port_1),那么分配到 (Y_ip, Y_port_1);此时 X 发送给 (Z_ip_1, Z_port_2)/(Z_ip_2, Z_port_1)/(Z_ip_2, Z_port_2),那么按照之前 X 和 Y 是对应的就会分配给 (Y_ip, Y_port_1),但是现在不是了,现在发现你这是 Z 不一样了,那么就分配给 (Y_ip, Y_port_2)。
虚拟机的 NAT
那么虚拟机的 NAT 是属于上面的哪种呢?做实验即可。从虚拟机的一个固定端口发送消息给不同的目标地址,看看外部的端口转换是否固定即可。最后发现,虚拟机的 NAT 属于 Symmetric NAT。
NAT 穿透
NAT 穿透英文名称叫做 "NAT Traversal"(别像我一样看到这个以为叫 NAT 传输...),就是解决 NAT 之前的通信问题,具体的也不懂..记住这个中英文名词就好。
[1] 四种模式解释: https://www.jianshu.com/p/e3ad67821e03
[2] 虚拟机的 NAT : https://cosx.me/p/265.html