24 虚拟网络 #
VM Guest 系统需要通过特定的方式来与其他 VM Guest 系统或本地网络通讯。用于连接 VM Guest 系统的网络接口由一个分离式设备驱动程序构成,也就是说,任何虚拟以太网设备在 Dom0 中都有一个对应的网络接口。此接口设置为访问 Dom0 中运行的虚拟网络。SUSE Linux Enterprise Server 的系统配置中全面集成了桥接式虚拟网络,您可以通过 YaST 配置该网络。
安装 Xen VM 主机服务器时,系统会在常规网络配置期间建议一种桥接式网络配置。用户可以选择在安装期间更改配置,并可根据本地需求对其进行自定义。
如果需要,可以在执行默认的物理服务器安装后,使用 YaST 中的Install Hypervisor and
Tools
模块来安装 Xen VM 主机服务器。此模块会使系统做好托管虚拟机的准备,包括调用默认网桥功能的建议。
如果使用 rpm
或 zypper
手动安装了 Xen VM 主机服务器所需的软件包,则其余的系统配置需要由管理员手动完成,或者通过 YaST 完成。
SUSE Linux Enterprise Server 中默认不使用 Xen 提供的网络脚本。这些脚本仅供参考,并且已禁用。SUSE Linux Enterprise Server 中使用的网络配置通过 YaST 系统配置完成,该系统配置类似于 SUSE Linux Enterprise Server 中的网络接口配置。
有关管理网桥的更多一般信息,请参见第 9.1.1 节 “网桥”。
24.1 Guest 系统的网络设备 #
Xen 超级管理程序可以提供不同类型的网络接口来连接 VM Guest 系统。首选网络设备应该是半虚拟化网络接口。此类网络接口的系统要求最低,却能实现最高的传输速率。最多可为每个 VM Guest 提供八个网络接口。
无法感知半虚拟化硬件的系统可能无法使用此方案。有多个模拟网络接口可用于将系统连接到只能以全虚拟化模式运行的网络。您可以自行选用以下模拟产品:
Realtek 8139 (PCI)。这是默认的模拟网卡。
AMD PCnet32 (PCI)
NE2000 (PCI)
NE2000 (ISA)
Intel e100 (PCI)
Intel e1000 及其衍生产品 e1000-82540em、e1000-82544gc 和 e1000-82545em (PCI)
以上网络接口全部都是软件接口。由于每个网络接口都必须具有唯一的 MAC 地址,因此已向这些接口可以使用的 Xensource 指派了一个地址范围。
虚拟化环境中的默认 MAC 地址配置会创建类似于 00:16:3E:xx:xx:xx 的随机 MAC 地址。一般情况下,可用 MAC 地址的数量应该足够大才能获得唯一地址。但是,如果您的安装规模非常大,或者要确保随机 MAC 地址指派不会造成问题,您也可以手动指派这些地址。
进行调试或系统管理时,知道 Dom0 中的哪个虚拟接口连接到正在运行的 Guest 中的哪个以太网设备可能很有帮助。可以从 Dom0 中的设备名称获得此信息。所有虚拟设备都遵循命名规则 vif<domain
number>.<interface_number>
。
例如,在 Dom0 中,ID 为 5 的 VM Guest 的第三个接口 (eth2) 的设备名称是 vif5.2
。要获取所有可用接口的列表,请运行 ip a
命令。
设备名称不包含有关此接口连接到哪个网桥的任何信息,但 Dom0 中提供了此信息。要大致了解有关哪个接口连接到哪个网桥的信息,请运行 bridge link
命令。输出可能如下所示:
>
sudo
bridge link 2: eth0 state DOWN : <NO-CARRIER,BROADCAST,MULTICAST,SLAVE,UP> mtu 1500 master br0 3: eth1 state UP : <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 master br1
此示例中配置了三个网桥:br0
、br1
和 br2
。当前为 br0
和 br1
各添加了一个真实的以太网设备,分别是 eth0
和 eth1
。
24.2 Xen 中基于主机的路由 #
可以将 Xen 设置为在控制 Dom0 中使用基于主机的路由,不过,YaST 目前还不能很好地支持此设置,需要手动对配置文件进行大量的编辑才能使用此设置。因此,此任务需要由高级管理员来完成。
仅当使用固定 IP 地址时,以下配置才起作用。在此过程中不能使用 DHCP,因为 VM Guest 和 VM 主机服务器系统都必须知道 IP 地址。
要创建路由式 Guest,最简单的方法就是将网络从桥接网络更改为路由网络。要执行以下过程,必须先安装一个使用桥接网络的 VM Guest。例如,VM 主机服务器名为 earth,IP 为 192.168.1.20;VM Guest 名为 alice,IP 为 192.168.1.21。
确保 alice 已关机。使用
xl
命令关机并检查。在 VM 主机服务器 earth 上准备网络配置:
创建一个用于路由流量的热插拔接口。为此,请创建包含以下内容的
/etc/sysconfig/network/ifcfg-alice.0
文件:NAME="Xen guest alice" BOOTPROTO="static" STARTMODE="hotplug"
确保已启用 IP 转发:
在 YaST 中,转到
› 。进入
选项卡,激活 和 选项。确认设置并退出 YaST。
将以下配置应用于
firewalld
:将 alice.0 添加到公共区域中的设备:
>
sudo
firewall-cmd --zone=public --add-interface=alice.0告知防火墙要转发哪个地址:
>
sudo
firewall-cmd --zone=public \ --add-forward-port=port=80:proto=tcp:toport=80:toaddr="192.168.1.21/32,0/0"使运行时配置更改永久生效:
>
sudo
firewall-cmd --runtime-to-permanent
将一个静态路由添加到 alice 的接口。为此,请将以下行添加到
/etc/sysconfig/network/routes
的末尾:192.168.1.21 - - alice.0
为确保 VM 主机服务器连接的交换机和路由器知道路由接口,请在 earth 上激活
proxy_arp
。将以下行添加到/etc/sysctl.conf
中:net.ipv4.conf.default.proxy_arp = 1 net.ipv4.conf.all.proxy_arp = 1
使用以下命令激活所有更改:
>
sudo
systemctl restart systemd-sysctl wicked
按照第 25.1 节 “XL — Xen 管理工具”中所述,通过更改 alice 的 vif 接口配置继续完成 VM Guest 的 Xen 配置。对配置过程中生成的文本文件进行以下更改:
去除以下代码段
bridge=br0
添加以下代码段:
vifname=vifalice.0
或
vifname=vifalice.0=emu
(针对全虚拟化域)。
按如下所示更改用于设置接口的脚本:
script=/etc/xen/scripts/vif-route-ifup
激活新配置并启动 VM Guest。
其余配置任务必须在 VM Guest 内部完成。
使用
xl console
DOMAIN 打开与 VM Guest 连接的控制台,然后登录。检查 Guest IP 是否设置为 192.168.1.21。
为 VM Guest 提供用于连接 VM 主机服务器的主机路由和默认网关。为此,请将以下行添加到
/etc/sysconfig/network/routes
中:192.168.1.20 - - eth0 default 192.168.1.20 - -
最后,测试从 VM Guest 到外部世界的网络连接,以及从网络到 VM Guest 的连接。
24.3 创建掩蔽网络设置 #
创建掩蔽网络设置与创建路由设置的过程相似。不过,创建掩蔽网络设置时不需要 proxy_arp,并且某些防火墙规则不同。要为 IP 地址为 192.168.100.1 并且其主机在 br0
上有自己的外部接口的 Guest(名为 dolly)创建掩蔽网络,请执行以下操作。为了简化配置,此处仅将已安装的 Guest 修改为使用掩蔽网络:
使用
xl shutdown
DOMAIN 关闭 VM Guest 系统。在 VM 主机服务器上准备网络配置:
创建一个用于路由流量的热插拔接口。为此,请创建包含以下内容的
/etc/sysconfig/network/ifcfg-dolly.0
文件:NAME="Xen guest dolly" BOOTPROTO="static" STARTMODE="hotplug"
编辑文件
/etc/sysconfig/SuSEfirewall2
,在其中添加以下配置:将 dolly.0 添加到 FW_DEV_DMZ 中的设备:
FW_DEV_DMZ="dolly.0"
在防火墙中打开路由:
FW_ROUTE="yes"
在防火墙中打开掩蔽:
FW_MASQUERADE="yes"
告知防火墙要掩蔽哪个网络:
FW_MASQ_NETS="192.168.100.1/32"
从掩蔽例外中去除网络:
FW_NOMASQ_NETS=""
最后,使用以下命令重启动防火墙:
>
sudo
systemctl restart SuSEfirewall2
向 dolly 的接口添加一个静态路由。为此,请将以下行添加到
/etc/sysconfig/network/routes
的末尾:192.168.100.1 - - dolly.0
使用以下命令激活所有更改:
>
sudo
systemctl restart wicked
继续完成 VM Guest 的 Xen 配置。
按照第 25.1 节 “XL — Xen 管理工具”中所述更改 dolly 的 vif 接口配置。
去除下面一项:
bridge=br0
添加以下代码段:
vifname=vifdolly.0
按如下所示更改用于设置接口的脚本:
script=/etc/xen/scripts/vif-route-ifup
激活新配置并启动 VM Guest。
其余配置任务需在 VM Guest 内部完成。
使用
xl console
DOMAIN 打开与 VM Guest 连接的控制台,然后登录。检查 Guest IP 是否设置为 192.168.100.1。
为 VM Guest 提供用于连接 VM 主机服务器的主机路由和默认网关。为此,请将以下行添加到
/etc/sysconfig/network/routes
中:192.168.1.20 - - eth0 default 192.168.1.20 - -
最后,测试从 VM Guest 到外部世界的网络连接。
24.4 特殊配置 #
在 Xen 中可以使用许多可行的网络配置。以下配置默认未激活:
24.4.1 虚拟网络中的带宽限制 #
在 Xen 中,您可以限制虚拟 Guest 在访问网桥时可使用的网络传输速率。要配置该限制,需要按照第 25.1 节 “XL — Xen 管理工具”中所述修改 VM Guest 配置。
在配置文件中,先搜索连接到虚拟网桥的设备。配置如下所示:
vif = [ 'mac=00:16:3e:4f:94:a9,bridge=br0' ]
要添加最大传输速率,请按如下所示在配置中添加参数 rate
:
vif = [ 'mac=00:16:3e:4f:94:a9,bridge=br0,rate=100Mb/s' ]
速率单位为 Mb/s
(每秒兆位数)或 MB/s
(每秒兆字节数)。在上面的示例中,虚拟接口的最大传输速率为 100 兆位。默认情况下,Guest 与虚拟网桥之间的带宽没有限制。
您甚至可以通过指定用于定义信用补充粒度的时段来微调该行为:
vif = [ 'mac=00:16:3e:4f:94:a9,bridge=br0,rate=100Mb/s@20ms' ]
24.4.2 监视网络流量 #
要监视特定接口上的流量,不妨使用一个实用的小应用程序 iftop
,它可在终端中显示当前网络流量。
运行 Xen VM 主机服务器时,需要定义受监视接口。Dom0 用来访问物理网络的接口是网桥设备,例如 br0
。但在您的系统上可能不是这样。要监视发往物理接口的所有流量,请以 root
身份运行终端并使用以下命令:
iftop -i br0
要监视特定 VM Guest 的特殊网络接口的网络流量,请提供正确的虚拟接口。例如,要监视 ID 为 5 的域的第一个以太网设备,请使用以下命令:
ftop -i vif5.0
要退出 iftop
,请按 Q 键。手册页 man 8 iftop
中介绍了更多选项和可行做法。