从物理机到虚拟机
基于虚拟机,产生了云计算技术。
数据中心里,有类似于虚拟机的开源技术 qemu-kvm。软件模拟硬件,主要模拟 CPU、内存、网络、硬盘。
虚拟网卡的原理
虚拟机打开 Linux 上的 TUN/TAP,一种字符设备文件,在物理机可看到一张虚拟 TAP 网卡,虚拟机里的应用会将网络包往这里发。它将网络包转换为文件流,写入字符设备。
内核中的 TUN/TAP 字符设备驱动收到写入的文件流后,交给 TUN/TAP 虚拟网卡驱动。这个驱动将文件流再次转成网络包,交给 TCP/IP 协议族,最终从 TAP 网卡发出,成为标准的网络包。
虚拟网卡连接到云中
1、共享与互通问题
多张虚拟网卡如何互联?
使用虚拟交换机,Linux 上创建虚拟网桥:brctl addbr br0。两个虚拟机的虚拟网卡都连接到虚拟网桥:brctl addif br0 tap0,配置相同的子网网段,便可互相通信。
host-only,两个虚拟机连到一个 br0 虚拟网桥上,虚拟机之间能互相访问。
虚拟机如何连外网?
(1)桥接。物理机和虚拟机在同一个虚拟网桥上,大家都在同一个二层网络里。但规模较大时,需通过 VLAN 进行划分。
将网络打平:
(2)NAT。虚拟机网络和物理机网络不同,虚拟机访问物理机时,需将地址 NAT 成物理机的地址。还会在笔记本电脑里内置一个 DHCP 服务器,为笔记本上的虚拟机动态分配 IP 地址。
数据中心里:
也可自己登录到物理机上做个简单配置,简化一下。将虚拟机所在网络的网关地址直接配置到 br0 上,不用 DHCP Server,手动配置每台虚拟机的 IP 地址(iptables -t nat -A POSTROUTING -o ethX -j MASQUERADE),直接在物理网卡 ethX 上 NAT。开启物理机的转发功能(net.ipv4.ip_forward = 1),就不用路由器了。
2、隔离问题
如果一台机器上的两个虚拟机不属于同一个用户,怎么隔离?brctl 创建的网桥支持 VLAN,可设置两个虚拟机的 tag。
如何跨物理机互通,且实现 VLAN 的隔离?brctl 创建的网桥上的 tag 无法在网桥外起作用。可用命令 vconfig,基于物理网卡 eth0,为每个用户用 vconfig 创建一个带 VLAN 的网卡。不同的用户使用不同的虚拟网桥,带 VLAN 的虚拟网卡连接到虚拟网桥上。
不同的用户网桥不同,不互相通信,出了网桥,VLAN 不同,也不会将包转发到另一个网桥上。另外,出了物理机,也带着 VLAN ID,如果物理机交换机也支持 VLAN,跨物理机,不同的 VLAN 也不会互相通信。
但无法满足大规模云平台的隔离,因为 VLAN ID 只有4096个。