我有 5 台运行 Ubuntu 14.04 的物理机,它们都位于一个网络中。它们都有静态 IP 地址。每台机器都有 1 到 4 台通过 KVM/QEMU 运行 Ubuntu 14.04 的虚拟机。我可以使用 DHCP 为物理网络上的所有虚拟机获取非静态地址。但对于我的分布式软件,我需要所有虚拟机在虚拟网络内都有静态 IP 地址(因为我无法在物理网络上获得更多 IP 地址)。但是,这个虚拟网络应该涵盖所有虚拟机上的所有客户机。此外,其中一个虚拟机也应该在物理网络上有一个静态地址。
我已成功在单个主机中为所有虚拟机创建虚拟网络,因此这些虚拟机可以在那里拥有静态 IP,但如果我在每个主机上执行此操作,则行不通。我还在其中一台虚拟机的物理网络上为静态 IP 创建了一个桥接接口。
这是我想要的方案:
123.45.144.0/28 (physical network)
192.168.0.0/16 (virtual network for all the vms)
123.45.147.3 (host)
192.168.122.101, 123.45.147.49 (vm)
192.168.122.102 (vm)
192.168.122.103 (vm)
192.168.122.104 (vm)
123.45.147.4 (host)
192.168.122.105 (vm)
123.45.147.5 (host)
192.168.122.106 (vm)
123.45.147.6 (host)
192.168.122.107 (vm)
192.168.122.108 (vm)
123.45.147.7 (host)
192.168.122.109 (vm)
192.168.122.110 (vm)
以下是输出ifconfig
:
其中一位主持人:
eth0 Link encap:Ethernet HWaddr 5c:f9:dd:75:07:72
inet addr:123.45.147.3 Bcast:123.45.151.255 Mask:255.255.248.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
virbr0 Link encap:Ethernet HWaddr 52:54:00:bd:2b:39
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
具有桥接接口 ( eth1
) 和虚拟网络接口 ( eth0
)的虚拟机
eth0 Link encap:Ethernet HWaddr 52:54:00:59:2d:c8
inet addr:192.168.122.101 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
eth1 Link encap:Ethernet HWaddr 52:54:00:4d:d0:59
inet addr:123.45.147.49 Bcast:123.45.151.255 Mask:255.255.248.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
经过几个小时的谷歌搜索,我还是找不到与我面临的问题类似的设置。由于我对网络的了解程度相当低,因此如果能提供任何解决方案,我将不胜感激。
答案1
如果系统上有单独的 ethX 接口连接到物理网络,请在该接口上创建第二个网桥。然后,您可以在该虚拟网桥上配置物理地址。
可以在虚拟机上配置静态地址。这使得维护稳定的地址空间更加简单。
答案2
在每台主机上创建虚拟网络时,请注意ifconfig
“virbr0”的地址为“192.168.122.1”。创建虚拟网络后,尝试编辑每台主机上的虚拟网络配置文件,使“virbr0”包含不同的 IP 地址(例如,主机 2 上的 192.168.122.2、主机 3 上的 192.168.122.3、主机 4 上的 192.168.122.4、主机 5 上的 192.168.122.5)。
您可能遇到了重复 IP 问题,因为很容易忘记您的主机通过 virbr0 是该虚拟网络的成员。您必须更改配置文件中的 IP 地址,以便设置在重启后仍然有效。
您可能需要启用数据包转发才能实现此功能
sudo sysctl net.ipv4.ip_forward=1