分类: LINUX
2011-05-30 02:12:48
XenWiki 之 XenNetworking 译文版 [译注:这是一篇 wiki
文章,由多人多次编辑完成,其中难免有些不协调的痕迹,但内容非常详实,很有帮助,译文保持了原文的状态,较少添加译注。] 缺省情况下,Xen 为 dom0 创建7对”对接的虚拟以太网接口”。就是使用交叉线对连的以太网口。veth0 连接到
vif0.0,veth1 连接到 vif0.1 等等,知道 veth7 连接到 vif0.7。你可以在 veth# 端配置 IP 和 MAC
地址,而另一端,vif0.# 被加入到了一个网桥之中。 每当建立一个 domU 实例的时候,就会分配一个新的域 ID。很遗憾,这个号码不能选择的。第一个 domU 的 id就是
1,第二个就是 2,即使第一个已经关机了也不会重新使用它的 id。 对于每个新的 domU,Xen 就会为它新建一对“对接的以太网口”,一端在 domU 里面,而另一端在 dom0 里面。对于
Linux 的 domU,这个设备一般会被命名为 eth0。这个虚拟以太网接口对在 dom0 之中的另一端称为
vif 当 domU 关机的时候,对应的虚拟以太网接口也会被删除。 虚 拟以太网接口也具有以太网的 MAC 地址,缺省情况下,xend 会随机分配地址,这样,同一个 domain
的不同实例会具有不同的地址。如果你需要让一个 domain 具有固定的 MAC 地址(比如用于 DHCP),那么可以在 vif 配置中使用
“mac=” 选项(如 vif= [’mac=aa:00:00:00:00:11′])。 在 选择要使用的 MAC 地址的时候,要确保你使用的是一个单播地址。也就是说第一个字节的最地位应该是0。比如,一个 aa
开头的地址是正确的,而 ab 是不正确的。最好将地址标明是“本地分配的” (而不是全局性地分配给硬件厂商的)。这样,要让第一个字节的次低位是
1。比如 aa 是正确的,而 a8 就不是。 总之,一个地址应该是这样的形式 其中 X 是任意 16 进制数,而 Y 则是 2、6、A、E 之一。 另外,建议使用 00:16:3e:xx:xx:xx 区段的 MAC 地址。这段地址是为 Xen 保留的。 依 照缺省的 Xen 配置,会在 dom0 中进行桥接来允许所有的域像独立的主机那样出现在网络上。如果在 dom0 中大量使用了
iptables (比如构筑防火墙),那么就可能影响桥接,因为桥接的包会通过 PREROUTING, FORWARD 和 POSTROUTING
三条 iptables 链。也就是说,从客户域桥接到外面的包需要通过这三条链。最常出现问题的可能是 FORWARD 链被配置为拒绝包或丢包
(这与在内核中的 IP forwarding 不同)。 iptables FORWARDING 可以设为禁止转发所有包,这样就禁止了 dom0 作为一个路由器的能力:echo 0 > /proc/sys/net/ipv4/ip_forward
。 更安全一点的手段是允许在外部物理接口与 vif 们之间转发包。例如,一个只有一块以太网卡的计算机可以这么设置: (这里需要 ipt_physdev [就是 xt-physdev] 模块可用)。 ebtables 项目有
。 当包到达硬件的时候,由 dom0 中的以太网驱动来归口处理,并出现在了 peth0 上面。peth0
被绑定在网桥上,所以,包被送到网桥上来。这一步在以太网层(第二层)运行,peth0 或网桥没有配置 IP 地址。 现在,网桥将分发来包,正像一个交换机那样。在这一阶段的过滤可以由
之类的工具进行。 接下来,因为有一组 vifX.Y 连接到网桥上,它将会根据 MAC 决定把哪些包放到哪个接收端上。 vif接口会把包交给 Xen,由它把包送给 vif 对应的端口(dom0中也是同样进行的,这时走的是 vif0.0->(v)eth0
这对接口)。 最终,dom0/domU 中的目标设备是有 IP 地址的,你可以对它们使用 iptables 进行过滤。 当 xend 启动的时候,它会运行 network-bridge 脚本,这个脚本会 将物理以太网接口和 dom0 的接口分开是个有益的设计,比如,这样你就可以为 dom0 配置防火墙而不会影响 domU 们(仅仅保护
dom0 自己)。 当一个 domU 启动的时候,dom0 中运行的 xend 会运行 vif-bridge 脚本,这个脚本会: 或者是这样的配置: 如果你希望有多个网桥,必须自己手工建立他们,可以是手工,也可以是通过启动脚本建立,或者是修改 network-bridge 脚本。比如 对于 Xen 3.0,添加网桥的最佳途径是使用一个略加修改的 Xen 缺省配置脚本。按照
所述。例如,对一个连着 eth0 和 eth1 两个网桥的配置,可以建立这样一个
/etc/xen/scripts/my-network-script: 邮件列表中一些相关话题的讨论: eth0 IP in dom0 2005/01/14
Bridging vs. Routing 2005/01/13
Bridging vs. Routing 2004/07/18
An attempt to explain Xen networking
(with bridging)
(with bridging)
本节仅当你选用了 network-route 和 vif-route 而不是 network-bridge 和 vif-bridge
时有意义。 通过路由,在 dom0 和 domU 之间建立点对点连接。到每个 domU 的路由会添加到 dom0 的路由表当中,这里 domU
必须有一个确定的(固定)IP。DHCP 无法工作,因为无法创建路由,DHCP offer 也就无法送到 domU。 当 xend 启动的时候,它会运行 network-route 脚本,进行如下工作: 当 domU 启动的时候,xend(在 dom0 之中)运行 vif-route 脚本,进行如下工作: 目前虚拟网络是一种非标准配置。 虚拟网络配置将所有 domU 放在 dom0 的一个虚拟网络中。这样允许 domU 使用 dom0 提供的 DHCP 服务器,不允许
domU 的 DHCP 请求出到物理网络之中。(据我所知,vif0.0 和 dummy0 都不是必须的。) Sapphirecat 的虚拟网络和 DHCP 设置:
另一个虚拟网络的设置:
Xen 系统的缺省配置是使用桥接。当 xend 启动的时候,它会建立一个称为 xenbr0 的网桥。xend 将会把 eth0 的 ip
地址之类的分配到 xenbr0 (作为 dom0 连接到网桥上的接口的名称)。所以,现在 dom0 的对外的接口已经是 xenbr0
了,注意防火墙之类的配置要指向它。(译注:新版本 xen 中,或说译者使用的版本中,这个接口被重命名成了 eth0,而物理的 eth0
早被重命名成了 peth0 了。) 如果将 802.1Q VLAN 支持配置到 dom0 当中来,Xen 可以支持多标签 VLAN。每个需要的 VLAN 都需要 dom0
中的一个本地接口,虽然不一定需要一个 IP 地址。每个 VLAN 都可以配置一个网桥,客户 OS 可以连接到合适的网桥。
倾向于将网桥定以为一个不自动激活的接口(比如,在 Debian 的 /etc/network/interfaces 中,不使用 “auto”
选项) 之后,可以添加一个 init.d 脚本在 xend 和 xendomains 之间启动这个接口。
王旭 译虚拟以太网接口
MAC地址
XY:XX:XX:XX:XX:XX
桥接
iptables -A FORWARD -m physdev --physdev-in eth0 --physdev-out '!' eth0 -j ACCEPTiptables -A FORWARD -m physdev –physdev-out eth0 –physdev-in ‘!’ eth0 -j ACCEPT
桥接中的包流向(
)
network-bridge 脚本
vif-bridge 脚本
补充说明
(network-script 'network-bridge bridge=mybridge')
vif=[ 'bridge=mybridge' ]
vif=[ 'mac=00:16:3e:01:01:01,bridge=mybridge' ]
vif=[ 'mac=00:16:3e:70:01:01,bridge=br0', 'mac=00:16:3e:70:02:01,bridge=br1' ]
$ cd /etc/xen/scripts$ cp network-bridge network-custom$ cp vif-bridge vif-custom$ vi /etc/xen/xend-config.sxp (network-script network-custom) (vif-script vif-custom)$ vi network-custom # whatever you want
# ip link set eth1 down# ip link set eth1 mac fe:ff:ff:ff:ff:ff arp off# brctl addif br1 eth1# ip link set eth1 up
#!/bin/shdir=$(dirname “$0″)“$dir/network-bridge” “$@” vifnum=0“$dir/network-bridge” “$@” vifnum=1
"$dir/network-bridge" "$@" vifnum=2 netdev=dummy0
相关链接
路由
network-route脚本
vif-route脚本
虚拟网络
相关链接
接口命名
VLAN
iface xen-br293 inet manual up vconfig add eth0 293 up /etc/xen/scripts/network start netdev=eth0.293 bridge=xen-br293 antispoof=no up /sbin/ifconfig eth0.293 up down /etc/xen/scripts/network stop netdev=eth0.293 bridge=xen-br293 antispoof=no down vconfig rem eth0.293