如果說 kvm 是 linux 虛擬機的引擎, 那麼 virt-manager 就是完工的車子。 以前年輕喜歡耍帥直接開著 引擎裸露 的 (網路連線) 拼裝車 上街拉風; 現在懶惰了, 還是開著完工的成品車比較簡單。 gtwang 的文章 有 virt-manager 慢動作分解教學; 笑傲紅塵路 有更多關於虛擬化技術的詳盡解說。 這篇我只想簡單筆記一下我的使用方式, 特別是對外網路的部分。
KVM/virt-manager 預設把虛擬機保護在 NAT 後面, 所以虛擬機可以上網; 但外界看不見虛擬機的 IP。 我的課需要讓學生們互相登入/攻擊彼此的虛擬機, 所以需要把每一部學生機的虛擬機拉出來、 讓它在區網裡曝光。 當然, 這會增加虛擬機遭到網路攻擊的風險 -- 尤其是以 iso 檔開機、 預設簡單登入密碼的虛擬機 -- 請謹慎使用。 這時需要做兩件事。
第一, 在 host 裡面取消實體網卡 (例如 eth0) 的對外連線、 建一個 bridge (例如隨意命名為 brext)、 以它來對外連線 (例如採用 dhcp4)、 把實體網卡 「降級」 成為接上這個 bridge 的網卡之一。 以 mint 20 ulyana 來說, 我採用內建的 netplan, 所以要把 /etc/netplan/*.yaml 備份到別處去, 改以下面的內容作為 /etc/netplan/1-networkd-bridge.yaml 新的網路設定:
network: version: 2 renderer: networkd ethernets: eth0: dhcp4: no bridges: brext: dhcp4: yes interfaces: - eth0
這是從 netplan
官網的範例集錦頁面 抄來小改的。
果然 netplan 的設定檔比以前的網路設定簡單很多。
請用 ls -l /sys/class/net/ | grep -v virtual
查詢你的機器上所有實體網卡名稱, 據此修改上面的 eth0。
改過之後必須 netplan apply
才會生效。
不過.. 如果是隨身碟開機, 每到一部新的機器,
抓到的網卡名稱可能會不一樣, 因此建議修改隨身碟上的開機設定檔
extlinux.conf 或
grub.cfg, 在開機命令列加上 net.ifnames=0 biosdevname=0
強制使用傳統的固定名稱 eth0。 詳見 Benjr.tw 的說明 。
第二, 請設定虛擬機的網卡, 把 「網路來源」 改成上面 netplan 設定檔裡的 "brext" (或是你所任意取的名字), 如圖。 這樣一來, 虛擬機跟 host 都會位於同一網段, 如果區網有 dhcp, 那麼虛擬機也會得到自動派送的 ip。
[2021/8/24] 補充: 如何把某顆實體硬碟指定給一部虛擬機?
這有點危險 -- 你必須先確認 host 沒有在用這顆硬碟的任何一部分,
特別是硬碟上如果有
lvm 的話, 必須先 vgchange -an
才可以啟動虛擬機。
我的做法是先用 live CD 建立虛擬機, 不要給它任何硬碟。
虛擬機建立好之後, (1) 到「顯示虛擬硬體細節」分頁按右鍵、 「加入硬體」
(2) 在 「貯藏」 項目底下, 不要 「建立映像」,
而是改選 「選取或建立自訂貯藏」。 按下 「管理」 之後, 即可
(3) 「瀏覽本機」, 選取或鍵入你的 /dev/sdz 之類的。
另外, 如果要讓虛擬機可以採 UEFI 途徑開機, 必須在 建立虛擬機的過程當中 選取 「在安裝前自訂組態」, 才會有 「firmware」 選項可以選擇 「/usr/share/OVMF/OVMF_CODE_4M.fd」 。 [2024/4/26] 注意: 如果選取了 .secboot.fd 或預設值 .ms.fd, 會變成 secure boot, 很麻煩,沒試過。 完成後要按 「開始安裝」 進行下一步。 一旦錯過了 「在安裝前自訂組態」 這個步驟, 這部虛擬機就再也無法設定 UEFI 開機了。 從 這裡 學來的。
以下是關於 virt-manager 的更多使用提示:
- 映像檔存在哪裡? 預設的路徑 是 /var/lib/libvirt/images ; 我習慣不用硬碟、 直接以 debian live CD 的 iso 檔啟動虛擬機, 或是拿隨身碟或 lvm 的某個分割來啟動虛擬機, 所以用不太到這邊。
- 如果有用到虛擬硬碟, 建議 啟用 virtio (para-virtualization 類型的技術) 效率較高。
- 萬一按下右上角的「全螢幕」鈕, 該如何離開呢? 把滑鼠移到螢幕上緣中央 (美人尖的位置), 左右移動一下, 會看到一個小選單降下來。 詳見 這個問答。
- 沒有聲音嗎? 試試 「音效裝置」改為模擬 AC97。
開成品車真的比引擎裸露拼裝車要簡單多了。
對,之前硬幹 libvirtd 有夠痛苦
回覆刪除自從我把系統弄成 PVE 後我好開心(^3^♪
感恩 PVE 讚嘆 PVE
刪除