Kvm-Virtualization
KVM下如何實現類似Virtualbox的橋接?
我需要將一些虛擬機從 Virtualbox 測試系統移動到 KVM 生產主機。主機是相同硬體和軟體系統的兩個副本(重要的是 64 位 Ubuntu Server v16.04)。
這一切都不是太複雜,但網路部分。
對於 virtualbox 的來賓,我有一個 virtio 乙太網適配器橋接到其中一個主機綁定設備。從主機連接到的網路和主機本身都可以輕鬆訪問來賓。這樣,來賓就像“網路上的另一台伺服器”。在操作過程中,除了 virbr0 橋,我什麼都看不到。
AFAIU,這個簡單的設置無法在 KVM 下複製。如果我使用橋接,那麼我無法從客人與主人交流。建議的解決方案是為來賓添加第二個介面以用於此類用途。
這是我唯一的選擇嗎?
然後,如果有任何技術細節可用,我想知道Virtualbox如何做KVM不能做的事情。
這並不像預期的那麼容易。@dyasny 的一般提示是正確的:確實是可行的。這裡的主要目標是:
- 請勿使用 3rd 方工具(如
virsh
、virtinst
或libvirt
)來學習和理解。- 以普通管理非特權使用者的身份執行虛擬機而不是 root。
這就是我的做法。
/etc/network/interfaces
通過註釋掉主乙太網的行來禁用主主機介面。- 在同一文件中創建一個包含該介面的網橋。原始介面將失去將去橋接的 IP。配置文件如下所示:
auto eth0 # no iface and IP stuff auto br0 iface br0 inet static bridge_ports eth0 bridge_stp off bridge_maxwait 0 bridge_fd 0 address 192.168.255.253/24 gateway 192.168.255.254
- 為 QEMU 創建一個 ACL 以允許到網橋的流量進入
/etc/quemu/bridge.conf
,所有權root:kvm
結束權限0640
。目錄/etc/quemu/
必須是root:kvm
and0770
:sudo mkdir -v /etc/qemu # 'br0' is the same name as used in the previous step echo allow br0 | sudo tee -a /etc/quemu/bridge.conf > /dev/null sudo chown -R -vc root:kvm /etc/qemu sudo chmod -vc 0770 /etc/qemu sudo chmod -vc 0640 /etc/qemu/*
- **修復橋接助手腳本。**如果僅對
root
.sudo chmod -vc u+s /usr/lib/qemu/qemu-bridge-helper
- 將您的非特權使用者添加到 group
kvm
。您需要註銷並登錄(或打開一個新會話)才能使其生效。sudo usermod -a -G kvm `id -un`
- 重啟網路。
sudo service networking restart
- 現在,當您通過命令行啟動 VM 時,您可以為網路設備使用如下參數列表:
... \ -netdev bridge,id=net0,br=br0
其中
net0
是列舉的網路設備(在這種情況下是第一個),並且br0
是前面定義的網橋介面的名稱。因此,例如,一個完整的命令行範例可以是這個:kvm -cpu host -machine q35 -boot order=dc -vga virtio -vnc 127.255.255.1:0 -name qemutest,process=qemutest -uuid 901f83ce-b999-459b-b1b6-a9ba94cac382 -smp cpus=4 -m size=8192 -cdrom /home/user/image.iso -drive file=/home/user/Desktop/QEMU/qemutest/qemutest-D0.qcow2,if=virtio -device virtio-net-pci,mac=02:19:3e:39:a5:de,netdev=net0 -netdev bridge,id=net0,br=br0
您所描述的是一個絕對標準的 KVM 橋接配置,幾乎記錄在您想要查看的任何地方。這個想法是在網橋下的主機上建立綁定(網橋保存主機的 IP 配置,而不是綁定),VM 將能夠像您在 vbox 中使用的一樣使用網橋。
一旦主機上有可用的網橋,virt-manager 將允許您選擇要連接的共享網路設備(例如新網橋),或者您可以簡單地更新 domxml 讓訪客使用網橋而不是預設的NAT網路