我的 Xen 设置中的网络配置如下:
- dom0有3个网卡(eth0、eth1、eth2),3个网卡(xenbrE、xenbrI、xenbrD),每个网卡都集成了相应的网卡。只有 xenbrD 配置了 IP 地址(192.168.78.2,专用 LAN),以便它可以与所有 domU 进行讨论。
- 有一个 domU 是防火墙/路由器,它还包含 3 个虚拟卡(eth0、eth1、eth2)。它确实伪装了 eth0(xenbrE 的一部分的外部接口)上的流量。
我的问题是当我在dom0中通过HTTP从互联网下载一个大文件时,下载速度不稳定。它逐渐上升,然后停顿几秒钟,然后重新开始逐渐上升(所有这些都在循环中,直到下载完成)。在停顿期间,看起来机器上的所有网络都被阻止(在交互式 SSH 会话中注意到)。
dom0 │domU
wget │
↕ │
eth2↔xenbrD(192.168.78.2)↔vif2.2←┼→eth2(192.168.78.1/24)
│ ↕ masquerading
eth0↔xenbrE↔vif2.0←——————————————┼→eth0(192.168.1.20/24)
↕
internet
如果我执行相同的下载但使用在防火墙 domU 中运行的(非缓存)HTTP 代理,则下载速率稳定在其最大值。
我怎样才能避免这个问题?
我怀疑这是网络堆栈中的一个错误,但我需要帮助来更准确地诊断它(并且可能找到解决方法)。
这是一个 Debian Etch 系统,带有 Xen 3.2 和 Debian Lenny (backports) 的 2.6.26-xen-686 内核。网桥是使用 /etc/network/interfaces 创建的:
auto lo
iface lo inet loopback
auto xenbrE
iface xenbrE inet manual
bridge_ports eth0
bridge_maxwait 0
auto xenbrI
iface xenbrI inet manual
bridge_ports eth1
bridge_maxwait 0
auto xenbrD
iface xenbrD inet static
address 192.168.78.2
netmask 255.255.255.0
gateway 192.168.78.1
bridge_ports eth2
bridge_maxwait 0
xend的配置并不复杂:
# grep '^(' /etc/xen/xend-config.sxp
(network-script network-dummy)
(vif-script vif-bridge)
(dom0-min-mem 150)
(dom0-cpus 0)
(vncpasswd '')
domU 的 Xen 网络设置通过以下方式完成:
# grep vif /etc/xen/xm.slis
vif = [ 'mac=00:16:3e:14:85:11, bridge=xenbrE', 'mac=00:16:3e:14:85:12, bridge=xenbrI', 'mac=00:16:3e:14:85:13, bridge=xenbrD' ]
dom0 中唯一的路由通过 xenbrD 重定向到 domU:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.78.0 0.0.0.0 255.255.255.0 U 0 0 0 xenbrD
0.0.0.0 192.168.78.1 0.0.0.0 UG 0 0 0 xenbrD
在 domU 中,唯一完成的 iptables 配置是iptables -t nat -A POSTROUTING -s 192.168.78.0/24 -o eth0 -j MASQUERADE
.