桥接 linux 网络和虚拟化

Bridged linux networking and virtualization

我有 Linux 台主机 libvirt/kvm 虚拟化,虚拟机需要 "real" 静态 IP 地址,所以我决定设置桥接网络。我在主机和虚拟机属性中创建了 br0 我设置了源设备:主机设备 vnet0(Bridge 'br0').

例如,我的 br0 有 ip 192.168.1.1,其中一个 VM 有 192.168.1.5

一切正常,但随后我连接到虚拟机,客户端地址检测为 192.168.1.1。此外,所有 HTTP 请求都来自 192.168.1.1.

Q: 是我的错误,某种配置错误吗? VM如何获取客户端的真实IP?

Is it my mistake, some sort of misconfiguration? How can VM get the real IPs of the clients?

如果您从您的虚拟机 运行 所在的主机进行连接,那么它们 正在 获取真实的 IP 地址。您的主机与虚拟机共享网络(显然是 192.168.1.0/24 或类似网络)。当您从您的主机连接到您的虚拟机时,源地址为 192.168.1.1.

如果您从网络上的其他地方连接,您需要向我们提供您的配置的更多详细信息。

让我尝试根据我从您的问题中推断出的内容来回答:

由于您要为 VM 分配可路由的 IP 地址,

选项 1:将主机物理以太网接口添加到 vswitch(也称为 vswitch 上行链路)。此外,对于所有 VM 以太网接口,在物理以太网接口的 IP 所属的同一子网中分配 IP 地址。或者,如果 DHCP 服务器 运行 在同一个广播域(子网)中,如果接口配置为通过 DHCP

获取 IP,则虚拟机将从 DHCP 服务器获取 IP

选项 2:创建 vswitch 并将 X.Y.Z.1 IP 分配给 vswitch (br0)。还要在主机中启用 IP 转发。现在您可以将来自同一子网的 IP 分配给 VM 以太网接口。或者,您可以 运行 br0 上的 DHCP(例如 DNSmasq)并将 IP 分配给 VM 接口