Linux

可訪問 Internet 的 KVM VM 的橋接介面?

  • April 22, 2017

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

主機和虛擬機都無法訪問 Internet。

當您將主機乙太網控制器添加到網橋br0(連接到 VM)時,您實際上是在網路上創建了兩個新設備(兩個具有新 MAC 地址的設備)而不是舊設備。在這種情況下,您的網橋和您的虛擬機應該各自獲得一個新 IP。現在棘手的部分是您的 ISP/託管公司希望您的 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

引用自:https://serverfault.com/questions/845923