13 管理网络 #
本章介绍 VM 主机服务器的常用网络配置,包括 VM 主机服务器和 libvirt
本机支持的配置。这些配置对 SUSE Linux Enterprise Server 支持的所有超级管理程序(例如 KVM 或 Xen)均有效。
有两个常用网络配置可为 VM Guest 提供网络连接:
充当第 2 层交换机的网桥
由
libvirt
管理且支持第 3 层转发的虚拟网络
13.1 网桥 #
网桥配置为 VM Guest 提供第 2 层交换机,可以基于与端口关联的 MAC 地址在网桥上的端口之间交换第 2 层以太网包。这样 VM Guest 便可通过第 2 层连接访问 VM 主机服务器的网络。此配置类似于将 VM Guest 的虚拟以太网网线连接到与主机以及主机上运行的其他 VM Guest 共享的集线器。该配置通常称为共享物理设备。
当 SUSE Linux Enterprise Server 配置为 KVM 或 Xen 超级管理程序时,网桥配置是它的默认配置。如果您只想将 VM Guest 连接到 VM 主机服务器的 LAN,则此为首选配置。
13.1.1 使用 YaST 管理网桥 #
本节包含使用 YaST 添加或去除网桥的过程。
13.1.1.1 添加网桥 #
要在 VM 主机服务器上添加网桥,请执行以下步骤:
启动
› › 。激活
选项卡并单击 。从
列表中选择 ,然后在 项中输入网桥设备接口名称。按 按钮继续。在
选项卡中指定网络细节,例如 DHCP/静态 IP 地址、子网掩码或主机名。仅当您也将设备指派到与 DHCP 服务器连接的网桥时,
才有作用。如果您打算创建不与实际以太网设备连接的虚拟网桥,请使用
。在这种情况下,比较好的做法是使用私用 IP 地址范围(例如192.168.0.0/16
、172.16.0.0/12
或10.0.0.0/8
)内的地址。要创建仅在不同 Guest 之间充当连接点,而不连接到主机系统的网桥,请将 IP 地址设置为
0.0.0.0
,将子网掩码设置为255.255.255.255
。网络脚本会将此特殊地址作为未设置的 IP 地址来处理。激活
选项卡,然后激活您要包含在网桥中的网络设备。单击
返回到 选项卡,然后单击 以确认。现在,新网桥应在 VM 主机服务器上处于活动状态。
13.1.1.2 删除网桥 #
要删除现有网桥,请执行以下步骤:
启动
› › 。从
选项卡上的列表中选择您要删除的网桥设备。单击
以删除该网桥,然后单击 以确认。
13.1.2 通过命令行管理网桥 #
本节包含使用命令行添加或去除网桥的过程。
13.1.2.1 添加网桥 #
要在 VM 主机服务器上添加新网桥设备,请执行以下步骤:
在要创建新网桥的 VM 主机服务器上以
root
身份登录。为新网桥选择一个名称(在本示例中为 virbr_test),然后运行以下命令
root #
ip link add name VIRBR_TEST type bridge检查是否已在 VM 主机服务器上创建了网桥:
root #
bridge vlan [...] virbr_test 1 PVID Egress Untaggedvirbr_test
存在,但不与任何物理网络接口相关联。启动该网桥,并在其中添加一个网络接口:
root #
ip link set virbr_test uproot #
ip link set eth1 master virbr_test重要:网络接口必须未被使用只能指派尚未被其他网桥使用的网络接口。
(可选)启用 STP(请参见生成树协议)
root #
bridge link set dev virbr_test cost 4
13.1.2.2 删除网桥 #
要通过命令行删除 VM 主机服务器上的现有网桥设备,请执行以下步骤:
在要从中删除现有网桥的 VM 主机服务器上以
root
身份登录。列出现有网桥,以识别要去除的网桥的名称:
root #
bridge vlan [...] virbr_test 1 PVID Egress Untagged删除网桥:
root #
ip link delete dev virbr_test
13.1.3 使用 VLAN 接口 #
有时需要在两台 VM 主机服务器之间或者 VM Guest 系统之间创建私用连接。例如,要将 VM Guest 迁移到不同网段中的主机,或者创建只有 VM Guest 系统能够连接到的私用网桥(即使这些 VM Guest 在不同的 VM 主机服务器系统上运行)。构建此类连接的简单方法是设置 VLAN 网络。
VLAN 接口通常在 VM 主机服务器上设置。它们可以将不同的 VM 主机服务器系统互连,或者可以设置为其他仅限虚拟连接的网桥的物理接口。甚至可以创建一个使用 VLAN 作为物理接口(该接口在 VM 主机服务器中没有 IP 地址)的网桥。这样,Guest 系统就无法通过此网络访问主机。
运行 YaST 模块
› 。执行以下过程设置 VLAN 设备:单击
以创建新网络接口。在
对话框中,选择 。将
的值更改为 VLAN 的 ID。请注意,VLAN ID1
通常用于管理目的。单击“下一步”
将 VLAN 设备应连接到的借口选择为下面的
。如果所需的接口未显示在列表中,请先在不指定 IP 地址的情况下设置此接口。选择将 IP 地址指派到 VLAN 设备的所需方法。
单击
完成配置。
还可将 VLAN 接口用作网桥的物理接口。这样便可以连接多个仅限 VM 主机服务器的网络,以及实时迁移与此类网络连接的 VM Guest 系统。
YaST 并非始终允许不设置 IP 地址。但有时可能需要这种功能,尤其是应该连接仅限 VM 主机服务器的网络时。在这种情况下,请使用特殊地址 0.0.0.0
和网络掩码 255.255.255.255
。系统脚本会将此地址当作未设置 IP 地址来处理。
13.2 虚拟网络 #
libvirt
管理的虚拟网络类似于桥接的网络,但通常不与 VM 主机服务器建立第 2 层连接。与 VM 主机服务器物理网络的连接通过第 3 层转发来实现,与第 2 层桥接网络相比,第 3 层转发在 VM 主机服务器上引入了额外的包处理。虚拟网络还为 VM Guest 提供 DHCP 和 DNS 服务。有关 libvirt
虚拟网络的详细信息,请参见 https://libvirt.org/formatnetwork.html 上的《Network XML format》(网络 XML 格式)文档。
SUSE Linux Enterprise Server 上的标准 libvirt
安装已经随附了名为 default
的预定义虚拟网络,该虚拟网络为网络提供 DHCP 和 DNS 服务,并且能够通过网络地址转换 (NAT) 转发模式连接到 VM 主机服务器的物理网络。尽管已预定义了 default
虚拟网络,但它必须由管理员显式启用。有关 libvirt
支持的转发模式的详细信息,请参见 https://libvirt.org/formatnetwork.html#elementsConnect 上《Network XML format》(网络 XML 格式)文档中的“Connectivity”(连接)一节。
libvirt
管理的虚拟网络可用于满足各种用例,但通常是在进行无线连接或动态/零星网络连接的 VM 主机服务器(例如便携式计算机)上使用。虚拟网络也适用于 VM 主机服务器网络的 IP 地址有限的情形,可用来在虚拟网络与 VM 主机服务器的网络之间转发包。不过,大多数服务器用例更适合网桥配置,其中的 VM Guest 会连接到 VM 主机服务器的 LAN。
在 libvirt
虚拟网络中启用转发模式会通过将 /proc/sys/net/ipv4/ip_forward
和 /proc/sys/net/ipv6/conf/all/forwarding
设置为 1 在 VM 主机服务器中启用转发,而这本质上是将 VM 主机服务器转变成路由器。重启动 VM 主机服务器的网络可能会重设置值并禁用转发。要避免这种行为,请通过编辑 /etc/sysctl.conf
文件并添加以下设置,在 VM 主机服务器中显式启用转发:
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
13.2.1 使用虚拟机管理器管理虚拟网络 #
您可以使用虚拟机管理器定义、配置和操作虚拟网络。
13.2.1.1 定义虚拟网络 #
启动虚拟机管理器。在可用连接列表中,右键单击您需要为其配置虚拟网络的连接名称,然后选择
。在
窗口中,单击 选项卡。您会看到可用于当前连接的所有虚拟网络的列表。右侧会显示选定虚拟网络的细节。图 13.1︰ 连接细节 #要添加新虚拟网络,请单击
。指定新虚拟网络的名称,然后单击
。图 13.2︰ 创建虚拟网络 #要指定 IPv4 网络地址空间定义,请激活相关选项,并在
文本项中键入定义。图 13.3︰ 创建虚拟网络 #libvirt
可为虚拟网络提供 DHCP 服务器。如果需要此服务器,请激活 ,然后键入可指派地址的开始和结束 IP 地址范围。要为新虚拟网络启用静态路由,请激活相关选项,并键入网络地址和网关地址。
单击
继续。要指定 IPv6 相关的选项(网络地址空间、DHCPv6 服务器或静态路由),请激活
,然后激活相关选项并填写相关的框。单击
继续。选择您是要创建隔离的虚拟网络还是转发的虚拟网络。
图 13.4︰ 创建虚拟网络 #如果要创建转发的网络,请指定要将请求转发到的网络接口,以及以下其中一种转发模式:
(网络地址转换)模式会重新映射虚拟网络地址空间并允许共享单个 IP 地址,而 模式则会将包从虚拟网络转发到 VM 主机服务器的物理网络,但不进行转换。如果您之前未指定 IPv6 网络地址空间定义,可以在虚拟机之间启用 IPv6 内部路由。
(可选) (可选)更改 DNS 域名。
单击
以创建新虚拟网络。VM 主机服务器上即会有一个新的虚拟网桥virbrX
,该网桥对应于新建的虚拟网络。您可以使用bridge link
进行检查。libvirt
会自动添加 iptables 规则来允许传入/传出挂接到新 virbrX 设备的 Guest 的流量。
13.2.1.2 启动虚拟网络 #
要启动某个暂时停止的虚拟网络,请执行以下步骤:
启动虚拟机管理器。在可用连接列表中,右键单击您需要为其配置虚拟网络的连接名称,然后选择
。在
窗口中,单击 选项卡。您会看到可用于当前连接的所有虚拟网络的列表。要启动虚拟网络,请单击
。
13.2.1.3 停止虚拟网络 #
要停止活动的虚拟网络,请执行以下步骤:
启动虚拟机管理器。在可用连接列表中,右键单击您需要为其配置虚拟网络的连接名称,然后选择
。在
窗口中,单击 选项卡。您会看到可用于当前连接的所有虚拟网络的列表。选择要停止的虚拟网络,然后单击
。
13.2.1.4 删除虚拟网络 #
要删除 VM 主机服务器中的虚拟网络,请执行以下步骤:
启动虚拟机管理器。在可用连接列表中,右键单击您需要为其配置虚拟网络的连接名称,然后选择
。在
窗口中,单击 选项卡。您会看到可用于当前连接的所有虚拟网络的列表。选择要删除的虚拟网络,然后单击
。
13.2.1.5 使用 nsswitch
获取 NAT 网络的 IP 地址(在 KVM 中) #
在 VM 主机服务器上,安装用来为 libvirt 提供 NSS 支持的 libvirt-nss:
tux >
sudo
zypper in libvirt-nss将
libvirt
添加到/etc/nsswitch.conf
:... hosts: files libvirt mdns_minimal [NOTFOUND=return] dns ...
如果 NSCD 正在运行,请将其重启动:
tux >
sudo
systemctl restart nscd
现在,您可以从主机按名称访问 Guest 系统了。
NSS 模块的功能有限。它会读取 /var/lib/libvirt/dnsmasq/*.status
文件,以在描述 dnsmasq
所提供的每个租约的 JSON 记录中查找主机名和对应的 IP 地址。只能使用受 dnsmasq
支持且由 libvirt 管理的桥接网络在这些 VM 主机服务器上执行主机名转换。
有关更多信息,请参见http://wiki.libvirt.org/page/NSS_module。
13.2.2 使用 virsh
管理虚拟网络 #
您可以使用 virsh
命令行工具来管理 libvirt
提供的虚拟网络。要查看所有与网络相关的 virsh
命令,请运行以下命令
tux >
sudo
virsh help network Networking (help keyword 'network'): net-autostart autostart a network net-create create a network from an XML file net-define define (but don't start) a network from an XML file net-destroy destroy (stop) a network net-dumpxml network information in XML net-edit edit XML configuration for a network net-event Network Events net-info network information net-list list networks net-name convert a network UUID to network name net-start start a (previously defined) inactive network net-undefine undefine an inactive network net-update update parts of an existing network's configuration net-uuid convert a network name to network UUID
要查看特定 virsh
命令的简要帮助信息,请运行 virsh help VIRSH_COMMAND
:
tux >
sudo
virsh help net-create NAME net-create - create a network from an XML file SYNOPSIS net-create <file> DESCRIPTION Create a network. OPTIONS [--file] <string> file containing an XML network description
13.2.2.1 创建网络 #
要创建新的运行中虚拟网络,请运行以下命令
tux >
sudo
virsh net-create VNET_DEFINITION.xml
VNET_DEFINITION.xml XML 文件包含 libvirt
接受的虚拟网络的定义。
要定义新虚拟网络但不激活它,请运行以下命令
tux >
sudo
virsh net-define VNET_DEFINITION.xml
以下示例说明了不同类型的虚拟网络的定义。
下面的配置可在 VM 主机服务器上无法使用传出连接时实现 VM Guest 传出连接。当没有 VM 主机服务器网络时,此配置可让 Guest 互相直接通讯。
<network> <name>vnet_nated</name>1 <bridge name="virbr1"/>2 <forward mode="nat"/>3 <ip address="192.168.122.1" netmask="255.255.255.0">4 <dhcp> <range start="192.168.122.2" end="192.168.122.254"/>5 <host mac="52:54:00:c7:92:da" name="host1.testing.com" \ ip="192.168.1.23.101"/>6 <host mac="52:54:00:c7:92:db" name="host2.testing.com" \ ip="192.168.1.23.102"/> <host mac="52:54:00:c7:92:dc" name="host3.testing.com" \ ip="192.168.1.23.103"/> </dhcp> </ip> </network>
新虚拟网络的名称。 | |
用于构造虚拟网络的网桥设备的名称。定义 <forward> 模式为“nat”或“route”的新网络(或者不包含 <forward> 元素的隔离网络)时, | |
包含 <forward> 元素表示该虚拟网络将连接到物理 LAN。 | |
网桥的 IP 地址和网络掩码。 | |
为虚拟网络启用 DHCP 服务器,并提供从指定的 | |
可选的 <host> 元素指定内置 DHCP 服务器要为其分配名称和预定义 IP 地址的主机。任何 IPv4 host 元素都必须指定以下设置:要为其指派给定名称的主机的 MAC 地址、要指派到该主机的 IP,以及 DHCP 服务器要为该主机分配的名称。IPv6 host 元素与 IPv4 略有不同,它没有 |
下面的配置会在不应用任何 NAT 的情况下将流量从虚拟网络路由到 LAN。必须在 VM 主机服务器网络上的路由器的路由表中预定义 IP 地址范围。
<network>
<name>vnet_routed</name>
<bridge name="virbr1"/>
<forward mode="route" dev="eth1"/>1
<ip address="192.168.122.1" netmask="255.255.255.0">
<dhcp>
<range start="192.168.122.2" end="192.168.122.254"/>
</dhcp>
</ip>
</network>
Guest 流量只能通过 VM 主机服务器上的 |
此配置提供完全隔离的专用网络。Guest 可以相互通讯以及与 VM 主机服务器通讯,但无法访问 LAN 上的任何其他计算机,因为 XML 说明中没有 <forward> 元素。
<network> <name>vnet_isolated</name> <bridge name="virbr3"/> <ip address="192.168.152.1" netmask="255.255.255.0"> <dhcp> <range start="192.168.152.2" end="192.168.152.254"/> </dhcp> </ip> </network>
此配置说明如何使用 VM 主机服务器的现有网桥 br0
。VM Guest 直接连接到物理网络。其 IP 地址全部都在物理网络的子网中,并且传入和传出连接不存在任何限制。
<network> <name>host-bridge</name> <forward mode="bridge"/> <bridge name="br0"/> </network>
13.2.2.2 列出网络 #
要列出 libvirt
可用的所有虚拟网络,请运行以下命令:
tux >
sudo
virsh net-list --all Name State Autostart Persistent ---------------------------------------------------------- crowbar active yes yes vnet_nated active yes yes vnet_routed active yes yes vnet_isolated inactive yes yes
要列出可用域,请运行以下命令:
tux >
sudo
virsh list Id Name State ---------------------------------------------------- 1 nated_sles12sp3 running ...
要获取运行中域的接口列表,请运行 domifaddr DOMAIN
,或选择性地指定接口,以在输出中仅列出此接口。默认情况下,会额外输出接口的 IP 和 MAC 地址:
tux >
sudo
virsh domifaddr nated_sles12sp3 --interface vnet0 --source lease Name MAC address Protocol Address ------------------------------------------------------------------------------- vnet0 52:54:00:9e:0d:2b ipv6 fd00:dead:beef:55::140/64 - - ipv4 192.168.100.168/24
要列显与指定域关联的所有虚拟接口的简要信息,请运行以下命令:
tux >
sudo
virsh domiflist nated_sles12sp3 Interface Type Source Model MAC --------------------------------------------------------- vnet0 network vnet_nated virtio 52:54:00:9e:0d:2b
13.2.2.3 获取有关网络的细节 #
要获取有关网络的详细信息,请运行以下命令:
tux >
sudo
virsh net-info vnet_routed Name: vnet_routed UUID: 756b48ff-d0c6-4c0a-804c-86c4c832a498 Active: yes Persistent: yes Autostart: yes Bridge: virbr5
13.2.2.4 启动网络 #
要启动某个已定义的非活动网络,请使用以下命令查找其名称(或唯一标识符,即 UUID):
tux >
sudo
virsh net-list --inactive Name State Autostart Persistent ---------------------------------------------------------- vnet_isolated inactive yes yes
然后运行:
tux >
sudo
virsh net-start vnet_isolated Network vnet_isolated started
13.2.2.5 停止网络 #
要停止某个活动的网络,请使用以下命令查找其名称(或唯一标识符,即 UUID):
tux >
sudo
virsh net-list --inactive Name State Autostart Persistent ---------------------------------------------------------- vnet_isolated active yes yes
然后运行:
tux >
sudo
virsh net-destroy vnet_isolated Network vnet_isolated destroyed
13.2.2.6 去除网络 #
要从 VM 主机服务器中永久去除某个非活动网络的定义,请运行以下命令:
tux >
sudo
virsh net-undefine vnet_isolated Network vnet_isolated has been undefined