可以访问互联网的 KVM 虚拟机桥接接口吗?

可以访问互联网的 KVM 虚拟机桥接接口吗?

我为我的 KVM 虚拟机创建了一个桥接接口:

ip link add name br0 type bridge
ip addr add 172.20.0.1/24 dev br0
ip link set dev br0 up

我创建了 KVM 虚拟机:

virt-install --name $VM_NAME1 --network=bridge:br0,mac=$VM_MAC1
virt-install --name $VM_NAME2 --network=bridge:br0,mac=$VM_MAC2

现在,我想授予虚拟机 Internet 访问权限:

brctl addif enp3s0 br0

enp3s0 是我的主接口。一旦我运行此命令,我的主机就会失去其 IP 和对 Internet 的访问权限。即使我给它一个 IP,问题仍然存在:

dhclient enp3s0

主机和虚拟机都无法访问互联网。

答案1

当您将主机以太网控制器添加到网桥br0(连接到虚拟机)时,实际上是在网络上创建了两个新设备(两个具有新 MAC 地址的设备),而不是旧设备。在这种情况下,您的网桥和虚拟机应该各自获得一个新 IP。现在棘手的部分是您的 ISP/托管公司希望您的 MAC 与您的物理以太网控制器的 MAC 保持一致。当您启用网桥时,您的 ISP 无法识别新设备,从而导致无法连接互联网。

您需要的是 NAT,这样您的虚拟机将使用主机的 IP 地址来访问互联网。您可以使用以下命令进行设置:

ip link add name br0 type bridge
ip addr add 172.20.0.1/24 dev br0
ip link set dev br0 up
sysctl -w net.ipv4.ip_forward=1
iptables --table nat --append POSTROUTING --out-interface enp3s0 -j MASQUERADE
iptables --insert FORWARD --in-interface br0 -j ACCEPT

此后,您应该能够从虚拟机访问互联网(您不需要运行brctl

答案2

我想您可能会发现最简单的解决方案是不将您的 NIC 添加到桥接器,而是使用转发和伪装。

换句话说,做类似的事情:

  • sysctl -w net.ipv4.ip_forward=1
  • iptables -t nat -A POSTROUTING -o enp3s0 -j MASQUERADE

相关内容