1、NAT模式
一般家庭网络都会用到NAT。办理了宽带,分配了一个ip地址,但家里很多设备都需要上网,怎么办?
路由器会自动进行地址和端口的转换,出去时转成外网ip(全家共用一个)+端口,进来时又重新转成内网ip+端口的模式。
同时要注意,内网ip(A类:10.0.0.0-10.255.255.255,B类:172.16.0.0-172.31.255.255,C类:192.168.0.0-192.168.255.255)是不能公网路由的,因为是每个局域网中的内部地址,不同局域网中可以有相同的内网地址。
内网ip端口可以通过NAT访问外网,但外网一般不能直接访问内网的ip端口。因为路由器一般只配置了SNAT,即源NAT,会对出去的源ip端口进行转换,但外网进来的访问内网ip端口的请求,由于没有对应的映射表,请求会被丢弃。当然这个可以通过手动配置DNAT(目的地址NAT)来解决。
说回来虚拟机的NAT,这就相当于宿主机上的每个虚拟机都在一个独立的局域网里面,并且都有自己的DHCP和网关,各个虚拟机的ip地址可能相同(因为在不同的子网里面),所以
(1)虚拟机相互之间是不通的(不考虑端口转发等操作)
(2)虚拟机当然能访问宿主机,并且可以通过宿主机再访问外网,就好比你家里局域网中的设备也能访问外网一样。
虚拟机发起一个请求,假设虚拟机通过Xip+x端口请求外网的Aip+a端口,这个请求首先到虚拟机和宿主机之间的路由器H(这是一个虚拟路由器?),目标地址不变,源地址通常会直接转换为宿主机在上一层网络(家庭局域网)中的IP地址。 对于宿主机操作系统来说,这个数据包现在看起来就像是宿主机上的一个普通应用程序发出的。在宿主机看来是虚拟路由器H作为一个应用发起了一个请求,于是通过NAT转到公网(假设宿主机所在网络是一个家庭局域网,也是通过NAT访问外网),公网返回响应后再转回虚拟路由器,虚拟路由器再通过映射表转到虚拟机。整个过程其实是有两次NAT映射。
(3)宿主机不能访问虚拟机,外网ip也不能访问虚拟机,对应外网ip不能直接访问NAT的内部ip
2、NAT网络模式
和NAT模式的区别只在于一个宿主机上的多个虚拟机,不再是每个虚拟机处于一个单独的子网中了,而是所有虚拟机处在一个子网中,共用一个DHCP和网关,因此虚拟机相互之间是通的。其他和NAT模式完全相同。
3、桥接模式
NAT模式下,虚拟机的网络相当于还是比宿主机所在网络低一级(虚拟机所处子网的DHCP是宿主机上的一个虚拟网络适配器),而在桥接模式下,虚拟机软件会创建一个虚拟网桥,将虚拟机的网卡"桥接"到宿主机的物理网卡上,虚虚拟机就像一台独立的物理机一样,直接连接到了宿主机所在的家庭局域网。它会从家庭路由器那里获取一个IP地址。
所以,
虚拟机之间,通
虚拟机到宿主机,通
虚拟机到外网,通
宿主机到虚拟机,通
外网到虚拟机,不通
4、内部网络
各个虚拟机之间搭建了一个内部网络,不和宿主机相通。
也就是
虚拟机之间,通
虚拟机到宿主机,不通
虚拟机到外网,不通
宿主机到虚拟机,不通
外网到虚拟机,不通
5、仅主机
和内部网络非常像,区别在于宿主机也和虚拟机在同一个隔离网络里,但不是联外网的那个局域网中。
虚拟机可以通过虚拟网卡访问宿主机,宿主机也可以访问虚拟机。可以把这张虚拟网卡想象成一张真实的网卡插到宿主机上了,宿主机就有两张网卡,两卡各自分别连到一个网络,宿主机存在于两个网络中。但虚拟网卡所在网络没有设置网关,因此不能连接外网。
虚拟机之间,通
虚拟机到宿主机,通
虚拟机到外网,不通
宿主机到虚拟机,通(可以ping虚拟网卡,但不能ping宿主机在家庭网络中的ip)
外网到虚拟机,不通