Chinaunix首页 | 论坛 | 博客
  • 博客访问: 254806
  • 博文数量: 42
  • 博客积分: 3110
  • 博客等级: 中校
  • 技术积分: 830
  • 用 户 组: 普通用户
  • 注册时间: 2005-10-18 22:12
文章分类

全部博文(42)

文章存档

2012年(2)

2011年(6)

2010年(5)

2009年(20)

2008年(9)

我的朋友

分类: LINUX

2009-07-31 12:32:21

XenWiki XenNetworking 译文版
王旭 译

[译注:这是一篇 wiki 文章,由多人多次编辑完成,其中难免有些不协调的痕迹,但内容非常详实,很有帮助,译文保持了原文的状态,较少添加译注。]

目录

  1.  

  2.  

    1.  

    2.  

    3.  

    1.  

  3.  

虚拟以太网接口

     缺省情况下,Xen dom0 创建7"对接的虚拟以太网接口"。就是使用交叉线对连的以太网口。veth0 连接到 vif0.0veth1 连接到 vif0.1 等等,知道 veth7 连接到 vif0.7。你可以在 veth# 端配置 IP MAC 地址,而另一端,vif0.# 被加入到了一个网桥之中。



     每当建立一个 domU 实例的时候,就会分配一个新的域 ID。很遗憾,这个号码不能选择的。第一个 domU id就是 1,第二个就是 2,即使第一个已经关机了也不会重新使用它的 id



     对于每个新的 domUXen 就会为它新建一对“对接的以太网口”,一端在 domU 里面,而另一端在 dom0 里面。对于 Linux domU,这个设备一般会被命名为 eth0。这个虚拟以太网接口对在 dom0 之中的另一端称为 vif.0。举个例子,domU 5 eth0 连接到 vif5.0。如果为一个 DomU 建立多个网口,也就是 eth0, eth1....那么,在 dom0 之中对应的便是 vif.0, vif.1...



     当 domU 关机的时候,对应的虚拟以太网接口也会被删除。

MAC地址

虚拟以太网接口也具有以太网的 MAC 地址,缺省情况下,xend 会随机分配地址,这样,同一个 domain 的不同实例会具有不同的地址。如果你需要让一个 domain 具有固定的 MAC 地址(比如用于 DHCP),那么可以在 vif 配置中使用 "mac=" 选项(如 vif= ['mac=aa:00:00:00:00:11'])。



在选择要使用的 MAC 地址的时候,要确保你使用的是一个单播地址。也就是说第一个字节的最地位应该是0。比如,一个 aa 开头的地址是正确的,而 ab 是不正确的。最好将地址标明是“本地分配的” (而不是全局性地分配给硬件厂商的)。这样,要让第一个字节的次低位是 1。比如 aa 是正确的,而 a8 就不是。



总之,一个地址应该是这样的形式

XY:XX:XX:XX:XX:XX

其中 X 是任意 16 进制数,而 Y 则是 26AE 之一。



另外,建议使用 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 们之间转发包。例如,一个只有一块以太网卡的计算机可以这么设置:

iptables -A FORWARD -m physdev --physdev-in eth0 --physdev-out '!' eth0  -j ACCEPT
iptables -A FORWARD -m physdev --physdev-out eth0 --physdev-in '!' eth0 -j ACCEPT

(这里需要 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 进行过滤。

network-bridge 脚本

xend 启动的时候,它会运行 network-bridge 脚本,这个脚本会

  1. 建立一个称为 xenbr0 的网桥

  2. 关闭真正的以太网接口 eth0

  3. eth0 IP MAC 地址拷贝给虚拟以太网接口 veth0

  4. 将真实的接口 eth0 重命名为 peth0

  5. 将虚拟以太网接口 veth0 重命名为 eth0

  6. peth0 vif0.0 连接到网桥 xenbr0

  7. 将网桥、peth0eth0 vif0.0 都激活

将物理以太网接口和 dom0 的接口分开是个有益的设计,比如,这样你就可以为 dom0 配置防火墙而不会影响  domU 们(仅仅保护 dom0 自己)。

vif-bridge 脚本

当一个 domU 启动的时候,dom0 中运行的 xend 会运行 vif-bridge 脚本,这个脚本会:

  1. vif.0 连接到 xenbr0

  2. 激活 vif.0

补充说明

  • 你可以在 xend-config.sxp 文件中改用如下配置,并重启 xend 来修改网桥 xenbr0 的名字:

    (network-script 'network-bridge bridge=mybridge')
  • 当然要记得在 domU 的配置文件中修改要连接到的网桥的名字:

    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' ]
  • 如果你希望有多个网桥,必须自己手工建立他们,可以是手工,也可以是通过启动脚本建立,或者是修改 network-bridge 脚本。比如

    $ 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
  • 在将物理接口连接到网桥之前,记得重置它的 mac 地址并关闭 arp。比如:

    # 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
  • 对于 Xen 3.0,添加网桥的最佳途径是使用一个略加修改的 Xen 缺省配置脚本。按照 所述。例如,对一个连着 eth0 eth1 两个网桥的配置,可以建立这样一个 /etc/xen/scripts/my-network-script

    #!/bin/sh
    dir=$(dirname "$0")
    "$dir/network-bridge" "$@" vifnum=0
    "$dir/network-bridge" "$@" vifnum=1
    • steve_from_moreover 的附加说明——可能是显而易见的,但一定要记住,让 /etc/xen/scripts/my-network-script 的访问权限为 755,否则重启之后你会发现它仍旧保持沉默而没有运行)。

    • 至少对于 SuSE Linux,每个接口都需要配置 /etc/sysconfig/network 之下的 ifcfg 脚本。否则 network-bridge 将会创建没有人何接口连接于其上的网桥。

    • 修改脚本后不要忘记修改 /etc/xen/xend-config.sxp 中的网络配置为 (network-script my-network-script)

    • 同样的源里可以用于没有物理以太网卡的环境中。可以使用 dummy 接口:

    "$dir/network-bridge" "$@" vifnum=2 netdev=dummy0

相关链接

邮件列表中一些相关话题的讨论:

  • 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 必须有一个确定的(固定)IPDHCP 无法工作,因为无法创建路由,DHCP offer 也就无法送到 domU

network-route脚本

xend 启动的时候,它会运行 network-route 脚本,进行如下工作:

  1. 打开 dom0 ip forwarding

vif-route脚本

domU 启动的时候,xend(在 dom0 之中)运行 vif-route 脚本,进行如下工作:

  1. eth0 ip 地址拷贝到 vif.0

  2. 激活 vif.0

  3. domU 的配置文件中给出的 domU IP 地址增加一个主机固定路由,指向 vif.0 接口。

虚拟网络

目前虚拟网络是一种非标准配置。

虚拟网络配置将所有 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 了。)

VLAN

如果将 802.1Q VLAN 支持配置到 dom0 当中来,Xen 可以支持多标签 VLAN。每个需要的 VLAN 都需要 dom0 中的一个本地接口,虽然不一定需要一个 IP 地址。每个 VLAN 都可以配置一个网桥,客户 OS 可以连接到合适的网桥。



倾向于将网桥定以为一个不自动激活的接口(比如,在 Debian /etc/network/interfaces 中,不使用 "auto" 选项)

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

之后,可以添加一个 init.d 脚本在 xend xendomains 之间启动这个接口。

阅读(566) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~