使用 libvirt 将子网路由到虚拟机

使用 libvirt 将子网路由到虚拟机

我正在使用 libvirt,目前有一个基于 NAT 的网络设置,其中每个主机都有一个静态 IP。网络配置如下所示:

<network connections='4'>
  <name>default</name>
  <uuid>d5a1865e-fd35-4b15-994b-8c5f098e0b5a</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:59:68:25'/>
  <ip address='10.0.0.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='10.0.0.2' end='10.0.0.254'/>
      <host mac='52:54:00:18:41:51' name='host0' ip='10.0.0.2'/>
      <host mac='52:54:00:0a:20:20' name='host1' ip='10.0.0.3'/>
      <host mac='52:54:00:f1:05:fd' name='host2' ip='10.0.0.4'/>
      <host mac='52:54:00:de:74:22' name='host3' ip='10.0.0.5'/>
    </dhcp>
  </ip>
</network>

但是,我想为每个虚拟机分配一个内部子网,该子网中的每个 IP 都将路由到虚拟机。往返于这些地址的唯一流量将是虚拟机。

这是否可以通过默认的 libvirt 网络来实现?如果可以,是否可以在现有网络上实现?(也就是说,不需要创建新的网络)?

答案1

如果您使用桥接接口,这是可能的,因为它就像一个非托管交换机。因此,您可以使用它在虚拟机内绑定任意数量的 IP。

例子

/etc/network/interfaces(在主机上):

auto br0
iface br0 inet static
    address 10.0.0.1/24
    netmask 255.0.0.0
    bridge_stp      on
    bridge_maxwait  0

/etc/network/interfaces(在虚拟机上):

auto eth0
iface eth0 inet static
    address 10.0.0.1/24
    netmask 255.0.0.0

虚拟机配置:

<interface type='bridge'>
  <mac address='xx:xx:xx:xx:xx:xx'/>
  <source bridge='br0'/>
</interface>

相关内容