2020年9月4日 星期五

virt-manager 的一些設定:虛擬機區網曝光、 實體硬碟、 UEFI

在 virt-manager 裡面指定橋接以便連線至區網 如果說 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 的更多使用提示:

  1. 映像檔存在哪裡? 預設的路徑 是 /var/lib/libvirt/images ; 我習慣不用硬碟、 直接以 debian live CD 的 iso 檔啟動虛擬機, 或是拿隨身碟或 lvm 的某個分割來啟動虛擬機, 所以用不太到這邊。
  2. 如果有用到虛擬硬碟, 建議 啟用 virtio (para-virtualization 類型的技術) 效率較高。
  3. 萬一按下右上角的「全螢幕」鈕, 該如何離開呢? 把滑鼠移到螢幕上緣中央 (美人尖的位置), 左右移動一下, 會看到一個小選單降下來。 詳見 這個問答
  4. 沒有聲音嗎? 試試 「音效裝置」改為模擬 AC97

開成品車真的比引擎裸露拼裝車要簡單多了。

2 則留言:

  1. 對,之前硬幹 libvirtd 有夠痛苦
    自從我把系統弄成 PVE 後我好開心(^3^♪

    回覆刪除

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。