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

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

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

我创build了KVM虚拟机:

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

现在,我想让互联网访问虚拟机:

 brctl addif enp3s0 br0 

enp3s0是我的主要接口。 一旦我运行这个命令,我的主机就失去了IP并访问了Internet。 即使我给它一个IP,问题依然存在:

 dhclient enp3s0 

主机和虚拟机都不能访问互联网。

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

你需要的是NAT,所以你的虚拟机将使用主机的IP地址来访问Internet。 您可以使用以下命令进行设置:

 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 

在此之后,您应该可以从虚拟机访问Internet(您不需要运行brctl

我怀疑你可能会发现最简单的解决scheme是不把你的网卡添加到网桥,而是使用转发和伪装。

换句话说,做一些事情:

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