我为我的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