使用 DHCP 和路由网络为 KVM 虚拟机分配公共 IP 地址

使用 DHCP 和路由网络为 KVM 虚拟机分配公共 IP 地址

我有

  • 物理 VM 主机
  • qemu-kvm 中有多个虚拟机
  • 以及一组公共 8 IPv4 地址和一个 IPv6 子网,我可以轻松地将其分配给虚拟机。

它等于这张图表在KVM虚拟机中配置公网IP地址

网络设置图表

怎么做?

目前我使用一个虚拟桥设备将物理网络与所有虚拟机的以太网端口连接起来,并且只需在虚拟机中配置 IP。现在我想领养路由网络为了安全(虚拟机不能欺骗其他虚拟机的 IP 地址)和更轻松的配置(不要在每个虚拟机安装时输入 IP 配置详细信息)。

我的托管服务商拥有更大的网络(例如 IPv4 的 /24),但将其交换机配置为仅将我的 IP 地址路由到我的交换机端口。为了表明虚拟机的 IP 地址在我的主机的 MAC 地址上可用,我需要启用 ARP 代理。

我使用当前的 Debian Linux 9拉紧包含发行版软件包中的所有软件。

老派手动解决方案?

我想我可以在 Linux 中创建一个桥接设备,并手动为每个 IPv4 地址和 iptables 规则设置一个 DHCP 服务器,并将每个虚拟机连接到其中一个桥接器。但 libvirt 似乎有能力简化这一点。

我能找到的类似设置的最佳描述是https://jamielinux.com/docs/libvirt-networking-handbook/routed-network.html

第1期

我发现复制虚拟机以太网端口的MAC地址并重写网络的XML文件并重新启动网络很麻烦全部虚拟机。相反,我想在设置虚拟机时选择 IPv4 地址。

我认为为每个 IPv4 地址创建 1 个网络,其名称类似于static-192.168.1.2(然后使用公共 IP 地址)以及仅该地址的 DHCP 范围将允许这样做。对于更多地址,这可能无法扩展,但对于 8 个地址,我认为是这样。有更好的解决方案吗?

第2期

我尝试创建一个反映本地网络的网络,该网络具有较短的 DHCP 范围,以便在测试设置中提供两个示例 IPv4 地址。 192.168.23.0/24 是本地网络,VM 主机上有 192.168.23.7 br1

<network>
  <name>static</name>
  <bridge name="br1" />
  <forward mode="route"/>
  <ip address="192.168.23.1" netmask="255.255.255.0">
    <dhcp>
      <range start="192.168.23.8" end="192.168.23.10"/>
    </dhcp>
  </ip>
</network>

但我无法启动

# virsh net-create net.xml 
error: Failed to create network from net.xml
error: internal error: Network is already in use by interface br1

我已经配置了一个连接到物理接口的网桥,因为我认为该接口上的主机 IPv4 会锁定它。如何使用包含来自本地网络的单个 IPv4 地址的 DHCP 定义路由 libvirt 网络?

我发现这非常复杂,因为我从未真正使用过 libvirt,并且可能缺少一些信息。我会根据需要更新问题。

相关内容