Xen 提供了 3 种虚拟网络模型来供客户机访问物理设备——桥接、路由和
NAT。在桥接模式中,虚拟网络接口(vif)在外部局域网是可见的,在路由模型中,vif 在外部局域网是不可见的,但是 IP 是可见的。在 NAT
模型中,vif 在外部局域网不可见,它也没有一个外部可见的 IP 地址。
在桥接模式
下,
brctl 工具被用来创建软件方式的桥接接口,一个物理网络接口然后附加到桥上。Xen 客户机域的后端 vif
能被附加到这个桥上。当桥接口接收到来自物理接口的包时,物理网络接口将依据各域的虚拟网卡的 MAC 地址转发它们到不同的域上。
在路由模型
下
将使用 iptables 机制来进行路由。由物理接口所收到的所有的包将被驱动域的网络 IP
层所处理。驱动域(dom0)查找路由表条目并将包转发到不同的客户机 IP 地址。在路由模式下,驱动域连接 2
个不同的网段:内部由客户机使用的网段和连接外部网络的网段。
在驱动域作为一个 NAT 网关
时,
驱动域仍然作为一个路由器,但是更进一步映射一个它自己的 IP 地址和端口到一个客户机的 IP 地址和端口。客户机的 IP
地址隐藏在驱动域后面对外部网络不可见。
Linux 防火墙提供了 iptables
,
而 bridge-utils 则提供了 etables
来进行基本的 MAC 地址过滤。也可以指定一个物理网卡给一个域使用。
Xen网络结构相当灵活,适当配置可以“轻松”实现dom0/domU与物理网络三者之间的复杂拓扑。
桥接模式
图一、Xen 桥接模式示意图
下图是个桥接的例子。
veth0、vif0.0 是 dom0 的网络接口
。veth0 被重命名为 eth0
。xenbr0 接口是软桥接接口
。vif1.0 是运行的客户机的后端网络接口
peth0、xenbr0、vif0.0、 vif1.0 都共享同样的 MAC 地址 FE:FF:FF:FF:FF:FF,它是以太网的广播地址。这意味着实际的网络接口、dom0 的回环接口、客户机的后端接口都向 xenbr0 广播。当物理网卡接收到包时,它直接发送到桥接接口 xenbr0,这个桥接接口通过包的 MAC 地址决定将包转发到哪个域的后端接口。因此 peth0 不需要 IP,只需要 MAC 地址。物理接口的原先 IP 已经被告知给 eth0——驱动域的虚拟前端接口。
xenbr0 通过 MAC 地址是 00:11:25:F6:15:22 或者是 00:16:3e:45:e7:12
来决定包转发到 eth0 或者 vif1.0。客户域相应的前端接口被命名为 eth0。从 dom0 的角度看,客户机中 eth0 实际是
vif1.0。
brctl 命令的显示:
- [user@Dom0]# brctl show
- bridge name bridge id STP enabled interfaces
- xenbr0 8000.feffffffffff no vif1.0
- peth0
- vif0.0
参考链接